diff --git a/packages/flutter_tools/lib/src/dart/pub.dart b/packages/flutter_tools/lib/src/dart/pub.dart index a01367f025..82cd1d25cb 100644 --- a/packages/flutter_tools/lib/src/dart/pub.dart +++ b/packages/flutter_tools/lib/src/dart/pub.dart @@ -158,6 +158,8 @@ class _DefaultPub implements Pub { return; } + final DateTime originalPubspecYamlModificationTime = pubSpecYaml.lastModifiedSync(); + if (!checkLastModified || _shouldRunPubGet(pubSpecYaml: pubSpecYaml, dotPackages: dotPackages)) { final String command = upgrade ? 'upgrade' : 'get'; final Status status = logger.startProgress( @@ -189,11 +191,34 @@ class _DefaultPub implements Pub { if (!dotPackages.existsSync()) { throwToolExit('$directory: pub did not create .packages file.'); } - - if (dotPackages.lastModifiedSync().isBefore(pubSpecYaml.lastModifiedSync())) { - throwToolExit('$directory: pub did not update .packages file ' - '(pubspec.yaml timestamp: ${pubSpecYaml.lastModifiedSync()}; ' - '.packages timestamp: ${dotPackages.lastModifiedSync()}).'); + if (pubSpecYaml.lastModifiedSync() != originalPubspecYamlModificationTime) { + throwToolExit('$directory: unexpected concurrent modification of pubspec.yaml while running pub.'); + } + // We don't check if dotPackages was actually modified, because as far as we can tell sometimes + // pub will decide it does not need to actually modify it. + // Since we rely on the file having a more recent timestamp, though, we do manually force the + // file to be more recently modified. + final DateTime now = DateTime.now(); + if (now.isBefore(originalPubspecYamlModificationTime)) { + printError( + 'Warning: File "${fs.path.absolute(pubSpecYaml.path)}" was created in the future. ' + 'Optimizations that rely on comparing time stamps will be unreliable. Check your ' + 'system clock for accuracy.\n' + 'The timestamp was: $originalPubspecYamlModificationTime\n' + 'The time now is: $now' + ); + } else { + dotPackages.setLastModifiedSync(now); + final DateTime newDotPackagesTimestamp = dotPackages.lastModifiedSync(); + if (newDotPackagesTimestamp.isBefore(originalPubspecYamlModificationTime)) { + printError( + 'Warning: Failed to set timestamp of "${fs.path.absolute(dotPackages.path)}". ' + 'Tried to set timestamp to $now, but new timestamp is $newDotPackagesTimestamp.' + ); + if (newDotPackagesTimestamp.isAfter(now)) { + printError('Maybe the file was concurrently modified?'); + } + } } } diff --git a/packages/flutter_tools/test/commands.shard/hermetic/analyze_test.dart b/packages/flutter_tools/test/commands.shard/hermetic/analyze_test.dart index 63e442cb74..cde3e6bd8f 100644 --- a/packages/flutter_tools/test/commands.shard/hermetic/analyze_test.dart +++ b/packages/flutter_tools/test/commands.shard/hermetic/analyze_test.dart @@ -48,7 +48,7 @@ void main() { inRepo([]); }, overrides: { FileSystem: () => fs, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); }); } diff --git a/packages/flutter_tools/test/commands.shard/hermetic/attach_test.dart b/packages/flutter_tools/test/commands.shard/hermetic/attach_test.dart index 8d991228e6..b4fb892c52 100644 --- a/packages/flutter_tools/test/commands.shard/hermetic/attach_test.dart +++ b/packages/flutter_tools/test/commands.shard/hermetic/attach_test.dart @@ -100,7 +100,7 @@ void main() { await loggerSubscription.cancel(); }, overrides: { FileSystem: () => testFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), Logger: () => logger, }); @@ -118,7 +118,7 @@ void main() { throwsA(isA())); }, overrides: { FileSystem: () => testFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), Logger: () => logger, }); @@ -198,7 +198,7 @@ void main() { expect(flutterDevice.fileSystemRoots, const [filesystemRoot]); }, overrides: { FileSystem: () => testFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('exits when ipv6 is specified and debug-port is not', () async { @@ -222,7 +222,7 @@ void main() { ); }, overrides: { FileSystem: () => testFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), },); testUsingContext('exits when observatory-port is specified and debug-port is not', () async { @@ -246,7 +246,7 @@ void main() { ); }, overrides: { FileSystem: () => testFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), },); }); @@ -308,7 +308,7 @@ void main() { )).called(1); }, overrides: { FileSystem: () => testFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); group('forwarding to given port', () { @@ -351,7 +351,7 @@ void main() { await loggerSubscription.cancel(); }, overrides: { FileSystem: () => testFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), Logger: () => logger, }); @@ -375,7 +375,7 @@ void main() { await loggerSubscription.cancel(); }, overrides: { FileSystem: () => testFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), Logger: () => logger, }); @@ -406,7 +406,7 @@ void main() { await loggerSubscription.cancel(); }, overrides: { FileSystem: () => testFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), Logger: () => logger, }); @@ -438,7 +438,7 @@ void main() { await loggerSubscription.cancel(); }, overrides: { FileSystem: () => testFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), Logger: () => logger, }); }); @@ -452,7 +452,7 @@ void main() { expect(testLogger.statusText, contains('No supported devices connected')); }, overrides: { FileSystem: () => testFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('exits when multiple devices connected', () async { @@ -477,7 +477,7 @@ void main() { expect(testLogger.statusText, contains('yy2')); }, overrides: { FileSystem: () => testFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); }); } diff --git a/packages/flutter_tools/test/commands.shard/hermetic/build_fuchsia_test.dart b/packages/flutter_tools/test/commands.shard/hermetic/build_fuchsia_test.dart index 63f26ad407..39924abe49 100644 --- a/packages/flutter_tools/test/commands.shard/hermetic/build_fuchsia_test.dart +++ b/packages/flutter_tools/test/commands.shard/hermetic/build_fuchsia_test.dart @@ -57,7 +57,7 @@ void main() { }, overrides: { Platform: () => linuxPlatform, FileSystem: () => MemoryFileSystem(), - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), FuchsiaArtifacts: () => fuchsiaArtifacts, }); @@ -75,7 +75,7 @@ void main() { }, overrides: { Platform: () => linuxPlatform, FileSystem: () => MemoryFileSystem(), - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), FuchsiaArtifacts: () => fuchsiaArtifacts, }); @@ -98,7 +98,7 @@ void main() { }, overrides: { Platform: () => windowsPlatform, FileSystem: () => MemoryFileSystem(), - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), FuchsiaArtifacts: () => fuchsiaArtifacts, }); @@ -121,7 +121,7 @@ void main() { }, overrides: { Platform: () => linuxPlatform, FileSystem: () => MemoryFileSystem(), - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), FuchsiaArtifacts: () => fuchsiaArtifactsNoCompiler, }); }); @@ -147,7 +147,7 @@ void main() { }, overrides: { Platform: () => linuxPlatform, FileSystem: () => MemoryFileSystem(), - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), FuchsiaSdk: () => fuchsiaSdk, }); } diff --git a/packages/flutter_tools/test/commands.shard/hermetic/build_linux_test.dart b/packages/flutter_tools/test/commands.shard/hermetic/build_linux_test.dart index 96b53405eb..4278466b4a 100644 --- a/packages/flutter_tools/test/commands.shard/hermetic/build_linux_test.dart +++ b/packages/flutter_tools/test/commands.shard/hermetic/build_linux_test.dart @@ -83,7 +83,7 @@ void main() { }, overrides: { Platform: () => linuxPlatform, FileSystem: () => MemoryFileSystem(), - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), FeatureFlags: () => TestFeatureFlags(isLinuxEnabled: true), }); @@ -98,7 +98,7 @@ void main() { }, overrides: { Platform: () => notLinuxPlatform, FileSystem: () => MemoryFileSystem(), - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), FeatureFlags: () => TestFeatureFlags(isLinuxEnabled: true), }); @@ -187,7 +187,7 @@ BINARY_NAME=fizz_bar expect(makefileExecutableName(flutterProject.linux), 'fizz_bar'); }, overrides: { FileSystem: () => MemoryFileSystem(), - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), FeatureFlags: () => TestFeatureFlags(isLinuxEnabled: true), }); diff --git a/packages/flutter_tools/test/commands.shard/hermetic/build_macos_test.dart b/packages/flutter_tools/test/commands.shard/hermetic/build_macos_test.dart index 1df3eecfa9..1da4d7ac26 100644 --- a/packages/flutter_tools/test/commands.shard/hermetic/build_macos_test.dart +++ b/packages/flutter_tools/test/commands.shard/hermetic/build_macos_test.dart @@ -120,7 +120,7 @@ void main() { }, overrides: { Platform: () => notMacosPlatform, FileSystem: () => MemoryFileSystem(), - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), FeatureFlags: () => TestFeatureFlags(isMacOSEnabled: true), }); diff --git a/packages/flutter_tools/test/commands.shard/hermetic/build_windows_test.dart b/packages/flutter_tools/test/commands.shard/hermetic/build_windows_test.dart index 3b6fc29a96..7f16aa97e7 100644 --- a/packages/flutter_tools/test/commands.shard/hermetic/build_windows_test.dart +++ b/packages/flutter_tools/test/commands.shard/hermetic/build_windows_test.dart @@ -67,7 +67,7 @@ void main() { }, overrides: { Platform: () => windowsPlatform, FileSystem: () => MemoryFileSystem(style: FileSystemStyle.windows), - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), VisualStudio: () => mockVisualStudio, FeatureFlags: () => TestFeatureFlags(isWindowsEnabled: true), }); @@ -82,7 +82,7 @@ void main() { }, overrides: { Platform: () => windowsPlatform, FileSystem: () => MemoryFileSystem(style: FileSystemStyle.windows), - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), VisualStudio: () => mockVisualStudio, FeatureFlags: () => TestFeatureFlags(isWindowsEnabled: true), }); @@ -102,7 +102,7 @@ void main() { }, overrides: { Platform: () => notWindowsPlatform, FileSystem: () => MemoryFileSystem(style: FileSystemStyle.windows), - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), VisualStudio: () => mockVisualStudio, FeatureFlags: () => TestFeatureFlags(isWindowsEnabled: true), }); diff --git a/packages/flutter_tools/test/commands.shard/hermetic/clean_test.dart b/packages/flutter_tools/test/commands.shard/hermetic/clean_test.dart index 5c736a69cd..188f5dc2c0 100644 --- a/packages/flutter_tools/test/commands.shard/hermetic/clean_test.dart +++ b/packages/flutter_tools/test/commands.shard/hermetic/clean_test.dart @@ -53,7 +53,7 @@ void main() { verify(xcodeProjectInterpreter.cleanWorkspace(any, 'Runner')).called(2); }, overrides: { FileSystem: () => fs, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), Xcode: () => mockXcode, XcodeProjectInterpreter: () => mockXcodeProjectInterpreter, }); diff --git a/packages/flutter_tools/test/commands.shard/hermetic/drive_test.dart b/packages/flutter_tools/test/commands.shard/hermetic/drive_test.dart index 99174a71fa..a28547b9b2 100644 --- a/packages/flutter_tools/test/commands.shard/hermetic/drive_test.dart +++ b/packages/flutter_tools/test/commands.shard/hermetic/drive_test.dart @@ -84,7 +84,7 @@ void main() { } }, overrides: { FileSystem: () => fs, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('returns 1 when app fails to run', () async { @@ -112,7 +112,7 @@ void main() { } }, overrides: { FileSystem: () => fs, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('returns 1 when app file is outside package', () async { @@ -135,7 +135,7 @@ void main() { } }, overrides: { FileSystem: () => fs, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('returns 1 when app file is in the root dir', () async { @@ -159,7 +159,7 @@ void main() { } }, overrides: { FileSystem: () => fs, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('returns 0 when test ends successfully', () async { @@ -192,7 +192,7 @@ void main() { expect(testLogger.errorText, isEmpty); }, overrides: { FileSystem: () => fs, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('returns exitCode set by test runner', () async { @@ -229,7 +229,7 @@ void main() { } }, overrides: { FileSystem: () => fs, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); group('findTargetDevice', () { @@ -244,7 +244,7 @@ void main() { expect(device.name, 'specified-device'); }, overrides: { FileSystem: () => fs, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); }); @@ -255,7 +255,7 @@ void main() { expect(await findTargetDevice(), isNull); }, overrides: { FileSystem: () => fs, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), Platform: platform, }); @@ -268,7 +268,7 @@ void main() { expect(device.name, 'mock-android-device'); }, overrides: { FileSystem: () => fs, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), Platform: platform, }); @@ -300,7 +300,7 @@ void main() { expect(device.name, 'mock-android-device'); }, overrides: { FileSystem: () => fs, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), Platform: platform, }); } @@ -328,7 +328,7 @@ void main() { expect(device.name, 'mock-simulator'); }, overrides: { FileSystem: () => fs, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), Platform: macOsPlatform, }); }); @@ -400,7 +400,7 @@ void main() { )); }, overrides: { FileSystem: () => fs, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('does not use pre-built app if --build arg provided', () async { @@ -428,7 +428,7 @@ void main() { )); }, overrides: { FileSystem: () => fs, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('uses prebuilt app if --no-build arg provided', () async { @@ -456,7 +456,7 @@ void main() { )); }, overrides: { FileSystem: () => fs, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); }); }); diff --git a/packages/flutter_tools/test/commands.shard/hermetic/shell_completion_test.dart b/packages/flutter_tools/test/commands.shard/hermetic/shell_completion_test.dart index b5bcc8e9f5..07069f7313 100644 --- a/packages/flutter_tools/test/commands.shard/hermetic/shell_completion_test.dart +++ b/packages/flutter_tools/test/commands.shard/hermetic/shell_completion_test.dart @@ -52,7 +52,7 @@ void main() { expect(fs.file(outputFile).readAsStringSync(), contains('__flutter_completion')); }, overrides: { FileSystem: () => MemoryFileSystem(), - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), Stdio: () => mockStdio, }); @@ -73,7 +73,7 @@ void main() { expect(fs.file(outputFile).readAsStringSync(), isEmpty); }, overrides: { FileSystem: () => MemoryFileSystem(), - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), Stdio: () => mockStdio, }); @@ -88,7 +88,7 @@ void main() { expect(fs.file(outputFile).readAsStringSync(), contains('__flutter_completion')); }, overrides: { FileSystem: () => MemoryFileSystem(), - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), Stdio: () => mockStdio, }); }); diff --git a/packages/flutter_tools/test/commands.shard/permeable/build_bundle_test.dart b/packages/flutter_tools/test/commands.shard/permeable/build_bundle_test.dart index f732171bcf..8c301683f4 100644 --- a/packages/flutter_tools/test/commands.shard/permeable/build_bundle_test.dart +++ b/packages/flutter_tools/test/commands.shard/permeable/build_bundle_test.dart @@ -111,7 +111,7 @@ void main() { ]), throwsA(isInstanceOf())); }, overrides: { FileSystem: () => MemoryFileSystem(), - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), FeatureFlags: () => TestFeatureFlags(isWindowsEnabled: false), }); @@ -129,7 +129,7 @@ void main() { ]), throwsA(isInstanceOf())); }, overrides: { FileSystem: () => MemoryFileSystem(), - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), FeatureFlags: () => TestFeatureFlags(isLinuxEnabled: false), }); @@ -147,7 +147,7 @@ void main() { ]), throwsA(isInstanceOf())); }, overrides: { FileSystem: () => MemoryFileSystem(), - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), FeatureFlags: () => TestFeatureFlags(isMacOSEnabled: false), }); @@ -165,7 +165,7 @@ void main() { ]); }, overrides: { FileSystem: () => MemoryFileSystem(), - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), FeatureFlags: () => TestFeatureFlags(isWindowsEnabled: true), }); @@ -183,7 +183,7 @@ void main() { ]); }, overrides: { FileSystem: () => MemoryFileSystem(), - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), FeatureFlags: () => TestFeatureFlags(isLinuxEnabled: true), }); @@ -201,7 +201,7 @@ void main() { ]); }, overrides: { FileSystem: () => MemoryFileSystem(), - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), FeatureFlags: () => TestFeatureFlags(isMacOSEnabled: true), }); @@ -230,9 +230,9 @@ void main() { '--track-widget-creation' ]); }, overrides: { - FileSystem: () => MemoryFileSystem(), BuildSystem: () => MockBuildSystem(), - ProcessManager: () => FakeProcessManager([]), + FileSystem: () => MemoryFileSystem(), + ProcessManager: () => FakeProcessManager.any(), }); } diff --git a/packages/flutter_tools/test/general.shard/analytics_test.dart b/packages/flutter_tools/test/general.shard/analytics_test.dart index 8a661129cc..371986cc5a 100644 --- a/packages/flutter_tools/test/general.shard/analytics_test.dart +++ b/packages/flutter_tools/test/general.shard/analytics_test.dart @@ -108,7 +108,7 @@ void main() { 'FLUTTER_ANALYTICS_LOG_FILE': 'test', }), FileSystem: () => MemoryFileSystem(), - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('Usage records multiple features in experiment setting', () async { @@ -130,7 +130,7 @@ void main() { 'FLUTTER_ANALYTICS_LOG_FILE': 'test', }), FileSystem: () => MemoryFileSystem(), - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); }); @@ -223,7 +223,7 @@ void main() { expect(log.contains(formatDateTime(dateTime)), isTrue); }, overrides: { FileSystem: () => memoryFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), SystemClock: () => mockClock, Platform: () => FakePlatform( environment: { @@ -249,7 +249,7 @@ void main() { expect(log.contains(formatDateTime(dateTime)), isTrue); }, overrides: { FileSystem: () => memoryFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), SystemClock: () => mockClock, Platform: () => FakePlatform( environment: { diff --git a/packages/flutter_tools/test/general.shard/android/android_device_test.dart b/packages/flutter_tools/test/general.shard/android/android_device_test.dart index 2a16c3fc1a..7cd19f355a 100644 --- a/packages/flutter_tools/test/general.shard/android/android_device_test.dart +++ b/packages/flutter_tools/test/general.shard/android/android_device_test.dart @@ -398,7 +398,7 @@ flutter: expect(AndroidDevice('test').isSupportedForProject(flutterProject), true); }, overrides: { FileSystem: () => MemoryFileSystem(), - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('isSupportedForProject is true with editable host app', () async { @@ -410,7 +410,7 @@ flutter: expect(AndroidDevice('test').isSupportedForProject(flutterProject), true); }, overrides: { FileSystem: () => MemoryFileSystem(), - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('isSupportedForProject is false with no host app and no module', () async { @@ -421,7 +421,7 @@ flutter: expect(AndroidDevice('test').isSupportedForProject(flutterProject), false); }, overrides: { FileSystem: () => MemoryFileSystem(), - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); group('emulatorId', () { diff --git a/packages/flutter_tools/test/general.shard/android/android_sdk_test.dart b/packages/flutter_tools/test/general.shard/android/android_sdk_test.dart index e93f7f7134..684e57da3f 100644 --- a/packages/flutter_tools/test/general.shard/android/android_sdk_test.dart +++ b/packages/flutter_tools/test/general.shard/android/android_sdk_test.dart @@ -45,7 +45,7 @@ void main() { expect(sdk.latestVersion.sdkLevel, 23); }, overrides: { FileSystem: () => fs, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('parse sdk N', () { @@ -57,7 +57,7 @@ void main() { expect(sdk.latestVersion.sdkLevel, 24); }, overrides: { FileSystem: () => fs, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('returns sdkmanager path', () { @@ -68,7 +68,7 @@ void main() { expect(sdk.sdkManagerPath, fs.path.join(sdk.directory, 'tools', 'bin', 'sdkmanager')); }, overrides: { FileSystem: () => fs, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('returns sdkmanager version', () { @@ -161,7 +161,7 @@ void main() { expect(sdk.ndk.compilerArgs, ['--sysroot', realNdkSysroot]); }, overrides: { FileSystem: () => fs, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), Platform: () => FakePlatform(operatingSystem: os), }); @@ -196,7 +196,7 @@ void main() { expect(sdk.ndk.compilerArgs, ['--sysroot', realNdkSysroot, '-fuse-ld=$realNdkLinker']); }, overrides: { FileSystem: () => fs, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), Platform: () => FakePlatform(operatingSystem: os), }); }); @@ -214,7 +214,7 @@ void main() { expect(explanation, contains('Can not locate ndk-bundle')); }, overrides: { FileSystem: () => fs, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), Platform: () => FakePlatform(operatingSystem: os), }); } diff --git a/packages/flutter_tools/test/general.shard/android/android_studio_test.dart b/packages/flutter_tools/test/general.shard/android/android_studio_test.dart index 5fe9a223e6..16a4d8422c 100644 --- a/packages/flutter_tools/test/general.shard/android/android_studio_test.dart +++ b/packages/flutter_tools/test/general.shard/android/android_studio_test.dart @@ -66,7 +66,7 @@ void main() { equals('/home/me/.AndroidStudioWithCheese5.0/config/plugins')); }, overrides: { FileSystem: () => fs, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), // Custom home paths are not supported on macOS nor Windows yet, // so we force the platform to fake Linux here. Platform: () => linuxPlatform(), @@ -86,7 +86,7 @@ void main() { equals(fs.path.join(homeMac, 'Library', 'Application Support', 'AndroidStudio3.3'))); }, overrides: { FileSystem: () => fs, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), // Custom home paths are not supported on macOS nor Windows yet, // so we force the platform to fake Linux here. Platform: () => macPlatform(), @@ -116,7 +116,7 @@ void main() { equals(fs.path.join(homeMac, 'Library', 'Application Support', 'AndroidStudio3.3'))); }, overrides: { FileSystem: () => fs, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), // Custom home paths are not supported on macOS nor Windows yet, // so we force the platform to fake Linux here. Platform: () => macPlatform(), diff --git a/packages/flutter_tools/test/general.shard/android/gradle_test.dart b/packages/flutter_tools/test/general.shard/android/gradle_test.dart index 998fceac76..21ec43e55c 100644 --- a/packages/flutter_tools/test/general.shard/android/gradle_test.dart +++ b/packages/flutter_tools/test/general.shard/android/gradle_test.dart @@ -58,7 +58,7 @@ void main() { expect(findApkFiles(gradleProject, buildInfo), []); }, overrides: { FileSystem: () => MemoryFileSystem(), - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); test('androidXFailureRegex should match lines with likely AndroidX errors', () { @@ -131,7 +131,7 @@ void main() { expect(bundle.path, '/foo_barRelease/app.aab'); }, overrides: { FileSystem: () => MemoryFileSystem(), - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('Finds app bundle when flavor doesn\'t contain underscores in release mode', () { @@ -141,7 +141,7 @@ void main() { expect(bundle.path, '/fooRelease/app.aab'); }, overrides: { FileSystem: () => MemoryFileSystem(), - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('Finds app bundle when no flavor is used in release mode', () { @@ -151,7 +151,7 @@ void main() { expect(bundle.path, '/release/app.aab'); }, overrides: { FileSystem: () => MemoryFileSystem(), - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('Finds app bundle when flavor contains underscores in debug mode', () { @@ -161,7 +161,7 @@ void main() { expect(bundle.path, '/foo_barDebug/app.aab'); }, overrides: { FileSystem: () => MemoryFileSystem(), - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('Finds app bundle when flavor doesn\'t contain underscores in debug mode', () { @@ -171,7 +171,7 @@ void main() { expect(bundle.path, '/fooDebug/app.aab'); }, overrides: { FileSystem: () => MemoryFileSystem(), - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('Finds app bundle when no flavor is used in debug mode', () { @@ -181,7 +181,7 @@ void main() { expect(bundle.path, '/debug/app.aab'); }, overrides: { FileSystem: () => MemoryFileSystem(), - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('Finds app bundle when flavor contains underscores in profile mode', () { @@ -191,7 +191,7 @@ void main() { expect(bundle.path, '/foo_barProfile/app.aab'); }, overrides: { FileSystem: () => MemoryFileSystem(), - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('Finds app bundle when flavor doesn\'t contain underscores in profile mode', () { @@ -201,7 +201,7 @@ void main() { expect(bundle.path, '/fooProfile/app.aab'); }, overrides: { FileSystem: () => MemoryFileSystem(), - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('Finds app bundle when no flavor is used in profile mode', () { @@ -211,7 +211,7 @@ void main() { expect(bundle.path, '/profile/app.aab'); }, overrides: { FileSystem: () => MemoryFileSystem(), - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('Finds app bundle in release mode - Gradle 3.5', () { @@ -221,7 +221,7 @@ void main() { expect(bundle.path, '/release/app-release.aab'); }, overrides: { FileSystem: () => MemoryFileSystem(), - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('Finds app bundle in profile mode - Gradle 3.5', () { @@ -231,7 +231,7 @@ void main() { expect(bundle.path, '/profile/app-profile.aab'); }, overrides: { FileSystem: () => MemoryFileSystem(), - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('Finds app bundle in debug mode - Gradle 3.5', () { @@ -241,7 +241,7 @@ void main() { expect(bundle.path, '/debug/app-debug.aab'); }, overrides: { FileSystem: () => MemoryFileSystem(), - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('Finds app bundle when flavor contains underscores in release mode - Gradle 3.5', () { @@ -251,7 +251,7 @@ void main() { expect(bundle.path, '/foo_barRelease/app-foo_bar-release.aab'); }, overrides: { FileSystem: () => MemoryFileSystem(), - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('Finds app bundle when flavor contains underscores in profile mode - Gradle 3.5', () { @@ -261,7 +261,7 @@ void main() { expect(bundle.path, '/foo_barProfile/app-foo_bar-profile.aab'); }, overrides: { FileSystem: () => MemoryFileSystem(), - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('Finds app bundle when flavor contains underscores in debug mode - Gradle 3.5', () { @@ -271,7 +271,7 @@ void main() { expect(bundle.path, '/foo_barDebug/app-foo_bar-debug.aab'); }, overrides: { FileSystem: () => MemoryFileSystem(), - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); }); @@ -508,7 +508,7 @@ include ':app' }, overrides: { FileSystem: () => MemoryFileSystem(), - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), Logger: () => mockLogger, }); @@ -542,7 +542,7 @@ include ':app' }, overrides: { FileSystem: () => MemoryFileSystem(), - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), Logger: () => mockLogger, }); }); @@ -1268,7 +1268,7 @@ Exception in thread "main" java.lang.NullPointerException }, overrides: { Cache: () => Cache(rootOverride: tempDir), FileSystem: () => memoryFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('Inject the wrapper when some files are missing', () { @@ -1309,7 +1309,7 @@ Exception in thread "main" java.lang.NullPointerException }, overrides: { Cache: () => Cache(rootOverride: tempDir), FileSystem: () => memoryFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('Gives executable permission to gradle', () { @@ -1327,7 +1327,7 @@ Exception in thread "main" java.lang.NullPointerException }, overrides: { Cache: () => Cache(rootOverride: tempDir), FileSystem: () => memoryFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), OperatingSystemUtils: () => OperatingSystemUtils(), }); }); @@ -1349,7 +1349,7 @@ Exception in thread "main" java.lang.NullPointerException }, overrides: { FileSystem: () => memoryFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('throws ToolExit if it cannot write gradle.properties', () { @@ -1387,7 +1387,7 @@ Exception in thread "main" java.lang.NullPointerException equals('android.enableR8=true')); }, overrides: { FileSystem: () => memoryFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('sets android.enableR8=true', () { @@ -1408,7 +1408,7 @@ Exception in thread "main" java.lang.NullPointerException ); }, overrides: { FileSystem: () => memoryFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('appends android.enableR8=true to the new line', () { @@ -1429,7 +1429,7 @@ Exception in thread "main" java.lang.NullPointerException ); }, overrides: { FileSystem: () => memoryFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any() }); }); @@ -1451,7 +1451,7 @@ Exception in thread "main" java.lang.NullPointerException }, overrides: { FileSystem: () => fs, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('returns false when the project is not using AndroidX', () async { @@ -1465,7 +1465,7 @@ Exception in thread "main" java.lang.NullPointerException }, overrides: { FileSystem: () => fs, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('returns false when gradle.properties does not exist', () async { @@ -1475,7 +1475,7 @@ Exception in thread "main" java.lang.NullPointerException }, overrides: { FileSystem: () => fs, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); }); diff --git a/packages/flutter_tools/test/general.shard/application_package_test.dart b/packages/flutter_tools/test/general.shard/application_package_test.dart index 06c3b000fa..9afad1a2f6 100644 --- a/packages/flutter_tools/test/general.shard/application_package_test.dart +++ b/packages/flutter_tools/test/general.shard/application_package_test.dart @@ -211,7 +211,7 @@ void main() { group('PrebuiltIOSApp', () { final Map overrides = { FileSystem: () => MemoryFileSystem(), - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), PlistParser: () => MockPlistUtils(), Platform: _kNoColorTerminalPlatform, OperatingSystemUtils: () => MockOperatingSystemUtils(), @@ -363,7 +363,7 @@ void main() { group('FuchsiaApp', () { final Map overrides = { FileSystem: () => MemoryFileSystem(), - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), Platform: _kNoColorTerminalPlatform, OperatingSystemUtils: () => MockOperatingSystemUtils(), }; diff --git a/packages/flutter_tools/test/general.shard/artifacts_test.dart b/packages/flutter_tools/test/general.shard/artifacts_test.dart index a5539d5b89..37b6fee39c 100644 --- a/packages/flutter_tools/test/general.shard/artifacts_test.dart +++ b/packages/flutter_tools/test/general.shard/artifacts_test.dart @@ -45,7 +45,7 @@ void main() { }, overrides: { Cache: () => Cache(rootOverride: tempDir), FileSystem: () => memoryFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), Platform: () => FakePlatform(operatingSystem: 'linux'), }); @@ -65,7 +65,7 @@ void main() { }, overrides: { Cache: () => Cache(rootOverride: tempDir), FileSystem: () => memoryFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), Platform: () => FakePlatform(operatingSystem: 'linux'), }); }); @@ -95,7 +95,7 @@ void main() { ); }, overrides: { FileSystem: () => memoryFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), Platform: () => FakePlatform(operatingSystem: 'linux'), }); @@ -114,7 +114,7 @@ void main() { ); }, overrides: { FileSystem: () => memoryFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), Platform: () => FakePlatform(operatingSystem: 'linux'), }); @@ -122,7 +122,7 @@ void main() { expect(artifacts.getArtifactPath(Artifact.engineDartBinary), contains('.exe')); }, overrides: { FileSystem: () => memoryFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), Platform: () => FakePlatform(operatingSystem: 'windows'), }); @@ -130,7 +130,7 @@ void main() { expect(artifacts.getArtifactPath(Artifact.engineDartBinary), isNot(contains('.exe'))); }, overrides: { FileSystem: () => memoryFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), Platform: () => FakePlatform(operatingSystem: 'linux'), }); }); diff --git a/packages/flutter_tools/test/general.shard/asset_bundle_package_fonts_test.dart b/packages/flutter_tools/test/general.shard/asset_bundle_package_fonts_test.dart index db44a3b7df..77f0f83eb7 100644 --- a/packages/flutter_tools/test/general.shard/asset_bundle_package_fonts_test.dart +++ b/packages/flutter_tools/test/general.shard/asset_bundle_package_fonts_test.dart @@ -126,7 +126,7 @@ $fontsSection expect(bundle.entries.containsKey('FontManifest.json'), isTrue); }, overrides: { FileSystem: () => testFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('App font uses font file from package', () async { @@ -155,7 +155,7 @@ $fontsSection ); }, overrides: { FileSystem: () => testFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('App font uses local font file and package font file', () async { @@ -188,7 +188,7 @@ $fontsSection ); }, overrides: { FileSystem: () => testFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('App uses package font with own font file', () async { @@ -222,7 +222,7 @@ $fontsSection ); }, overrides: { FileSystem: () => testFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('App uses package font with font file from another package', () async { @@ -257,7 +257,7 @@ $fontsSection ); }, overrides: { FileSystem: () => testFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('App uses package font with properties and own font file', () async { @@ -293,7 +293,7 @@ $fontsSection ); }, overrides: { FileSystem: () => testFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('App uses local font and package font with own font file.', () async { @@ -333,7 +333,7 @@ $fontsSection ); }, overrides: { FileSystem: () => testFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); }); } diff --git a/packages/flutter_tools/test/general.shard/asset_bundle_package_test.dart b/packages/flutter_tools/test/general.shard/asset_bundle_package_test.dart index 6ab2369f4d..52a2a669c2 100644 --- a/packages/flutter_tools/test/general.shard/asset_bundle_package_test.dart +++ b/packages/flutter_tools/test/general.shard/asset_bundle_package_test.dart @@ -135,7 +135,7 @@ $assetsSection ); }, overrides: { FileSystem: () => testFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('No assets are bundled when the package has an asset that is not listed', () async { @@ -163,7 +163,7 @@ $assetsSection ); }, overrides: { FileSystem: () => testFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('One asset is bundled when the package has and lists one asset its pubspec', () async { @@ -191,7 +191,7 @@ $assetsSection ); }, overrides: { FileSystem: () => testFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext("One asset is bundled when the package has one asset, listed in the app's pubspec", () async { @@ -219,7 +219,7 @@ $assetsSection ); }, overrides: { FileSystem: () => testFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('One asset and its variant are bundled when the package has an asset and a variant, and lists the asset in its pubspec', () async { @@ -247,7 +247,7 @@ $assetsSection ); }, overrides: { FileSystem: () => testFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('One asset and its variant are bundled when the package has an asset and a variant, and the app lists the asset in its pubspec', () async { @@ -278,7 +278,7 @@ $assetsSection ); }, overrides: { FileSystem: () => testFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('Two assets are bundled when the package has and lists two assets in its pubspec', () async { @@ -307,7 +307,7 @@ $assetsSection ); }, overrides: { FileSystem: () => testFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext("Two assets are bundled when the package has two assets, listed in the app's pubspec", () async { @@ -343,7 +343,7 @@ $assetsSection ); }, overrides: { FileSystem: () => testFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('Two assets are bundled when two packages each have and list an asset their pubspec', () async { @@ -383,7 +383,7 @@ $assetsSection ); }, overrides: { FileSystem: () => testFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext("Two assets are bundled when two packages each have an asset, listed in the app's pubspec", () async { @@ -426,7 +426,7 @@ $assetsSection ); }, overrides: { FileSystem: () => testFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('One asset is bundled when the app depends on a package, listing in its pubspec an asset from another package', () async { @@ -461,7 +461,7 @@ $assetsSection ); }, overrides: { FileSystem: () => testFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); }); @@ -491,7 +491,7 @@ $assetsSection ); }, overrides: { FileSystem: () => testFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); group('AssetBundle assets from scanned paths', () { @@ -523,7 +523,7 @@ $assetsSection ); }, overrides: { FileSystem: () => testFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('Two assets are bundled when listing one and scanning second directory', () async { @@ -554,7 +554,7 @@ $assetsSection ); }, overrides: { FileSystem: () => testFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('One asset is bundled with variant, scanning wrong directory', () async { @@ -580,7 +580,7 @@ $assetsSection assert(bundle.entries['AssetManifest.json'] == null,'Invalid pubspec.yaml should not generate AssetManifest.json' ); }, overrides: { FileSystem: () => testFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); }); @@ -612,7 +612,7 @@ $assetsSection ); }, overrides: { FileSystem: () => testFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('No asset is bundled with variant, no assets or directories are listed', () async { @@ -641,7 +641,7 @@ $assetsSection ); }, overrides: { FileSystem: () => testFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('Expect error generating manifest, wrong non-existing directory is listed', () async { @@ -675,7 +675,7 @@ $assetsSection } }, overrides: { FileSystem: () => testFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); }); diff --git a/packages/flutter_tools/test/general.shard/asset_bundle_test.dart b/packages/flutter_tools/test/general.shard/asset_bundle_test.dart index e39bf74fcc..c46baba62a 100644 --- a/packages/flutter_tools/test/general.shard/asset_bundle_test.dart +++ b/packages/flutter_tools/test/general.shard/asset_bundle_test.dart @@ -38,7 +38,7 @@ void main() { expect(ab.entries.length, greaterThan(0)); }, overrides: { FileSystem: () => testFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('empty pubspec', () async { @@ -56,7 +56,7 @@ void main() { ); }, overrides: { FileSystem: () => testFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('wildcard directories are updated when filesystem changes', () async { @@ -96,7 +96,7 @@ flutter: expect(bundle.entries.length, 5); }, overrides: { FileSystem: () => testFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('handle removal of wildcard directories', () async { @@ -146,7 +146,7 @@ name: example''') expect(bundle.entries.length, 4); }, overrides: { FileSystem: () => testFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); // https://github.com/flutter/flutter/issues/42723 @@ -175,7 +175,7 @@ flutter: expect(bundle.needsBuild(manifestPath: 'pubspec.yaml'), false); }, overrides: { FileSystem: () => testFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); }); diff --git a/packages/flutter_tools/test/general.shard/asset_bundle_variant_test.dart b/packages/flutter_tools/test/general.shard/asset_bundle_variant_test.dart index 2b6a383256..49e5a44956 100644 --- a/packages/flutter_tools/test/general.shard/asset_bundle_variant_test.dart +++ b/packages/flutter_tools/test/general.shard/asset_bundle_variant_test.dart @@ -92,7 +92,7 @@ flutter: } }, overrides: { FileSystem: () => testFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); }); } diff --git a/packages/flutter_tools/test/general.shard/base/build_test.dart b/packages/flutter_tools/test/general.shard/base/build_test.dart index 65d5e066bf..76f1daa026 100644 --- a/packages/flutter_tools/test/general.shard/base/build_test.dart +++ b/packages/flutter_tools/test/general.shard/base/build_test.dart @@ -254,7 +254,7 @@ void main() { AndroidSdk: () => mockAndroidSdk, Artifacts: () => mockArtifacts, FileSystem: () => fs, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), GenSnapshot: () => genSnapshot, Xcode: () => mockXcode, Logger: () => bufferLogger, diff --git a/packages/flutter_tools/test/general.shard/base/file_system_test.dart b/packages/flutter_tools/test/general.shard/base/file_system_test.dart index b647b60f18..8722bbe747 100644 --- a/packages/flutter_tools/test/general.shard/base/file_system_test.dart +++ b/packages/flutter_tools/test/general.shard/base/file_system_test.dart @@ -22,7 +22,7 @@ void main() { expect(fs.isDirectorySync('foo/bar'), true); }, overrides: { FileSystem: () => fs, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('throws tool exit on failure to create', () async { @@ -30,7 +30,7 @@ void main() { expect(() => ensureDirectoryExists('foo/bar.flx'), throwsToolExit()); }, overrides: { FileSystem: () => fs, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); }); @@ -86,7 +86,7 @@ void main() { expect(destination.childDirectory('nested').childFile('a.txt').existsSync(), isFalse); }, overrides: { FileSystem: () => MemoryFileSystem(), - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); }); diff --git a/packages/flutter_tools/test/general.shard/base/fingerprint_test.dart b/packages/flutter_tools/test/general.shard/base/fingerprint_test.dart index 0a40128c1b..acf26437c7 100644 --- a/packages/flutter_tools/test/general.shard/base/fingerprint_test.dart +++ b/packages/flutter_tools/test/general.shard/base/fingerprint_test.dart @@ -30,7 +30,7 @@ void main() { final Map contextOverrides = { FileSystem: () => fs, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }; testUsingContext('throws when depfile is malformed', () { @@ -293,7 +293,7 @@ void main() { ); }, overrides: { FileSystem: () => fs, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('populates checksums for valid files', () { @@ -307,7 +307,7 @@ void main() { expect(jsonObject['files']['b.dart'], '6f144e08b58cd0925328610fad7ac07c'); }, overrides: { FileSystem: () => fs, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('includes framework version', () { @@ -489,7 +489,7 @@ void main() { final Map contextOverrides = { FileSystem: () => fs, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }; testUsingContext('returns one file if only one is listed', () { diff --git a/packages/flutter_tools/test/general.shard/build_system/targets/windows_test.dart b/packages/flutter_tools/test/general.shard/build_system/targets/windows_test.dart index ba3763fdbd..40768e10af 100644 --- a/packages/flutter_tools/test/general.shard/build_system/targets/windows_test.dart +++ b/packages/flutter_tools/test/general.shard/build_system/targets/windows_test.dart @@ -52,7 +52,7 @@ void main() { fs.directory('windows').createSync(); }, overrides: { FileSystem: () => MemoryFileSystem(style: FileSystemStyle.windows), - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), Platform: () => platform, }); }); diff --git a/packages/flutter_tools/test/general.shard/cache_test.dart b/packages/flutter_tools/test/general.shard/cache_test.dart index d3f9d58a27..ae3dcb658b 100644 --- a/packages/flutter_tools/test/general.shard/cache_test.dart +++ b/packages/flutter_tools/test/general.shard/cache_test.dart @@ -64,7 +64,7 @@ void main() { Cache.releaseLockEarly(); }, overrides: { FileSystem: () => mockFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('throws tool exit when lockfile open fails', () async { @@ -73,7 +73,7 @@ void main() { expect(() async => await Cache.lock(), throwsA(isA())); }, overrides: { FileSystem: () => mockFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('should not throw when FLUTTER_ALREADY_LOCKED is set', () async { @@ -102,7 +102,7 @@ void main() { }, overrides: { Cache: ()=> mockCache, FileSystem: () => memoryFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('Gradle wrapper should be up to date, only if all cached artifact are available', () { @@ -118,7 +118,7 @@ void main() { }, overrides: { Cache: ()=> mockCache, FileSystem: () => memoryFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); test('should not be up to date, if some cached artifact is not', () { @@ -210,7 +210,7 @@ void main() { expect(flattenNameSubdirs(Uri.parse('https://www.flutter.dev')), 'www.flutter.dev'); }, overrides: { FileSystem: () => MemoryFileSystem(), - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); test('Unstable artifacts', () { @@ -261,7 +261,7 @@ void main() { }, overrides: { Cache: ()=> mockCache, FileSystem: () => memoryFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), HttpClientFactory: () => () => fakeHttpClient, OperatingSystemUtils: () => mockOperatingSystemUtils, Platform: () => fakePlatform, diff --git a/packages/flutter_tools/test/general.shard/commands/build_aot_test.dart b/packages/flutter_tools/test/general.shard/commands/build_aot_test.dart index 3804f4f272..cba2510641 100644 --- a/packages/flutter_tools/test/general.shard/commands/build_aot_test.dart +++ b/packages/flutter_tools/test/general.shard/commands/build_aot_test.dart @@ -41,7 +41,7 @@ void main() { }, overrides: { Artifacts: () => LocalEngineArtifacts('/engine', 'ios_profile', 'host_profile'), FileSystem: () => memoryFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('build aot prints error if Clang version invalid', () async { diff --git a/packages/flutter_tools/test/general.shard/dart/pub_get_test.dart b/packages/flutter_tools/test/general.shard/dart/pub_get_test.dart index 9130bbe89f..7ff882e486 100644 --- a/packages/flutter_tools/test/general.shard/dart/pub_get_test.dart +++ b/packages/flutter_tools/test/general.shard/dart/pub_get_test.dart @@ -7,11 +7,13 @@ import 'dart:collection'; import 'package:file/file.dart'; import 'package:file/memory.dart'; -import 'package:flutter_tools/src/cache.dart'; import 'package:flutter_tools/src/base/common.dart'; import 'package:flutter_tools/src/base/context.dart'; +import 'package:flutter_tools/src/base/file_system.dart'; import 'package:flutter_tools/src/base/io.dart'; import 'package:flutter_tools/src/base/platform.dart'; +import 'package:flutter_tools/src/base/utils.dart'; +import 'package:flutter_tools/src/cache.dart'; import 'package:flutter_tools/src/dart/pub.dart'; import 'package:flutter_tools/src/reporting/reporting.dart'; @@ -22,6 +24,7 @@ import 'package:quiver/testing/async.dart'; import '../../src/common.dart'; import '../../src/context.dart'; import '../../src/mocks.dart' as mocks; +import '../../src/testbed.dart'; void main() { setUpAll(() { @@ -239,6 +242,117 @@ void main() { Usage: () => MockUsage(), Pub: () => const Pub(), }); + + test('Pub error handling', () { + final MemoryFileSystem fileSystem = MemoryFileSystem(); + final FakeProcessManager processManager = FakeProcessManager.list([ + FakeCommand( + command: const [ + '/bin/cache/dart-sdk/bin/pub', + '--verbosity=warning', + 'get', + '--no-precompile', + ], + onRun: () { + fs.file('.packages') + ..setLastModifiedSync(DateTime(2002)); + } + ), + const FakeCommand( + command: [ + '/bin/cache/dart-sdk/bin/pub', + '--verbosity=warning', + 'get', + '--no-precompile', + ], + ), + FakeCommand( + command: const [ + '/bin/cache/dart-sdk/bin/pub', + '--verbosity=warning', + 'get', + '--no-precompile', + ], + onRun: () { + fs.file('pubspec.yaml') + ..setLastModifiedSync(DateTime(2002)); + } + ), + ]); + Testbed().run(() async { + // the good scenario: .packages is old, pub updates the file. + fs.file('.packages') + ..createSync() + ..setLastModifiedSync(DateTime(2000)); + fs.file('pubspec.yaml') + ..createSync() + ..setLastModifiedSync(DateTime(2001)); + await pub.get(context: PubContext.flutterTests, checkLastModified: true); // pub sets date of .packages to 2002 + expect(testLogger.statusText, 'Running "flutter pub get" in /...\n'); + expect(testLogger.errorText, isEmpty); + expect(fs.file('pubspec.yaml').lastModifiedSync(), DateTime(2001)); // because nothing should touch it + expect(fs.file('.packages').lastModifiedSync(), isNot(DateTime(2000))); // because pub changes it to 2002 + expect(fs.file('.packages').lastModifiedSync(), isNot(DateTime(2002))); // because we set the timestamp again after pub + testLogger.clear(); + // bad scenario 1: pub doesn't update file; doesn't matter, because we do instead + fs.file('.packages') + ..setLastModifiedSync(DateTime(2000)); + fs.file('pubspec.yaml') + ..setLastModifiedSync(DateTime(2001)); + await pub.get(context: PubContext.flutterTests, checkLastModified: true); // pub does nothing + expect(testLogger.statusText, 'Running "flutter pub get" in /...\n'); + expect(testLogger.errorText, isEmpty); + expect(fs.file('pubspec.yaml').lastModifiedSync(), DateTime(2001)); // because nothing should touch it + expect(fs.file('.packages').lastModifiedSync(), isNot(DateTime(2000))); // because we set the timestamp + expect(fs.file('.packages').lastModifiedSync(), isNot(DateTime(2002))); // just in case FakeProcessManager is buggy + testLogger.clear(); + // bad scenario 2: pub changes pubspec.yaml instead + fs.file('.packages') + ..setLastModifiedSync(DateTime(2000)); + fs.file('pubspec.yaml') + ..setLastModifiedSync(DateTime(2001)); + try { + await pub.get(context: PubContext.flutterTests, checkLastModified: true); + expect(true, isFalse, reason: 'pub.get did not throw'); + } catch (error) { + expect(error.runtimeType, Exception); + expect(error.message, '/: unexpected concurrent modification of pubspec.yaml while running pub.'); + } + expect(testLogger.statusText, 'Running "flutter pub get" in /...\n'); + expect(testLogger.errorText, isEmpty); + expect(fs.file('pubspec.yaml').lastModifiedSync(), DateTime(2002)); // because fake pub above touched it + expect(fs.file('.packages').lastModifiedSync(), DateTime(2000)); // because nothing touched it + // bad scenario 3: pubspec.yaml was created in the future + fs.file('.packages') + ..setLastModifiedSync(DateTime(2000)); + fs.file('pubspec.yaml') + ..setLastModifiedSync(DateTime(9999)); + assert(DateTime(9999).isAfter(DateTime.now())); + await pub.get(context: PubContext.flutterTests, checkLastModified: true); // pub does nothing + expect(testLogger.statusText, 'Running "flutter pub get" in /...\n'); + expect(testLogger.errorText, startsWith( + 'Warning: File "/pubspec.yaml" was created in the future. Optimizations that rely on ' + 'comparing time stamps will be unreliable. Check your system clock for accuracy.\n' + 'The timestamp was: 2000-01-01 00:00:00.000\n' + )); + testLogger.clear(); + }, overrides: { + FileSystem: () => fileSystem, + ProcessManager: () => processManager, + Pub: () => const Pub(), + Platform: () => FakePlatform( + operatingSystem: 'linux', // so that the command executed is consistent + environment: {}, + ), + BotDetector: () => const BotDetectorAlwaysNo(), // so that the test never adds --trace to the pub command + }); + }); +} + +class BotDetectorAlwaysNo implements BotDetector { + const BotDetectorAlwaysNo(); + @override + bool get isRunningOnBot => false; } typedef StartCallback = void Function(List command); diff --git a/packages/flutter_tools/test/general.shard/devfs_test.dart b/packages/flutter_tools/test/general.shard/devfs_test.dart index 9c63f521e0..bd5a5a69a0 100644 --- a/packages/flutter_tools/test/general.shard/devfs_test.dart +++ b/packages/flutter_tools/test/general.shard/devfs_test.dart @@ -89,7 +89,7 @@ void main() { expect(content.isModified, isFalse); }, overrides: { FileSystem: () => fs, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }, skip: Platform.isWindows); // TODO(jonahwilliams): fix or disable this functionality. }); @@ -159,7 +159,7 @@ void main() { verify(httpRequest.close()).called(kFailedAttempts + 1); }, overrides: { FileSystem: () => fs, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); }); @@ -208,7 +208,7 @@ void main() { expect(report.success, true); }, overrides: { FileSystem: () => fs, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('delete dev file system', () async { @@ -218,7 +218,7 @@ void main() { expect(devFS.assetPathsToEvict, isEmpty); }, overrides: { FileSystem: () => fs, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('cleanup preexisting file system', () async { @@ -246,7 +246,7 @@ void main() { expect(devFS.assetPathsToEvict, isEmpty); }, overrides: { FileSystem: () => fs, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('reports unsuccessful compile when errors are returned', () async { @@ -276,7 +276,7 @@ void main() { expect(devFS.lastCompiled, previousCompile); }, overrides: { FileSystem: () => fs, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('correctly updates last compiled time when compilation does not fail', () async { @@ -310,7 +310,7 @@ void main() { expect(devFS.lastCompiled, isNot(previousCompile)); }, overrides: { FileSystem: () => fs, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); }); } diff --git a/packages/flutter_tools/test/general.shard/flutter_manifest_test.dart b/packages/flutter_tools/test/general.shard/flutter_manifest_test.dart index 24479295df..353ffad29c 100644 --- a/packages/flutter_tools/test/general.shard/flutter_manifest_test.dart +++ b/packages/flutter_tools/test/general.shard/flutter_manifest_test.dart @@ -652,7 +652,7 @@ flutter: }, overrides: { FileSystem: () => filesystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }, ); } diff --git a/packages/flutter_tools/test/general.shard/fuchsia/fuchsia_device_test.dart b/packages/flutter_tools/test/general.shard/fuchsia/fuchsia_device_test.dart index a93073ab92..c7e77e1bdc 100644 --- a/packages/flutter_tools/test/general.shard/fuchsia/fuchsia_device_test.dart +++ b/packages/flutter_tools/test/general.shard/fuchsia/fuchsia_device_test.dart @@ -75,7 +75,7 @@ void main() { expect(device.isSupportedForProject(FlutterProject.current()), true); }, overrides: { FileSystem: () => memoryFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('supported for project', () async { @@ -85,7 +85,7 @@ void main() { expect(device.isSupportedForProject(FlutterProject.current()), true); }, overrides: { FileSystem: () => memoryFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('not supported for project', () async { @@ -94,7 +94,7 @@ void main() { expect(device.isSupportedForProject(FlutterProject.current()), false); }, overrides: { FileSystem: () => memoryFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); }); @@ -448,7 +448,7 @@ void main() { expect(launchResult.hasObservatory, isFalse); }, overrides: { FileSystem: () => memoryFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), FuchsiaDeviceTools: () => fuchsiaDeviceTools, FuchsiaSdk: () => fuchsiaSdk, OperatingSystemUtils: () => osUtils, @@ -473,7 +473,7 @@ void main() { expect(await device.stopApp(app), isTrue); }, overrides: { FileSystem: () => memoryFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), FuchsiaDeviceTools: () => fuchsiaDeviceTools, FuchsiaSdk: () => fuchsiaSdk, OperatingSystemUtils: () => osUtils, @@ -486,7 +486,7 @@ void main() { expect(launchResult.hasObservatory, isTrue); }, overrides: { FileSystem: () => memoryFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), FuchsiaDeviceTools: () => fuchsiaDeviceTools, FuchsiaSdk: () => fuchsiaSdk, OperatingSystemUtils: () => osUtils, @@ -499,7 +499,7 @@ void main() { expect(launchResult.hasObservatory, isFalse); }, overrides: { FileSystem: () => memoryFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), FuchsiaDeviceTools: () => fuchsiaDeviceTools, FuchsiaSdk: () => fuchsiaSdk, OperatingSystemUtils: () => osUtils, @@ -512,7 +512,7 @@ void main() { expect(launchResult.hasObservatory, isTrue); }, overrides: { FileSystem: () => memoryFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), FuchsiaDeviceTools: () => fuchsiaDeviceTools, FuchsiaSdk: () => fuchsiaSdk, OperatingSystemUtils: () => osUtils, @@ -525,7 +525,7 @@ void main() { expect(launchResult.hasObservatory, isFalse); }, overrides: { FileSystem: () => memoryFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), FuchsiaDeviceTools: () => fuchsiaDeviceTools, FuchsiaSdk: () => MockFuchsiaSdk(devFinder: FailingDevFinder()), OperatingSystemUtils: () => osUtils, @@ -538,7 +538,7 @@ void main() { expect(launchResult.hasObservatory, isFalse); }, overrides: { FileSystem: () => memoryFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), FuchsiaDeviceTools: () => fuchsiaDeviceTools, FuchsiaSdk: () => MockFuchsiaSdk(pm: FailingPM()), OperatingSystemUtils: () => osUtils, @@ -551,7 +551,7 @@ void main() { expect(launchResult.hasObservatory, isFalse); }, overrides: { FileSystem: () => memoryFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), FuchsiaDeviceTools: () => FakeFuchsiaDeviceTools(amber: FailingAmberCtl()), FuchsiaSdk: () => fuchsiaSdk, OperatingSystemUtils: () => osUtils, @@ -564,7 +564,7 @@ void main() { expect(launchResult.hasObservatory, isFalse); }, overrides: { FileSystem: () => memoryFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), FuchsiaDeviceTools: () => FakeFuchsiaDeviceTools(tiles: FailingTilesCtl()), FuchsiaSdk: () => fuchsiaSdk, OperatingSystemUtils: () => osUtils, diff --git a/packages/flutter_tools/test/general.shard/intellij/intellij_test.dart b/packages/flutter_tools/test/general.shard/intellij/intellij_test.dart index 2130ed2336..021f90a107 100644 --- a/packages/flutter_tools/test/general.shard/intellij/intellij_test.dart +++ b/packages/flutter_tools/test/general.shard/intellij/intellij_test.dart @@ -69,7 +69,7 @@ void main() { expect(message.message, contains('recommended minimum version')); }, overrides: { FileSystem: () => fs, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('not found', () async { @@ -90,7 +90,7 @@ void main() { expect(message.message, contains('Flutter plugin not installed')); }, overrides: { FileSystem: () => fs, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); }); }); diff --git a/packages/flutter_tools/test/general.shard/ios/devices_test.dart b/packages/flutter_tools/test/general.shard/ios/devices_test.dart index 6b14009e6f..ed515ad3ac 100644 --- a/packages/flutter_tools/test/general.shard/ios/devices_test.dart +++ b/packages/flutter_tools/test/general.shard/ios/devices_test.dart @@ -807,7 +807,7 @@ flutter: expect(IOSDevice('test').isSupportedForProject(flutterProject), true); }, overrides: { FileSystem: () => MemoryFileSystem(), - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), Platform: () => macPlatform, }); testUsingContext('IOSDevice.isSupportedForProject is true with editable host app', () async { @@ -819,7 +819,7 @@ flutter: expect(IOSDevice('test').isSupportedForProject(flutterProject), true); }, overrides: { FileSystem: () => MemoryFileSystem(), - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), Platform: () => macPlatform, }); @@ -831,7 +831,7 @@ flutter: expect(IOSDevice('test').isSupportedForProject(flutterProject), false); }, overrides: { FileSystem: () => MemoryFileSystem(), - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), Platform: () => macPlatform, }); } diff --git a/packages/flutter_tools/test/general.shard/ios/simulators_test.dart b/packages/flutter_tools/test/general.shard/ios/simulators_test.dart index cdac3b8bf4..6140bae387 100644 --- a/packages/flutter_tools/test/general.shard/ios/simulators_test.dart +++ b/packages/flutter_tools/test/general.shard/ios/simulators_test.dart @@ -486,7 +486,7 @@ flutter: expect(IOSSimulator('test').isSupportedForProject(flutterProject), true); }, overrides: { FileSystem: () => MemoryFileSystem(), - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('IOSDevice.isSupportedForProject is true with editable host app', () async { @@ -498,7 +498,7 @@ flutter: expect(IOSSimulator('test').isSupportedForProject(flutterProject), true); }, overrides: { FileSystem: () => MemoryFileSystem(), - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('IOSDevice.isSupportedForProject is false with no host app and no module', () async { @@ -509,6 +509,6 @@ flutter: expect(IOSSimulator('test').isSupportedForProject(flutterProject), false); }, overrides: { FileSystem: () => MemoryFileSystem(), - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); } diff --git a/packages/flutter_tools/test/general.shard/linux/linux_device_test.dart b/packages/flutter_tools/test/general.shard/linux/linux_device_test.dart index 421549879c..cf3ff8f7ee 100644 --- a/packages/flutter_tools/test/general.shard/linux/linux_device_test.dart +++ b/packages/flutter_tools/test/general.shard/linux/linux_device_test.dart @@ -48,7 +48,7 @@ void main() { expect(LinuxDevice().isSupportedForProject(flutterProject), true); }, overrides: { FileSystem: () => MemoryFileSystem(), - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('LinuxDevice.isSupportedForProject is false with no host app', () async { @@ -59,7 +59,7 @@ void main() { expect(LinuxDevice().isSupportedForProject(flutterProject), false); }, overrides: { FileSystem: () => MemoryFileSystem(), - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('LinuxDevice.executablePathForDevice uses the correct package executable', () async { @@ -76,7 +76,7 @@ void main() { expect(LinuxDevice().executablePathForDevice(mockApp, BuildMode.release), releasePath); }, overrides: { FileSystem: () => MemoryFileSystem(), - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); } diff --git a/packages/flutter_tools/test/general.shard/macos/cocoapods_test.dart b/packages/flutter_tools/test/general.shard/macos/cocoapods_test.dart index 7f76b5a129..9a362390aa 100644 --- a/packages/flutter_tools/test/general.shard/macos/cocoapods_test.dart +++ b/packages/flutter_tools/test/general.shard/macos/cocoapods_test.dart @@ -179,7 +179,7 @@ void main() { expect(projectUnderTest.ios.podfile.readAsStringSync(), 'Objective-C iOS podfile template'); }, overrides: { FileSystem: () => fs, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('creates swift Podfile if swift', () async { @@ -195,7 +195,7 @@ void main() { expect(projectUnderTest.ios.podfile.readAsStringSync(), 'Swift iOS podfile template'); }, overrides: { FileSystem: () => fs, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), XcodeProjectInterpreter: () => mockXcodeProjectInterpreter, }); @@ -206,7 +206,7 @@ void main() { expect(projectUnderTest.macos.podfile.readAsStringSync(), 'macOS podfile template'); }, overrides: { FileSystem: () => fs, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('does not recreate Podfile when already present', () async { @@ -218,7 +218,7 @@ void main() { expect(projectUnderTest.ios.podfile.readAsStringSync(), 'Existing Podfile'); }, overrides: { FileSystem: () => fs, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('does not create Podfile when we cannot interpret Xcode projects', () async { @@ -230,7 +230,7 @@ void main() { expect(projectUnderTest.ios.podfile.existsSync(), false); }, overrides: { FileSystem: () => fs, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), XcodeProjectInterpreter: () => mockXcodeProjectInterpreter, }); @@ -256,7 +256,7 @@ void main() { expect(releaseContents, contains('Existing release config')); }, overrides: { FileSystem: () => fs, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); }); @@ -285,7 +285,7 @@ void main() { expect(releaseContents, contains('Existing release config')); }, overrides: { FileSystem: () => fs, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); }); diff --git a/packages/flutter_tools/test/general.shard/macos/macos_device_test.dart b/packages/flutter_tools/test/general.shard/macos/macos_device_test.dart index 36f43baf0f..e0659359ca 100644 --- a/packages/flutter_tools/test/general.shard/macos/macos_device_test.dart +++ b/packages/flutter_tools/test/general.shard/macos/macos_device_test.dart @@ -56,7 +56,7 @@ void main() { expect(MacOSDevice().isSupportedForProject(flutterProject), true); }, overrides: { FileSystem: () => MemoryFileSystem(), - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('isSupportedForProject is false with no host app', () async { @@ -67,7 +67,7 @@ void main() { expect(MacOSDevice().isSupportedForProject(flutterProject), false); }, overrides: { FileSystem: () => MemoryFileSystem(), - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('executablePathForDevice uses the correct package executable', () async { @@ -84,7 +84,7 @@ void main() { expect(MacOSDevice().executablePathForDevice(mockApp, BuildMode.release), releasePath); }, overrides: { FileSystem: () => MemoryFileSystem(), - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); }); } diff --git a/packages/flutter_tools/test/general.shard/package_uri_mapper_test.dart b/packages/flutter_tools/test/general.shard/package_uri_mapper_test.dart index 18516c0afb..675d188cb3 100644 --- a/packages/flutter_tools/test/general.shard/package_uri_mapper_test.dart +++ b/packages/flutter_tools/test/general.shard/package_uri_mapper_test.dart @@ -40,7 +40,7 @@ void main() { 'package:example/main.dart'); }, overrides: { FileSystem: () => mockFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('single-root maps file from other package to null', () async { @@ -48,7 +48,7 @@ void main() { expect(packageUriMapper.map('/xml/lib/xml.dart'), null); }, overrides: { FileSystem: () => mockFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('single-root maps non-main file from same package', () async { @@ -57,7 +57,7 @@ void main() { 'package:example/src/foo.dart'); }, overrides: { FileSystem: () => mockFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('multi-root maps main file from same package on multiroot scheme', () async { @@ -76,7 +76,7 @@ void main() { 'package:example/main.dart'); }, overrides: { FileSystem: () => mockFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); } diff --git a/packages/flutter_tools/test/general.shard/plugins_test.dart b/packages/flutter_tools/test/general.shard/plugins_test.dart index 96216ed957..7e4089084e 100644 --- a/packages/flutter_tools/test/general.shard/plugins_test.dart +++ b/packages/flutter_tools/test/general.shard/plugins_test.dart @@ -75,7 +75,7 @@ flutter: expect(flutterProject.flutterPluginsFile.existsSync(), false); }, overrides: { FileSystem: () => fs, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('Refreshing the plugin list deletes the plugin file when there were plugins but no longer are', () { @@ -86,7 +86,7 @@ flutter: expect(flutterProject.flutterPluginsFile.existsSync(), false); }, overrides: { FileSystem: () => fs, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('Refreshing the plugin list creates a plugin directory when there are plugins', () { @@ -97,7 +97,7 @@ flutter: expect(flutterProject.flutterPluginsFile.existsSync(), true); }, overrides: { FileSystem: () => fs, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('Changes to the plugin list invalidates the Cocoapod lockfiles', () { @@ -111,7 +111,7 @@ flutter: expect(macosProject.podManifestLock.existsSync(), false); }, overrides: { FileSystem: () => fs, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); }); @@ -167,7 +167,7 @@ flutter: expect(registrant.readAsStringSync(), contains('class GeneratedPluginRegistrant')); }, overrides: { FileSystem: () => fs, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), FeatureFlags: () => featureFlags, }); @@ -192,7 +192,7 @@ flutter: expect(registrant.readAsStringSync(), contains('class GeneratedPluginRegistrant')); }, overrides: { FileSystem: () => fs, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), FeatureFlags: () => featureFlags, }); @@ -288,7 +288,7 @@ plugin3:${pluginUsingOldEmbeddingDir.childDirectory('lib').uri.toString()} }, overrides: { FileSystem: () => fs, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), FeatureFlags: () => featureFlags, XcodeProjectInterpreter: () => xcodeProjectInterpreter, }); @@ -314,7 +314,7 @@ plugin3:${pluginUsingOldEmbeddingDir.childDirectory('lib').uri.toString()} expect(registrant.readAsStringSync(), contains('class GeneratedPluginRegistrant')); }, overrides: { FileSystem: () => fs, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), FeatureFlags: () => featureFlags, }); @@ -339,7 +339,7 @@ plugin3:${pluginUsingOldEmbeddingDir.childDirectory('lib').uri.toString()} expect(registrant.readAsStringSync(), contains('class GeneratedPluginRegistrant')); }, overrides: { FileSystem: () => fs, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), FeatureFlags: () => featureFlags, }); @@ -364,7 +364,7 @@ plugin3:${pluginUsingOldEmbeddingDir.childDirectory('lib').uri.toString()} expect(registrant.readAsStringSync(), contains('class GeneratedPluginRegistrant')); }, overrides: { FileSystem: () => fs, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), FeatureFlags: () => featureFlags, }); @@ -389,7 +389,7 @@ plugin3:${pluginUsingOldEmbeddingDir.childDirectory('lib').uri.toString()} expect(registrant.readAsStringSync(), contains('class GeneratedPluginRegistrant')); }, overrides: { FileSystem: () => fs, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), FeatureFlags: () => featureFlags, }); }); diff --git a/packages/flutter_tools/test/general.shard/project_file_invalidator_test.dart b/packages/flutter_tools/test/general.shard/project_file_invalidator_test.dart index 4a82815d98..db1a4a9afc 100644 --- a/packages/flutter_tools/test/general.shard/project_file_invalidator_test.dart +++ b/packages/flutter_tools/test/general.shard/project_file_invalidator_test.dart @@ -47,7 +47,7 @@ void _testProjectFileInvalidator({@required bool asyncScanning}) { ); }, overrides: { FileSystem: () => MemoryFileSystem(), - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('Non-existent files are ignored', () async { @@ -62,6 +62,6 @@ void _testProjectFileInvalidator({@required bool asyncScanning}) { ); }, overrides: { FileSystem: () => MemoryFileSystem(), - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); } diff --git a/packages/flutter_tools/test/general.shard/project_test.dart b/packages/flutter_tools/test/general.shard/project_test.dart index 4a250a7862..177d936b96 100644 --- a/packages/flutter_tools/test/general.shard/project_test.dart +++ b/packages/flutter_tools/test/general.shard/project_test.dart @@ -196,7 +196,7 @@ void main() { expectExists(project.macos.managedDirectory.childFile('GeneratedPluginRegistrant.swift')); }, overrides: { FileSystem: () => MemoryFileSystem(), - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), FeatureFlags: () => TestFeatureFlags(isMacOSEnabled: true), FlutterProjectFactory: () => FlutterProjectFactory(), }); @@ -207,7 +207,7 @@ void main() { expectExists(project.macos.generatedXcodePropertiesFile); }, overrides: { FileSystem: () => MemoryFileSystem(), - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), FeatureFlags: () => TestFeatureFlags(isMacOSEnabled: true), FlutterProjectFactory: () => FlutterProjectFactory(), }); @@ -219,7 +219,7 @@ void main() { expectExists(project.linux.managedDirectory.childFile('generated_plugin_registrant.cc')); }, overrides: { FileSystem: () => MemoryFileSystem(), - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), FeatureFlags: () => TestFeatureFlags(isLinuxEnabled: true), FlutterProjectFactory: () => FlutterProjectFactory(), }); @@ -231,7 +231,7 @@ void main() { expectExists(project.windows.managedDirectory.childFile('generated_plugin_registrant.cc')); }, overrides: { FileSystem: () => MemoryFileSystem(), - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), FeatureFlags: () => TestFeatureFlags(isWindowsEnabled: true), FlutterProjectFactory: () => FlutterProjectFactory(), }); @@ -328,7 +328,7 @@ apply plugin: 'kotlin-android' expect(project.android.isKotlin, isTrue); }, overrides: { FileSystem: () => fs, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), XcodeProjectInterpreter: () => mockXcodeProjectInterpreter, FlutterProjectFactory: () => flutterProjectFactory, }); @@ -349,7 +349,7 @@ apply plugin: 'kotlin-android' void testWithMocks(String description, Future testMethod()) { testUsingContext(description, testMethod, overrides: { FileSystem: () => fs, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), PlistParser: () => mockPlistUtils, XcodeProjectInterpreter: () => mockXcodeProjectInterpreter, FlutterProjectFactory: () => flutterProjectFactory, @@ -617,7 +617,7 @@ void testInMemory(String description, Future testMethod()) { testMethod, overrides: { FileSystem: () => testFileSystem, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), Cache: () => Cache(), FlutterProjectFactory: () => flutterProjectFactory, }, diff --git a/packages/flutter_tools/test/general.shard/runner/flutter_command_runner_test.dart b/packages/flutter_tools/test/general.shard/runner/flutter_command_runner_test.dart index 3d821eb07e..92fa47b78c 100644 --- a/packages/flutter_tools/test/general.shard/runner/flutter_command_runner_test.dart +++ b/packages/flutter_tools/test/general.shard/runner/flutter_command_runner_test.dart @@ -67,7 +67,7 @@ void main() { expect(versionChecked, isTrue); }, overrides: { FileSystem: () => fs, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), Platform: () => platform, }, initializeFlutterRoot: false); @@ -79,7 +79,7 @@ void main() { }, overrides: { FileSystem: () => fs, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), Platform: () => platform, }, initializeFlutterRoot: false); @@ -95,7 +95,7 @@ void main() { await runner.run(['dummy', '--local-engine=ios_debug']); }, overrides: { FileSystem: () => fs, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), Platform: () => platform, }, initializeFlutterRoot: false); @@ -105,7 +105,7 @@ void main() { await runner.run(['dummy', '--local-engine-src-path=$_kArbitraryEngineRoot/src', '--local-engine=ios_debug']); }, overrides: { FileSystem: () => fs, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), Platform: () => platform, }, initializeFlutterRoot: false); @@ -115,7 +115,7 @@ void main() { await runner.run(['dummy', '--local-engine=ios_debug']); }, overrides: { FileSystem: () => fs, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), Platform: () => platform, }, initializeFlutterRoot: false); }); @@ -130,7 +130,7 @@ void main() { }, overrides: { FileSystem: () => fs, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), Platform: () => platform, }, initializeFlutterRoot: false); @@ -188,7 +188,7 @@ void main() { ]); }, overrides: { FileSystem: () => fs, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), Platform: () => platform, }, initializeFlutterRoot: false); }); @@ -201,7 +201,7 @@ void main() { expect(fakeCommand.preferences.wrapText, isTrue); }, overrides: { FileSystem: () => fs, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), Stdio: () => FakeStdio(hasFakeTerminal: true), }, initializeFlutterRoot: false); @@ -212,7 +212,7 @@ void main() { expect(fakeCommand.preferences.wrapText, isFalse); }, overrides: { FileSystem: () => fs, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), Stdio: () => FakeStdio(hasFakeTerminal: false), }, initializeFlutterRoot: false); @@ -223,7 +223,7 @@ void main() { expect(fakeCommand.preferences.wrapText, isFalse); }, overrides: { FileSystem: () => fs, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), Stdio: () => FakeStdio(hasFakeTerminal: true), }, initializeFlutterRoot: false); @@ -234,7 +234,7 @@ void main() { expect(fakeCommand.preferences.wrapText, isTrue); }, overrides: { FileSystem: () => fs, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), Stdio: () => FakeStdio(hasFakeTerminal: false), }, initializeFlutterRoot: false); }); diff --git a/packages/flutter_tools/test/general.shard/runner/runner_test.dart b/packages/flutter_tools/test/general.shard/runner/runner_test.dart index b9a0b87f53..db0be9edad 100644 --- a/packages/flutter_tools/test/general.shard/runner/runner_test.dart +++ b/packages/flutter_tools/test/general.shard/runner/runner_test.dart @@ -71,7 +71,7 @@ void main() { 'FLUTTER_ROOT': '/', }), FileSystem: () => MemoryFileSystem(), - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), Usage: () => CrashingUsage(), }); }); diff --git a/packages/flutter_tools/test/general.shard/tester/flutter_tester_test.dart b/packages/flutter_tools/test/general.shard/tester/flutter_tester_test.dart index fa6a4f0467..0ab4ceaa2b 100644 --- a/packages/flutter_tools/test/general.shard/tester/flutter_tester_test.dart +++ b/packages/flutter_tools/test/general.shard/tester/flutter_tester_test.dart @@ -37,7 +37,7 @@ void main() { expect(app.packagesFile.path, fs.path.join(projectPath, '.packages')); }, overrides: { FileSystem: () => fs, - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); }); diff --git a/packages/flutter_tools/test/general.shard/windows/windows_device_test.dart b/packages/flutter_tools/test/general.shard/windows/windows_device_test.dart index 236b723fbc..3319326cc0 100644 --- a/packages/flutter_tools/test/general.shard/windows/windows_device_test.dart +++ b/packages/flutter_tools/test/general.shard/windows/windows_device_test.dart @@ -49,7 +49,7 @@ void main() { expect(WindowsDevice().isSupportedForProject(flutterProject), true); }, overrides: { FileSystem: () => MemoryFileSystem(), - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('isSupportedForProject is false with no host app', () async { @@ -60,7 +60,7 @@ void main() { expect(WindowsDevice().isSupportedForProject(flutterProject), false); }, overrides: { FileSystem: () => MemoryFileSystem(), - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); testUsingContext('executablePathForDevice uses the correct package executable', () async { @@ -77,7 +77,7 @@ void main() { expect(WindowsDevice().executablePathForDevice(mockApp, BuildMode.release), releasePath); }, overrides: { FileSystem: () => MemoryFileSystem(), - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), }); }); } diff --git a/packages/flutter_tools/test/src/fake_process_manager.dart b/packages/flutter_tools/test/src/fake_process_manager.dart index a0a2203ac7..4022a54a50 100644 --- a/packages/flutter_tools/test/src/fake_process_manager.dart +++ b/packages/flutter_tools/test/src/fake_process_manager.dart @@ -9,8 +9,12 @@ import 'package:flutter_tools/src/base/io.dart'; import 'package:meta/meta.dart'; import 'package:process/process.dart'; +import 'common.dart'; + export 'package:process/process.dart' show ProcessManager; +typedef VoidCallback = void Function(); + /// A command for [FakeProcessManager]. @immutable class FakeCommand { @@ -19,28 +23,29 @@ class FakeCommand { this.workingDirectory, this.environment, this.duration = const Duration(), - @required this.exitCode, - @required this.stdout, - @required this.stderr, + this.onRun, + this.exitCode = 0, + this.stdout = '', + this.stderr = '', }) : assert(command != null), assert(duration != null), + assert(exitCode != null), assert(stdout != null), assert(stderr != null); /// The exact commands that must be matched for this [FakeCommand] to be - /// selected from those given to the [FakeProcessManager]. + /// considered correct. final List command; /// The exact working directory that must be matched for this [FakeCommand] to - /// be selected from those given to the [FakeProcessManager]. + /// be considered correct. /// - /// If this is null, then it matches any working directory. + /// If this is null, the working directory is ignored. final String workingDirectory; - /// The environment that must be matched for this [FakeCommand] to be selected - /// from those given to the [FakeProcessManager]. + /// The environment that must be matched for this [FakeCommand] to be considered correct. /// - /// If this is null, then it matches any environment. + /// If this is null, then the environment is ignored. /// /// Otherwise, each key in this environment must be present and must have a /// value that matches the one given here for the [FakeCommand] to match. @@ -53,6 +58,10 @@ class FakeCommand { /// otherwise the test will be artificially slow. final Duration duration; + /// A callback that is run after [duration] expires but before the [exitCode] + /// (and output) are passed back. + final VoidCallback onRun; + /// The process' exit code. /// /// To simulate a never-ending process, set [duration] to a value greated than @@ -110,13 +119,20 @@ class _FakeProcess implements Process { _FakeProcess( this._exitCode, Duration duration, + VoidCallback onRun, this.pid, this._stderr, this.stdin, this._stdout, - ) : exitCode = Future.delayed(duration).then((void value) => _exitCode), + ) : exitCode = Future.delayed(duration).then((void value) { + if (onRun != null) { + onRun(); + } + return _exitCode; + }), stderr = Stream>.value(utf8.encode(_stderr)), stdout = Stream>.value(utf8.encode(_stdout)); + final int _exitCode; @override @@ -145,44 +161,42 @@ class _FakeProcess implements Process { } } -/// A fake [ProcessManager] which responds to particular commands with particular results. -/// -/// On creation, pass in a list of [FakeCommand] objects. When the [ProcessManager] methods -/// such as [start] are invoked, the first matching [FakeCommand] is found and its settings -/// are used to simulate the result of running that command. -/// -/// If no command is found, then one is implied which immediately returns exit -/// code 0 with no output. -class FakeProcessManager implements ProcessManager { - FakeProcessManager(this._commands); +abstract class FakeProcessManager implements ProcessManager { + /// A fake [ProcessManager] which responds to all commands as if they had run + /// instantaneously with an exit code of 0 and no output. + factory FakeProcessManager.any() = _FakeAnyProcessManager; - final List _commands; + /// A fake [ProcessManager] which responds to particular commands with + /// particular results. + /// + /// On creation, pass in a list of [FakeCommand] objects. When the + /// [ProcessManager] methods such as [start] are invoked, the next + /// [FakeCommand] must match (otherwise the test fails); its settings are used + /// to simulate the result of running that command. + /// + /// If no command is found, then one is implied which immediately returns exit + /// code 0 with no output. + /// + /// There is no logic to ensure that all the listed commands are run. Use + /// [FakeCommand.onRun] to set a flag, or specify a sentinel command as your + /// last command and verify its execution is successful, to ensure that all + /// the specified commands are actually called. + factory FakeProcessManager.list(List commands) = _SequenceProcessManager; - FakeCommand _findCommand(List command, String workingDirectory, Map environment) { - for (FakeCommand candidate in _commands) { - if (candidate._matches(command, workingDirectory, environment)) { - return candidate; - } - } - return FakeCommand( - command: command, - workingDirectory: workingDirectory, - environment: environment, - duration: const Duration(), - exitCode: 0, - stdout: '', - stderr: '', - ); - } + FakeProcessManager._(); + + @protected + FakeCommand findCommand(List command, String workingDirectory, Map environment); int _pid = 9999; _FakeProcess _runCommand(List command, String workingDirectory, Map environment) { _pid += 1; - final FakeCommand fakeCommand = _findCommand(command, workingDirectory, environment); + final FakeCommand fakeCommand = findCommand(command, workingDirectory, environment); return _FakeProcess( fakeCommand.exitCode, fakeCommand.duration, + fakeCommand.onRun, _pid, fakeCommand.stdout, null, // stdin @@ -248,3 +262,41 @@ class FakeProcessManager implements ProcessManager { return false; } } + +class _FakeAnyProcessManager extends FakeProcessManager { + _FakeAnyProcessManager() : super._(); + + @override + FakeCommand findCommand(List command, String workingDirectory, Map environment) { + return FakeCommand( + command: command, + workingDirectory: workingDirectory, + environment: environment, + duration: const Duration(), + exitCode: 0, + stdout: '', + stderr: '', + ); + } +} + +class _SequenceProcessManager extends FakeProcessManager { + _SequenceProcessManager(this._commands) : super._(); + + final List _commands; + + @override + FakeCommand findCommand(List command, String workingDirectory, Map environment) { + expect(_commands, isNotEmpty, + reason: 'ProcessManager was told to execute $command (in $workingDirectory) ' + 'but the FakeProcessManager.list expected no more processes.' + ); + expect(_commands.first._matches(command, workingDirectory, environment), isTrue, + reason: 'ProcessManager was told to execute $command ' + '(in $workingDirectory, with environment $environment) ' + 'but the next process that was expected was ${_commands.first.command} ' + '(in ${_commands.first.workingDirectory}, with environment ${_commands.first.environment})}.' + ); + return _commands.removeAt(0); + } +} diff --git a/packages/flutter_tools/test/src/testbed.dart b/packages/flutter_tools/test/src/testbed.dart index 4469127882..3168386d99 100644 --- a/packages/flutter_tools/test/src/testbed.dart +++ b/packages/flutter_tools/test/src/testbed.dart @@ -35,7 +35,7 @@ export 'package:flutter_tools/src/base/context.dart' show Generator; final Map _testbedDefaults = { // Keeps tests fast by avoiding the actual file system. FileSystem: () => MemoryFileSystem(style: platform.isWindows ? FileSystemStyle.windows : FileSystemStyle.posix), - ProcessManager: () => FakeProcessManager([]), + ProcessManager: () => FakeProcessManager.any(), Logger: () => BufferLogger(), // Allows reading logs and prevents stdout. OperatingSystemUtils: () => FakeOperatingSystemUtils(), OutputPreferences: () => OutputPreferences.test(), // configures BufferLogger to avoid color codes.