Unverified Commit 55e3770f authored by Jonah Williams's avatar Jonah Williams Committed by GitHub

[flutter_tools] remove globals from base/android (#60480)

Remove unnecessary use of globals from base tests, and an android test. This changes the test to avoid bouncing through the global getters, which can lead to incorrectly cached zone values. Switches the memory filesystem implementation to the test implementation
parent 84f50d14
......@@ -4,10 +4,12 @@
import 'package:file/memory.dart';
import 'package:flutter_tools/src/android/android_sdk.dart';
import 'package:flutter_tools/src/base/config.dart';
import 'package:flutter_tools/src/base/file_system.dart';
import 'package:flutter_tools/src/base/io.dart' show ProcessResult;
import 'package:flutter_tools/src/base/logger.dart';
import 'package:flutter_tools/src/base/platform.dart';
import 'package:flutter_tools/src/globals.dart' as globals;
import 'package:meta/meta.dart';
import 'package:mockito/mockito.dart';
import 'package:process/process.dart';
......@@ -18,12 +20,18 @@ import '../../src/mocks.dart';
class MockProcessManager extends Mock implements ProcessManager {}
void main() {
MemoryFileSystem fs;
MemoryFileSystem fileSystem;
MockProcessManager processManager;
Config config;
setUp(() {
fs = MemoryFileSystem();
fileSystem = MemoryFileSystem.test();
processManager = MockProcessManager();
config = Config.test(
'test',
directory: fileSystem.currentDirectory,
logger: BufferLogger.test(),
);
});
group('android_sdk AndroidSdk', () {
......@@ -38,101 +46,108 @@ void main() {
testUsingContext('parse sdk', () {
sdkDir = MockAndroidSdk.createSdkDirectory();
globals.config.setValue('android-sdk', sdkDir.path);
config.setValue('android-sdk', sdkDir.path);
final AndroidSdk sdk = AndroidSdk.locateAndroidSdk();
expect(sdk.latestVersion, isNotNull);
expect(sdk.latestVersion.sdkLevel, 23);
}, overrides: <Type, Generator>{
FileSystem: () => fs,
FileSystem: () => fileSystem,
ProcessManager: () => FakeProcessManager.any(),
Config: () => config,
});
testUsingContext('parse sdk N', () {
sdkDir = MockAndroidSdk.createSdkDirectory(withAndroidN: true);
globals.config.setValue('android-sdk', sdkDir.path);
config.setValue('android-sdk', sdkDir.path);
final AndroidSdk sdk = AndroidSdk.locateAndroidSdk();
expect(sdk.latestVersion, isNotNull);
expect(sdk.latestVersion.sdkLevel, 24);
}, overrides: <Type, Generator>{
FileSystem: () => fs,
FileSystem: () => fileSystem,
ProcessManager: () => FakeProcessManager.any(),
Config: () => config,
});
testUsingContext('returns sdkmanager path under cmdline tools on Linux/macOS', () {
sdkDir = MockAndroidSdk.createSdkDirectory();
globals.config.setValue('android-sdk', sdkDir.path);
config.setValue('android-sdk', sdkDir.path);
final AndroidSdk sdk = AndroidSdk.locateAndroidSdk();
globals.fs.file(
globals.fs.path.join(sdk.directory, 'cmdline-tools', 'latest', 'bin', 'sdkmanager')
fileSystem.file(
fileSystem.path.join(sdk.directory, 'cmdline-tools', 'latest', 'bin', 'sdkmanager')
).createSync(recursive: true);
expect(sdk.sdkManagerPath, globals.fs.path.join(sdk.directory, 'cmdline-tools', 'latest', 'bin', 'sdkmanager'));
expect(sdk.sdkManagerPath, fileSystem.path.join(sdk.directory, 'cmdline-tools', 'latest', 'bin', 'sdkmanager'));
}, overrides: <Type, Generator>{
FileSystem: () => fs,
FileSystem: () => fileSystem,
ProcessManager: () => FakeProcessManager.any(),
Platform: () => FakePlatform(operatingSystem: 'linux'),
Config: () => config,
});
testUsingContext('returns sdkmanager.bat path under cmdline tools for windows', () {
sdkDir = MockAndroidSdk.createSdkDirectory();
globals.config.setValue('android-sdk', sdkDir.path);
config.setValue('android-sdk', sdkDir.path);
final AndroidSdk sdk = AndroidSdk.locateAndroidSdk();
globals.fs.file(
globals.fs.path.join(sdk.directory, 'cmdline-tools', 'latest', 'bin', 'sdkmanager.bat')
fileSystem.file(
fileSystem.path.join(sdk.directory, 'cmdline-tools', 'latest', 'bin', 'sdkmanager.bat')
).createSync(recursive: true);
expect(sdk.sdkManagerPath,
globals.fs.path.join(sdk.directory, 'cmdline-tools', 'latest', 'bin', 'sdkmanager.bat'));
fileSystem.path.join(sdk.directory, 'cmdline-tools', 'latest', 'bin', 'sdkmanager.bat'));
}, overrides: <Type, Generator>{
FileSystem: () => fs,
FileSystem: () => fileSystem,
ProcessManager: () => FakeProcessManager.any(),
Platform: () => FakePlatform(operatingSystem: 'windows'),
Config: () => config,
});
testUsingContext('returns sdkmanager path under tools if cmdline doesnt exist', () {
sdkDir = MockAndroidSdk.createSdkDirectory();
globals.config.setValue('android-sdk', sdkDir.path);
config.setValue('android-sdk', sdkDir.path);
final AndroidSdk sdk = AndroidSdk.locateAndroidSdk();
expect(sdk.sdkManagerPath, globals.fs.path.join(sdk.directory, 'tools', 'bin', 'sdkmanager'));
expect(sdk.sdkManagerPath, fileSystem.path.join(sdk.directory, 'tools', 'bin', 'sdkmanager'));
}, overrides: <Type, Generator>{
FileSystem: () => fs,
FileSystem: () => fileSystem,
ProcessManager: () => FakeProcessManager.any(),
Config: () => config,
});
testUsingContext('returns sdkmanager version', () {
sdkDir = MockAndroidSdk.createSdkDirectory();
globals.config.setValue('android-sdk', sdkDir.path);
config.setValue('android-sdk', sdkDir.path);
final AndroidSdk sdk = AndroidSdk.locateAndroidSdk();
when(globals.processManager.canRun(sdk.sdkManagerPath)).thenReturn(true);
when(globals.processManager.runSync(<String>[sdk.sdkManagerPath, '--version'],
when(processManager.canRun(sdk.sdkManagerPath)).thenReturn(true);
when(processManager.runSync(<String>[sdk.sdkManagerPath, '--version'],
environment: argThat(isNotNull, named: 'environment')))
.thenReturn(ProcessResult(1, 0, '26.1.1\n', ''));
if (globals.platform.isMacOS) {
when(globals.processManager.runSync(
<String>['/usr/libexec/java_home', '-v', '1.8'],
workingDirectory: anyNamed('workingDirectory'),
environment: anyNamed('environment'),
)).thenReturn(ProcessResult(0, 0, '', ''));
}
when(processManager.runSync(
<String>['/usr/libexec/java_home', '-v', '1.8'],
workingDirectory: anyNamed('workingDirectory'),
environment: anyNamed('environment'),
)).thenReturn(ProcessResult(0, 0, '', ''));
expect(sdk.sdkManagerVersion, '26.1.1');
}, overrides: <Type, Generator>{
FileSystem: () => fs,
FileSystem: () => fileSystem,
ProcessManager: () => processManager,
Config: () => config,
});
testUsingContext('returns validate sdk is well formed', () {
sdkDir = MockBrokenAndroidSdk.createSdkDirectory();
globals.config.setValue('android-sdk', sdkDir.path);
sdkDir = MockBrokenAndroidSdk.createSdkDirectory(
fileSystem: fileSystem,
);
config.setValue('android-sdk', sdkDir.path);
final AndroidSdk sdk = AndroidSdk.locateAndroidSdk();
when(globals.processManager.canRun(sdk.adbPath)).thenReturn(true);
when(processManager.canRun(sdk.adbPath)).thenReturn(true);
final List<String> validationIssues = sdk.validateSdkWellFormed();
expect(validationIssues.first, 'No valid Android SDK platforms found in'
......@@ -140,42 +155,45 @@ void main() {
' - android-22\n'
' - android-23');
}, overrides: <Type, Generator>{
FileSystem: () => fs,
FileSystem: () => fileSystem,
ProcessManager: () => processManager,
Config: () => config,
Platform: () => FakePlatform(operatingSystem: 'linux'),
});
testUsingContext('does not throw on sdkmanager version check failure', () {
sdkDir = MockAndroidSdk.createSdkDirectory();
globals.config.setValue('android-sdk', sdkDir.path);
config.setValue('android-sdk', sdkDir.path);
final AndroidSdk sdk = AndroidSdk.locateAndroidSdk();
when(globals.processManager.canRun(sdk.sdkManagerPath)).thenReturn(true);
when(globals.processManager.runSync(<String>[sdk.sdkManagerPath, '--version'],
when(processManager.canRun(sdk.sdkManagerPath)).thenReturn(true);
when(processManager.runSync(<String>[sdk.sdkManagerPath, '--version'],
environment: argThat(isNotNull, named: 'environment')))
.thenReturn(ProcessResult(1, 1, '26.1.1\n', 'Mystery error'));
if (globals.platform.isMacOS) {
when(globals.processManager.runSync(
<String>['/usr/libexec/java_home', '-v', '1.8'],
workingDirectory: anyNamed('workingDirectory'),
environment: anyNamed('environment'),
)).thenReturn(ProcessResult(0, 0, '', ''));
}
when(processManager.runSync(
<String>['/usr/libexec/java_home', '-v', '1.8'],
workingDirectory: anyNamed('workingDirectory'),
environment: anyNamed('environment'),
)).thenReturn(ProcessResult(0, 0, '', ''));
expect(sdk.sdkManagerVersion, isNull);
}, overrides: <Type, Generator>{
FileSystem: () => fs,
FileSystem: () => fileSystem,
ProcessManager: () => processManager,
Config: () => config,
});
testUsingContext('throws on sdkmanager version check if sdkmanager not found', () {
sdkDir = MockAndroidSdk.createSdkDirectory(withSdkManager: false);
globals.config.setValue('android-sdk', sdkDir.path);
config.setValue('android-sdk', sdkDir.path);
final AndroidSdk sdk = AndroidSdk.locateAndroidSdk();
when(globals.processManager.canRun(sdk.sdkManagerPath)).thenReturn(false);
when(processManager.canRun(sdk.sdkManagerPath)).thenReturn(false);
expect(() => sdk.sdkManagerVersion, throwsToolExit());
}, overrides: <Type, Generator>{
FileSystem: () => fs,
FileSystem: () => fileSystem,
ProcessManager: () => processManager,
Config: () => config,
});
});
}
......@@ -185,15 +203,15 @@ class MockBrokenAndroidSdk extends Mock implements AndroidSdk {
static Directory createSdkDirectory({
bool withAndroidN = false,
bool withSdkManager = true,
@required FileSystem fileSystem,
}) {
final Directory dir = globals.fs.systemTempDirectory.createTempSync('flutter_mock_android_sdk.');
final String exe = globals.platform.isWindows ? '.exe' : '';
final Directory dir = fileSystem.systemTempDirectory.createTempSync('flutter_mock_android_sdk.');
_createSdkFile(dir, 'licenses/dummy');
_createSdkFile(dir, 'platform-tools/adb$exe');
_createSdkFile(dir, 'platform-tools/adb');
_createSdkFile(dir, 'build-tools/sda/aapt$exe');
_createSdkFile(dir, 'build-tools/af/aapt$exe');
_createSdkFile(dir, 'build-tools/ljkasd/aapt$exe');
_createSdkFile(dir, 'build-tools/sda/aapt');
_createSdkFile(dir, 'build-tools/af/aapt');
_createSdkFile(dir, 'build-tools/ljkasd/aapt');
_createSdkFile(dir, 'platforms/android-22/android.jar');
_createSdkFile(dir, 'platforms/android-23/android.jar');
......
......@@ -7,10 +7,8 @@ import 'dart:convert' show json;
import 'package:file/memory.dart';
import 'package:flutter_tools/src/base/file_system.dart';
import 'package:flutter_tools/src/base/fingerprint.dart';
import 'package:flutter_tools/src/base/platform.dart';
import 'package:flutter_tools/src/base/utils.dart';
import 'package:flutter_tools/src/build_info.dart';
import 'package:flutter_tools/src/globals.dart' as globals;
import 'package:flutter_tools/src/version.dart';
import 'package:mockito/mockito.dart';
......@@ -21,24 +19,24 @@ void main() {
group('Fingerprinter', () {
const String kVersion = '123456abcdef';
MemoryFileSystem fs;
MemoryFileSystem fileSystem;
MockFlutterVersion mockVersion;
setUp(() {
fs = MemoryFileSystem();
fileSystem = MemoryFileSystem.test();
mockVersion = MockFlutterVersion();
when(mockVersion.frameworkRevision).thenReturn(kVersion);
});
final Map<Type, Generator> contextOverrides = <Type, Generator>{
FileSystem: () => fs,
FileSystem: () => fileSystem,
ProcessManager: () => FakeProcessManager.any(),
};
testUsingContext('throws when depfile is malformed', () {
globals.fs.file('a.dart').createSync();
globals.fs.file('b.dart').createSync();
globals.fs.file('depfile').createSync();
fileSystem.file('a.dart').createSync();
fileSystem.file('b.dart').createSync();
fileSystem.file('depfile').createSync();
final Fingerprinter fingerprinter = Fingerprinter(
fingerprintPath: 'out.fingerprint',
......@@ -53,7 +51,7 @@ void main() {
}, overrides: contextOverrides);
testUsingContext('creates fingerprint with specified properties and files', () {
globals.fs.file('a.dart').createSync();
fileSystem.file('a.dart').createSync();
final Fingerprinter fingerprinter = Fingerprinter(
fingerprintPath: 'out.fingerprint',
......@@ -71,9 +69,9 @@ void main() {
}, overrides: contextOverrides);
testUsingContext('creates fingerprint with file checksums', () {
globals.fs.file('a.dart').createSync();
globals.fs.file('b.dart').createSync();
globals.fs.file('depfile').writeAsStringSync('depfile : b.dart');
fileSystem.file('a.dart').createSync();
fileSystem.file('b.dart').createSync();
fileSystem.file('depfile').writeAsStringSync('depfile : b.dart');
final Fingerprinter fingerprinter = Fingerprinter(
fingerprintPath: 'out.fingerprint',
......@@ -92,8 +90,8 @@ void main() {
}, overrides: contextOverrides);
testUsingContext('fingerprint does not match if not present', () {
globals.fs.file('a.dart').createSync();
globals.fs.file('b.dart').createSync();
fileSystem.file('a.dart').createSync();
fileSystem.file('b.dart').createSync();
final Fingerprinter fingerprinter = Fingerprinter(
fingerprintPath: 'out.fingerprint',
......@@ -107,8 +105,8 @@ void main() {
}, overrides: contextOverrides);
testUsingContext('fingerprint does match if different', () {
globals.fs.file('a.dart').createSync();
globals.fs.file('b.dart').createSync();
fileSystem.file('a.dart').createSync();
fileSystem.file('b.dart').createSync();
final Fingerprinter fingerprinter1 = Fingerprinter(
fingerprintPath: 'out.fingerprint',
......@@ -132,9 +130,9 @@ void main() {
}, overrides: contextOverrides);
testUsingContext('fingerprint does not match if depfile is malformed', () {
globals.fs.file('a.dart').createSync();
globals.fs.file('b.dart').createSync();
globals.fs.file('depfile').writeAsStringSync('depfile : b.dart');
fileSystem.file('a.dart').createSync();
fileSystem.file('b.dart').createSync();
fileSystem.file('depfile').writeAsStringSync('depfile : b.dart');
// Write a valid fingerprint
final Fingerprinter fingerprinter = Fingerprinter(
......@@ -149,7 +147,7 @@ void main() {
fingerprinter.writeFingerprint();
// Write a corrupt depfile.
globals.fs.file('depfile').writeAsStringSync('');
fileSystem.file('depfile').writeAsStringSync('');
final Fingerprinter badFingerprinter = Fingerprinter(
fingerprintPath: 'out.fingerprint',
paths: <String>['a.dart', 'b.dart'],
......@@ -164,9 +162,9 @@ void main() {
}, overrides: contextOverrides);
testUsingContext('fingerprint does not match if previous fingerprint is malformed', () {
globals.fs.file('a.dart').createSync();
globals.fs.file('b.dart').createSync();
globals.fs.file('out.fingerprint').writeAsStringSync('** not JSON **');
fileSystem.file('a.dart').createSync();
fileSystem.file('b.dart').createSync();
fileSystem.file('out.fingerprint').writeAsStringSync('** not JSON **');
final Fingerprinter fingerprinter = Fingerprinter(
fingerprintPath: 'out.fingerprint',
......@@ -181,8 +179,8 @@ void main() {
}, overrides: contextOverrides);
testUsingContext('fingerprint does match if identical', () {
globals.fs.file('a.dart').createSync();
globals.fs.file('b.dart').createSync();
fileSystem.file('a.dart').createSync();
fileSystem.file('b.dart').createSync();
final Fingerprinter fingerprinter = Fingerprinter(
fingerprintPath: 'out.fingerprint',
......@@ -206,13 +204,13 @@ void main() {
},
);
fingerprinter.writeFingerprint();
expect(globals.fs.file('out.fingerprint').existsSync(), isFalse);
expect(fileSystem.file('out.fingerprint').existsSync(), isFalse);
}, overrides: contextOverrides);
testUsingContext('applies path filter to inputs paths', () {
globals.fs.file('a.dart').createSync();
globals.fs.file('ab.dart').createSync();
globals.fs.file('depfile').writeAsStringSync('depfile : ab.dart c.dart');
fileSystem.file('a.dart').createSync();
fileSystem.file('ab.dart').createSync();
fileSystem.file('depfile').writeAsStringSync('depfile : ab.dart c.dart');
final Fingerprinter fingerprinter = Fingerprinter(
fingerprintPath: 'out.fingerprint',
......@@ -225,7 +223,7 @@ void main() {
pathFilter: (String path) => path.startsWith('a'),
);
fingerprinter.writeFingerprint();
expect(globals.fs.file('out.fingerprint').existsSync(), isTrue);
expect(fileSystem.file('out.fingerprint').existsSync(), isTrue);
}, overrides: contextOverrides);
});
......@@ -239,26 +237,26 @@ void main() {
});
group('fromBuildInputs', () {
MemoryFileSystem fs;
MemoryFileSystem fileSystem;
setUp(() {
fs = MemoryFileSystem();
fileSystem = MemoryFileSystem.test();
});
testUsingContext('throws if any input file does not exist', () {
globals.fs.file('a.dart').createSync();
fileSystem.file('a.dart').createSync();
expect(
() => Fingerprint.fromBuildInputs(const <String, String>{}, const <String>['a.dart', 'b.dart']),
throwsException,
);
}, overrides: <Type, Generator>{
FileSystem: () => fs,
FileSystem: () => fileSystem,
ProcessManager: () => FakeProcessManager.any(),
});
testUsingContext('populates checksums for valid files', () {
globals.fs.file('a.dart').writeAsStringSync('This is a');
globals.fs.file('b.dart').writeAsStringSync('This is b');
fileSystem.file('a.dart').writeAsStringSync('This is a');
fileSystem.file('b.dart').writeAsStringSync('This is b');
final Fingerprint fingerprint = Fingerprint.fromBuildInputs(const <String, String>{}, const <String>['a.dart', 'b.dart']);
final Map<String, dynamic> jsonObject = castStringKeyedMap(json.decode(fingerprint.toJson()));
......@@ -266,7 +264,7 @@ void main() {
expect(jsonObject['files']['a.dart'], '8a21a15fad560b799f6731d436c1b698');
expect(jsonObject['files']['b.dart'], '6f144e08b58cd0925328610fad7ac07c');
}, overrides: <Type, Generator>{
FileSystem: () => fs,
FileSystem: () => fileSystem,
ProcessManager: () => FakeProcessManager.any(),
});
......@@ -441,24 +439,24 @@ void main() {
});
group('readDepfile', () {
MemoryFileSystem fs;
MemoryFileSystem fileSystem;
setUp(() {
fs = MemoryFileSystem();
fileSystem = MemoryFileSystem.test();
});
final Map<Type, Generator> contextOverrides = <Type, Generator>{
FileSystem: () => fs,
FileSystem: () => fileSystem,
ProcessManager: () => FakeProcessManager.any(),
};
testUsingContext('returns one file if only one is listed', () {
globals.fs.file('a.d').writeAsStringSync('snapshot.d: /foo/a.dart');
fileSystem.file('a.d').writeAsStringSync('snapshot.d: /foo/a.dart');
expect(readDepfile('a.d'), unorderedEquals(<String>['/foo/a.dart']));
}, overrides: contextOverrides);
testUsingContext('returns multiple files', () {
globals.fs.file('a.d').writeAsStringSync('snapshot.d: /foo/a.dart /foo/b.dart');
fileSystem.file('a.d').writeAsStringSync('snapshot.d: /foo/a.dart /foo/b.dart');
expect(readDepfile('a.d'), unorderedEquals(<String>[
'/foo/a.dart',
'/foo/b.dart',
......@@ -466,7 +464,7 @@ void main() {
}, overrides: contextOverrides);
testUsingContext('trims extra spaces between files', () {
globals.fs.file('a.d').writeAsStringSync('snapshot.d: /foo/a.dart /foo/b.dart /foo/c.dart');
fileSystem.file('a.d').writeAsStringSync('snapshot.d: /foo/a.dart /foo/b.dart /foo/c.dart');
expect(readDepfile('a.d'), unorderedEquals(<String>[
'/foo/a.dart',
'/foo/b.dart',
......@@ -475,7 +473,7 @@ void main() {
}, overrides: contextOverrides);
testUsingContext('returns files with spaces and backslashes', () {
globals.fs.file('a.d').writeAsStringSync(r'snapshot.d: /foo/a\ a.dart /foo/b\\b.dart /foo/c\\ c.dart');
fileSystem.file('a.d').writeAsStringSync(r'snapshot.d: /foo/a\ a.dart /foo/b\\b.dart /foo/c\\ c.dart');
expect(readDepfile('a.d'), unorderedEquals(<String>[
r'/foo/a a.dart',
r'/foo/b\b.dart',
......@@ -484,8 +482,3 @@ void main() {
}, overrides: contextOverrides);
});
}
class MockPlatform extends Mock implements Platform {
@override
Map<String, String> environment = <String, String>{};
}
......@@ -3,42 +3,46 @@
// found in the LICENSE file.
import 'package:flutter_tools/src/base/file_system.dart';
import 'package:flutter_tools/src/base/logger.dart';
import 'package:flutter_tools/src/base/os.dart';
import 'package:flutter_tools/src/globals.dart' as globals;
import 'package:flutter_tools/src/base/platform.dart';
import 'package:flutter_tools/src/base/signals.dart';
import 'package:process/process.dart';
import '../../src/common.dart';
import '../../src/context.dart';
void main() {
group('OperatingSystemUtils', () {
Directory tempDir;
FileSystem fileSystem;
setUp(() {
tempDir = globals.fs.systemTempDirectory.createTempSync('flutter_tools_os_utils_test.');
fileSystem = LocalFileSystem.test(signals: Signals.test());
tempDir = fileSystem.systemTempDirectory.createTempSync('flutter_tools_os_utils_test.');
});
tearDown(() {
tryToDelete(tempDir);
});
testUsingContext('makeExecutable', () async {
final File file = globals.fs.file(globals.fs.path.join(tempDir.path, 'foo.script'));
testWithoutContext('makeExecutable', () async {
const Platform platform = LocalPlatform();
final OperatingSystemUtils operatingSystemUtils = OperatingSystemUtils(
fileSystem: fileSystem,
logger: BufferLogger.test(),
platform: platform,
processManager: const LocalProcessManager(),
);
final File file = fileSystem.file(fileSystem.path.join(tempDir.path, 'foo.script'));
file.writeAsStringSync('hello world');
globals.os.makeExecutable(file);
operatingSystemUtils.makeExecutable(file);
// Skip this test on windows.
if (!globals.platform.isWindows) {
if (!platform.isWindows) {
final String mode = file.statSync().modeString();
// rwxr--r--
expect(mode.substring(0, 3), endsWith('x'));
}
}, overrides: <Type, Generator>{
OperatingSystemUtils: () => OperatingSystemUtils(
fileSystem: globals.fs,
logger: globals.logger,
platform: globals.platform,
processManager: globals.processManager,
),
});
});
}
......@@ -8,7 +8,6 @@ import 'package:flutter_tools/src/base/io.dart';
import 'package:flutter_tools/src/base/logger.dart';
import 'package:flutter_tools/src/base/platform.dart';
import 'package:flutter_tools/src/base/terminal.dart';
import 'package:flutter_tools/src/globals.dart' as globals;
import 'package:mockito/mockito.dart';
import '../../src/common.dart';
......@@ -42,7 +41,7 @@ void main() {
setUp(() {
terminal = AnsiTerminal(
stdio: globals.stdio, // Danger, using real stdio.
stdio: Stdio(), // Danger, using real stdio.
platform: FakePlatform()..stdoutSupportsAnsi = true,
);
});
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment