// Copyright 2014 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. import 'dart:io'; import 'package:file/memory.dart'; import 'package:platform/platform.dart'; import 'package:pub_semver/pub_semver.dart'; import 'package:snippets/snippets.dart'; import 'package:test/test.dart' hide TypeMatcher, isInstanceOf; import 'fake_process_manager.dart'; const String testVersionInfo = r''' { "frameworkVersion": "2.5.0-2.0.pre.63", "channel": "master", "repositoryUrl": "git@github.com:flutter/flutter.git", "frameworkRevision": "9b2f6f7f9ab96bb3302f81b814a094f33023e79a", "frameworkCommitDate": "2021-07-28 13:03:40 -0700", "engineRevision": "0ed62a16f36348e97b2baadd8ccfec3825f80c5d", "dartSdkVersion": "2.14.0 (build 2.14.0-360.0.dev)", "flutterRoot": "/home/user/flutter" } '''; void main() { group('FlutterInformation', () { late FakeProcessManager fakeProcessManager; late FakePlatform fakePlatform; late MemoryFileSystem memoryFileSystem; late FlutterInformation flutterInformation; setUp(() { fakeProcessManager = FakeProcessManager(); memoryFileSystem = MemoryFileSystem(); fakePlatform = FakePlatform(environment: {}); flutterInformation = FlutterInformation( filesystem: memoryFileSystem, processManager: fakeProcessManager, platform: fakePlatform, ); }); test('calls out to flutter if FLUTTER_VERSION is not set', () async { fakeProcessManager.stdout = testVersionInfo; final Map info = flutterInformation.getFlutterInformation(); expect(fakeProcessManager.runs, equals(1)); expect( info['frameworkVersion'], equals(Version.parse('2.5.0-2.0.pre.63'))); }); test("doesn't call out to flutter if FLUTTER_VERSION is set", () async { fakePlatform.environment['FLUTTER_VERSION'] = testVersionInfo; final Map info = flutterInformation.getFlutterInformation(); expect(fakeProcessManager.runs, equals(0)); expect( info['frameworkVersion'], equals(Version.parse('2.5.0-2.0.pre.63'))); }); test('getFlutterRoot calls out to flutter if FLUTTER_ROOT is not set', () async { fakeProcessManager.stdout = testVersionInfo; final Directory root = flutterInformation.getFlutterRoot(); expect(fakeProcessManager.runs, equals(1)); expect(root.path, equals('/home/user/flutter')); }); test("getFlutterRoot doesn't call out to flutter if FLUTTER_ROOT is set", () async { fakePlatform.environment['FLUTTER_ROOT'] = '/home/user/flutter'; final Directory root = flutterInformation.getFlutterRoot(); expect(fakeProcessManager.runs, equals(0)); expect(root.path, equals('/home/user/flutter')); }); test('parses version properly', () async { fakePlatform.environment['FLUTTER_VERSION'] = testVersionInfo; final Map info = flutterInformation.getFlutterInformation(); expect(info['frameworkVersion'], isNotNull); expect( info['frameworkVersion'], equals(Version.parse('2.5.0-2.0.pre.63'))); expect(info['dartSdkVersion'], isNotNull); expect(info['dartSdkVersion'], equals(Version.parse('2.14.0-360.0.dev'))); }); }); }