diff --git a/packages/flutter_tools/test/commands.shard/hermetic/analyze_continuously_test.dart b/packages/flutter_tools/test/commands.shard/hermetic/analyze_continuously_test.dart index ba0ab037f0..4b044d4989 100644 --- a/packages/flutter_tools/test/commands.shard/hermetic/analyze_continuously_test.dart +++ b/packages/flutter_tools/test/commands.shard/hermetic/analyze_continuously_test.dart @@ -23,6 +23,7 @@ import 'package:process/process.dart'; import '../../src/common.dart'; import '../../src/context.dart'; +import '../../src/fake_process_manager.dart'; void main() { setUpAll(() { @@ -206,7 +207,7 @@ void main() { unawaited(commandRunner.run(['analyze', '--watch'])); await stdin.stream.first; - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }); testUsingContext('Can run AnalysisService with customized cache location --watch', () async { @@ -244,6 +245,6 @@ void main() { unawaited(commandRunner.run(['analyze', '--watch'])); await stdin.stream.first; - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }); } diff --git a/packages/flutter_tools/test/commands.shard/permeable/packages_test.dart b/packages/flutter_tools/test/commands.shard/permeable/packages_test.dart index 5ae8b0d3be..34a06da31a 100644 --- a/packages/flutter_tools/test/commands.shard/permeable/packages_test.dart +++ b/packages/flutter_tools/test/commands.shard/permeable/packages_test.dart @@ -23,6 +23,7 @@ import 'package:flutter_tools/src/globals.dart' as globals; import '../../src/common.dart'; import '../../src/context.dart'; +import '../../src/fake_process_manager.dart'; import '../../src/fakes.dart'; import '../../src/testbed.dart'; @@ -456,7 +457,7 @@ void main() { ); await createTestCommandRunner(PackagesCommand()).run(['packages', 'test']); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }, overrides: { FileSystem: () => MemoryFileSystem.test(), Platform: () => FakePlatform(operatingSystem: 'linux', environment: {}), @@ -481,7 +482,7 @@ void main() { ); await createTestCommandRunner(PackagesCommand()).run(['packages', 'test']); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }, overrides: { FileSystem: () => MemoryFileSystem.test(), Platform: () => FakePlatform(operatingSystem: 'linux', environment: {}), @@ -510,7 +511,7 @@ void main() { ); await createTestCommandRunner(PackagesCommand()).run(['packages', '--verbose', 'pub', 'run', '--foo', 'bar']); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }, overrides: { FileSystem: () => MemoryFileSystem.test(), Platform: () => FakePlatform(operatingSystem: 'linux', environment: {}), diff --git a/packages/flutter_tools/test/general.shard/android/adb_log_reader_test.dart b/packages/flutter_tools/test/general.shard/android/adb_log_reader_test.dart index d97ad06b6e..d6f56de62f 100644 --- a/packages/flutter_tools/test/general.shard/android/adb_log_reader_test.dart +++ b/packages/flutter_tools/test/general.shard/android/adb_log_reader_test.dart @@ -11,6 +11,7 @@ import 'package:test/fake.dart'; import '../../src/common.dart'; import '../../src/context.dart'; +import '../../src/fake_process_manager.dart'; const int kLollipopVersionCode = 21; const String kLastLogcatTimestamp = '11-27 15:39:04.506'; @@ -43,7 +44,7 @@ void main() { processManager, ); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }); testWithoutContext('AdbLogReader calls adb logcat with expected flags apiVersion < 21', () async { @@ -66,7 +67,7 @@ void main() { processManager, ); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }); testWithoutContext('AdbLogReader calls adb logcat with expected flags null apiVersion', () async { @@ -89,7 +90,7 @@ void main() { processManager, ); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }); testWithoutContext('AdbLogReader calls adb logcat with expected flags when requesting past logs', () async { @@ -115,7 +116,7 @@ void main() { includePastLogs: true, ); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }); testWithoutContext('AdbLogReader handles process early exit', () async { diff --git a/packages/flutter_tools/test/general.shard/android/android_device_port_forwarder_test.dart b/packages/flutter_tools/test/general.shard/android/android_device_port_forwarder_test.dart index 75d6b23191..22a438a33c 100644 --- a/packages/flutter_tools/test/general.shard/android/android_device_port_forwarder_test.dart +++ b/packages/flutter_tools/test/general.shard/android/android_device_port_forwarder_test.dart @@ -11,6 +11,7 @@ import 'package:flutter_tools/src/device.dart'; import '../../src/common.dart'; import '../../src/context.dart'; +import '../../src/fake_process_manager.dart'; void main() { testWithoutContext('AndroidDevicePortForwarder returns the generated host ' @@ -123,7 +124,7 @@ void main() { await forwarder.dispose(); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }); testWithoutContext('failures to unforward port do not throw if the forward is missing', () async { diff --git a/packages/flutter_tools/test/general.shard/android/android_device_start_test.dart b/packages/flutter_tools/test/general.shard/android/android_device_start_test.dart index 99bc7c5dcf..3b8746f797 100644 --- a/packages/flutter_tools/test/general.shard/android/android_device_start_test.dart +++ b/packages/flutter_tools/test/general.shard/android/android_device_start_test.dart @@ -17,6 +17,7 @@ import 'package:test/fake.dart'; import '../../src/common.dart'; import '../../src/context.dart'; +import '../../src/fake_process_manager.dart'; const FakeCommand kAdbVersionCommand = FakeCommand( command: ['adb', 'version'], @@ -121,7 +122,7 @@ void main() { ); expect(launchResult.started, true); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }); } @@ -160,7 +161,7 @@ void main() { ); expect(launchResult.started, false); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }); testWithoutContext('AndroidDevice.startApp forwards all supported debugging options', () async { @@ -285,7 +286,7 @@ void main() { // This fails to start due to observatory discovery issues. expect(launchResult.started, false); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }); } diff --git a/packages/flutter_tools/test/general.shard/android/android_gradle_builder_test.dart b/packages/flutter_tools/test/general.shard/android/android_gradle_builder_test.dart index 9622e90168..6f003b827e 100644 --- a/packages/flutter_tools/test/general.shard/android/android_gradle_builder_test.dart +++ b/packages/flutter_tools/test/general.shard/android/android_gradle_builder_test.dart @@ -23,6 +23,7 @@ import 'package:test/fake.dart'; import '../../src/common.dart'; import '../../src/context.dart'; +import '../../src/fake_process_manager.dart'; void main() { group('gradle build', () { @@ -372,7 +373,7 @@ void main() { ); }, throwsA(isA())); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }); testUsingContext('logs success event after a successful retry', () async { @@ -470,7 +471,7 @@ void main() { parameters: {}, ), )); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }); testUsingContext('performs code size analysis and sends analytics', () async { @@ -678,7 +679,7 @@ void main() { parameters: {}, ), )); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }); testUsingContext('indicates that an APK has been built successfully', () async { @@ -742,7 +743,7 @@ void main() { logger.statusText, contains('Built build/app/outputs/flutter-apk/app-release.apk (0.0MB)'), ); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }); testUsingContext("doesn't indicate how to consume an AAR when printHowToConsumeAar is false", () async { @@ -805,7 +806,7 @@ void main() { logger.statusText.contains('Consuming the Module'), isFalse, ); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }); testUsingContext('gradle exit code and stderr is forwarded to tool exit', () async { @@ -861,7 +862,7 @@ void main() { target: '', buildNumber: '1.0', ), throwsToolExit(exitCode: 108, message: 'Gradle task assembleAarRelease failed with exit code 108.')); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }); testUsingContext('build apk uses selected local engine with arm32 ABI', () async { @@ -935,7 +936,7 @@ void main() { localGradleErrors: const [], ); }, throwsToolExit()); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }); testUsingContext('build apk uses selected local engine with arm64 ABI', () async { @@ -1009,7 +1010,7 @@ void main() { localGradleErrors: const [], ); }, throwsToolExit()); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }); testUsingContext('build apk uses selected local engine with x86 ABI', () async { @@ -1083,7 +1084,7 @@ void main() { localGradleErrors: const [], ); }, throwsToolExit()); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }); testUsingContext('build apk uses selected local engine with x64 ABI', () async { @@ -1157,7 +1158,7 @@ void main() { localGradleErrors: const [], ); }, throwsToolExit()); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }); testUsingContext('honors --no-android-gradle-daemon setting', () async { @@ -1212,7 +1213,7 @@ void main() { localGradleErrors: const [], ); }, throwsToolExit()); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }); testUsingContext('build aar uses selected local engine with arm32 ABI', () async { @@ -1297,7 +1298,7 @@ void main() { '1.0.0-73fd6b049a80bcea2db1f26c7cee434907cd188b/' 'flutter_embedding_release-1.0.0-73fd6b049a80bcea2db1f26c7cee434907cd188b.pom' ), exists); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }); testUsingContext('build aar uses selected local engine with x64 ABI', () async { @@ -1382,7 +1383,7 @@ void main() { '1.0.0-73fd6b049a80bcea2db1f26c7cee434907cd188b/' 'flutter_embedding_release-1.0.0-73fd6b049a80bcea2db1f26c7cee434907cd188b.pom' ), exists); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }); testUsingContext('build aar uses selected local engine with x86 ABI', () async { @@ -1467,7 +1468,7 @@ void main() { '1.0.0-73fd6b049a80bcea2db1f26c7cee434907cd188b/' 'flutter_embedding_release-1.0.0-73fd6b049a80bcea2db1f26c7cee434907cd188b.pom' ), exists); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }); testUsingContext('build aar uses selected local engine on x64 ABI', () async { @@ -1552,7 +1553,7 @@ void main() { '1.0.0-73fd6b049a80bcea2db1f26c7cee434907cd188b/' 'flutter_embedding_release-1.0.0-73fd6b049a80bcea2db1f26c7cee434907cd188b.pom' ), exists); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }); }); } diff --git a/packages/flutter_tools/test/general.shard/android/android_install_test.dart b/packages/flutter_tools/test/general.shard/android/android_install_test.dart index 2540af3142..5617a4328c 100644 --- a/packages/flutter_tools/test/general.shard/android/android_install_test.dart +++ b/packages/flutter_tools/test/general.shard/android/android_install_test.dart @@ -15,6 +15,7 @@ import 'package:test/fake.dart'; import '../../src/common.dart'; import '../../src/context.dart'; +import '../../src/fake_process_manager.dart'; const FakeCommand kAdbVersionCommand = FakeCommand( command: ['adb', 'version'], @@ -84,7 +85,7 @@ void main() { ); expect(await androidDevice.installApp(androidApk), false); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }); testWithoutContext('Cannot install app if APK file is missing', () async { @@ -128,7 +129,7 @@ void main() { ); expect(await androidDevice.installApp(androidApk, userIdentifier: '10'), true); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }); testWithoutContext('Defaults to API level 16 if adb returns a null response', () async { @@ -157,7 +158,7 @@ void main() { ); expect(await androidDevice.installApp(androidApk, userIdentifier: '10'), true); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }); testWithoutContext('displays error if user not found', () async { @@ -202,7 +203,7 @@ void main() { expect(await androidDevice.installApp(androidApk, userIdentifier: 'jane'), false); expect(logger.errorText, contains('Error: User "jane" not found. Run "adb shell pm list users" to see list of available identifiers.')); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }); testWithoutContext('Will skip install if the correct version is up to date', () async { @@ -235,7 +236,7 @@ void main() { ); expect(await androidDevice.installApp(androidApk, userIdentifier: '10'), true); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }); testWithoutContext('Will uninstall if the correct version is not up to date and install fails', () async { @@ -276,7 +277,7 @@ void main() { ); expect(await androidDevice.installApp(androidApk, userIdentifier: '10'), true); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }); testWithoutContext('Will fail to install if the apk was never installed and it fails the first time', () async { @@ -309,7 +310,7 @@ void main() { ); expect(await androidDevice.installApp(androidApk, userIdentifier: '10'), false); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }); } 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 57e75b6986..029900a30c 100644 --- a/packages/flutter_tools/test/general.shard/base/build_test.dart +++ b/packages/flutter_tools/test/general.shard/base/build_test.dart @@ -13,6 +13,7 @@ import 'package:flutter_tools/src/macos/xcode.dart'; import '../../src/common.dart'; import '../../src/context.dart'; +import '../../src/fake_process_manager.dart'; const FakeCommand kWhichSysctlCommand = FakeCommand( command: [ @@ -296,7 +297,7 @@ void main() { ); expect(genSnapshotExitCode, 0); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }); testWithoutContext('builds iOS armv7 snapshot with dwarStackTraces', () async { @@ -354,7 +355,7 @@ void main() { ); expect(genSnapshotExitCode, 0); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }); testWithoutContext('builds iOS armv7 snapshot with obfuscate', () async { @@ -410,7 +411,7 @@ void main() { ); expect(genSnapshotExitCode, 0); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }); @@ -465,7 +466,7 @@ void main() { ); expect(genSnapshotExitCode, 0); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }); testWithoutContext('builds iOS arm64 snapshot', () async { @@ -517,7 +518,7 @@ void main() { ); expect(genSnapshotExitCode, 0); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }); testWithoutContext('builds shared library for android-arm (32bit)', () async { @@ -546,7 +547,7 @@ void main() { ); expect(genSnapshotExitCode, 0); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }); testWithoutContext('builds shared library for android-arm with dwarf stack traces', () async { @@ -578,7 +579,7 @@ void main() { ); expect(genSnapshotExitCode, 0); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }); testWithoutContext('builds shared library for android-arm with obfuscate', () async { @@ -608,7 +609,7 @@ void main() { ); expect(genSnapshotExitCode, 0); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }); testWithoutContext('builds shared library for android-arm without dwarf stack traces due to empty string', () async { @@ -637,7 +638,7 @@ void main() { ); expect(genSnapshotExitCode, 0); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }); testWithoutContext('builds shared library for android-arm64', () async { @@ -664,7 +665,7 @@ void main() { ); expect(genSnapshotExitCode, 0); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }); testWithoutContext('--no-strip in extraGenSnapshotOptions suppresses --strip', () async { @@ -691,7 +692,7 @@ void main() { ); expect(genSnapshotExitCode, 0); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }); }); } diff --git a/packages/flutter_tools/test/general.shard/build_system/targets/android_test.dart b/packages/flutter_tools/test/general.shard/build_system/targets/android_test.dart index dd7d36664e..cb632a0a9a 100644 --- a/packages/flutter_tools/test/general.shard/build_system/targets/android_test.dart +++ b/packages/flutter_tools/test/general.shard/build_system/targets/android_test.dart @@ -21,6 +21,7 @@ import 'package:flutter_tools/src/convert.dart'; import '../../../src/common.dart'; import '../../../src/context.dart'; +import '../../../src/fake_process_manager.dart'; final Platform platform = FakePlatform(operatingSystem: 'linux', environment: const {}); void main() { @@ -204,7 +205,7 @@ void main() { await androidAot.build(environment); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }, overrides: { FileSystem: () => fileSystem, ProcessManager: () => processManager, @@ -246,7 +247,7 @@ void main() { await androidAot.build(environment); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }, overrides: { FileSystem: () => fileSystem, ProcessManager: () => processManager, diff --git a/packages/flutter_tools/test/general.shard/build_system/targets/common_test.dart b/packages/flutter_tools/test/general.shard/build_system/targets/common_test.dart index f3285bbfc0..4b3ae7c9c6 100644 --- a/packages/flutter_tools/test/general.shard/build_system/targets/common_test.dart +++ b/packages/flutter_tools/test/general.shard/build_system/targets/common_test.dart @@ -18,6 +18,7 @@ import 'package:flutter_tools/src/compile.dart'; import '../../../src/common.dart'; import '../../../src/context.dart'; +import '../../../src/fake_process_manager.dart'; const String kBoundaryKey = '4d2d9609-c662-4571-afde-31410f96caa6'; const String kElfAot = '--snapshot_kind=app-aot-elf'; @@ -105,7 +106,7 @@ void main() { await expectLater(() => const KernelSnapshot().build(androidEnvironment), throwsA(isA())); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }); testWithoutContext('KernelSnapshot does not use track widget creation on profile builds', () async { @@ -141,7 +142,7 @@ void main() { await const KernelSnapshot().build(androidEnvironment); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }); testWithoutContext('KernelSnapshot correctly handles an empty string in ExtraFrontEndOptions', () async { @@ -178,7 +179,7 @@ void main() { await const KernelSnapshot() .build(androidEnvironment..defines[kExtraFrontEndOptions] = ''); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }); testWithoutContext('KernelSnapshot correctly forwards ExtraFrontEndOptions', () async { @@ -217,7 +218,7 @@ void main() { await const KernelSnapshot() .build(androidEnvironment..defines[kExtraFrontEndOptions] = 'foo,bar'); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }); testWithoutContext('KernelSnapshot can disable track-widget-creation on debug builds', () async { @@ -254,7 +255,7 @@ void main() { ..defines[kBuildMode] = getNameForBuildMode(BuildMode.debug) ..defines[kTrackWidgetCreation] = 'false'); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }); testWithoutContext('KernelSnapshot forces platform linking on debug for darwin target platforms', () async { @@ -292,7 +293,7 @@ void main() { ..defines[kTrackWidgetCreation] = 'false' ); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }); testWithoutContext('KernelSnapshot does use track widget creation on debug builds', () async { @@ -339,7 +340,7 @@ void main() { await const KernelSnapshot().build(testEnvironment); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }); testUsingContext('AotElfProfile Produces correct output directory', () async { @@ -364,7 +365,7 @@ void main() { await const AotElfProfile(TargetPlatform.android_arm).build(androidEnvironment); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }); testUsingContext('AotElfRelease configures gen_snapshot with code size directory', () async { @@ -392,7 +393,7 @@ void main() { await const AotElfRelease(TargetPlatform.android_arm).build(androidEnvironment); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }); testUsingContext('AotElfProfile throws error if missing build mode', () async { @@ -548,7 +549,7 @@ void main() { await const AotAssemblyProfile().build(iosEnvironment); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }, overrides: { Platform: () => macPlatform, FileSystem: () => fileSystem, @@ -620,7 +621,7 @@ void main() { await const AotAssemblyProfile().build(iosEnvironment); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }, overrides: { Platform: () => macPlatform, FileSystem: () => fileSystem, @@ -695,7 +696,7 @@ void main() { await const AotAssemblyProfile().build(iosEnvironment); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }, overrides: { Platform: () => macPlatform, FileSystem: () => fileSystem, @@ -729,6 +730,6 @@ void main() { await const AotElfRelease(TargetPlatform.android_arm).build(androidEnvironment); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }); } diff --git a/packages/flutter_tools/test/general.shard/build_system/targets/macos_test.dart b/packages/flutter_tools/test/general.shard/build_system/targets/macos_test.dart index 9c2c928db3..d6490335cf 100644 --- a/packages/flutter_tools/test/general.shard/build_system/targets/macos_test.dart +++ b/packages/flutter_tools/test/general.shard/build_system/targets/macos_test.dart @@ -18,6 +18,7 @@ import 'package:flutter_tools/src/convert.dart'; import '../../../src/common.dart'; import '../../../src/context.dart'; +import '../../../src/fake_process_manager.dart'; void main() { Environment environment; @@ -76,7 +77,7 @@ void main() { await const DebugUnpackMacOS().build(environment); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }, overrides: { FileSystem: () => fileSystem, ProcessManager: () => processManager, 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 6b783cfa24..87a2630fea 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 @@ -20,6 +20,7 @@ import 'package:fake_async/fake_async.dart'; import '../../src/common.dart'; import '../../src/context.dart'; +import '../../src/fake_process_manager.dart'; import '../../src/mocks.dart' as mocks; void main() { @@ -93,7 +94,7 @@ void main() { checkUpToDate: true, ); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); expect(fileSystem.file('.dart_tool/version').readAsStringSync(), 'b'); }); @@ -131,7 +132,7 @@ void main() { checkUpToDate: true, ); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); expect(fileSystem.file('.dart_tool/version').readAsStringSync(), 'b'); }); @@ -169,7 +170,7 @@ void main() { checkUpToDate: true, ); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); expect(fileSystem.file('.dart_tool/version').readAsStringSync(), 'b'); }); @@ -206,7 +207,7 @@ void main() { checkUpToDate: true, ); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); expect(fileSystem.file('.dart_tool/version').readAsStringSync(), 'b'); }); @@ -245,7 +246,7 @@ void main() { checkUpToDate: true, ); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); expect(fileSystem.file('.dart_tool/version').readAsStringSync(), 'b'); }); @@ -286,7 +287,7 @@ void main() { checkUpToDate: true, ); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); expect(fileSystem.file('.dart_tool/version').readAsStringSync(), 'b'); }); diff --git a/packages/flutter_tools/test/general.shard/flutter_tester_device_test.dart b/packages/flutter_tools/test/general.shard/flutter_tester_device_test.dart index 59f0f83447..dd2a33793e 100644 --- a/packages/flutter_tools/test/general.shard/flutter_tester_device_test.dart +++ b/packages/flutter_tools/test/general.shard/flutter_tester_device_test.dart @@ -22,6 +22,7 @@ import 'package:flutter_tools/src/base/platform.dart'; import '../src/common.dart'; import '../src/context.dart'; +import '../src/fake_process_manager.dart'; void main() { FakePlatform platform; @@ -155,7 +156,7 @@ void main() { testUsingContext('Can pass additional arguments to tester binary', () async { await device.start(compiledEntrypointPath: 'example.dill'); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }); }); diff --git a/packages/flutter_tools/test/general.shard/ios/ios_deploy_test.dart b/packages/flutter_tools/test/general.shard/ios/ios_deploy_test.dart index c79344e13a..fe098ad010 100644 --- a/packages/flutter_tools/test/general.shard/ios/ios_deploy_test.dart +++ b/packages/flutter_tools/test/general.shard/ios/ios_deploy_test.dart @@ -20,6 +20,7 @@ import 'package:flutter_tools/src/ios/ios_deploy.dart'; import '../../src/common.dart'; import '../../src/context.dart'; +import '../../src/fake_process_manager.dart'; import '../../src/fakes.dart'; void main () { @@ -80,7 +81,7 @@ void main () { expect(await iosDeployDebugger.launchAndAttach(), isTrue); expect(await iosDeployDebugger.logLines.toList(), ['Did finish launching.']); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); expect(appDeltaDirectory, exists); }); }); @@ -294,7 +295,7 @@ void main () { ); expect(exitCode, 0); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }); testWithoutContext('returns non-zero exit code when ios-deploy does the same', () async { @@ -317,7 +318,7 @@ void main () { ); expect(exitCode, 1); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }); }); } diff --git a/packages/flutter_tools/test/general.shard/ios/ios_device_install_test.dart b/packages/flutter_tools/test/general.shard/ios/ios_device_install_test.dart index aedfb11860..be15ee44be 100644 --- a/packages/flutter_tools/test/general.shard/ios/ios_device_install_test.dart +++ b/packages/flutter_tools/test/general.shard/ios/ios_device_install_test.dart @@ -21,6 +21,7 @@ import 'package:meta/meta.dart'; import '../../src/common.dart'; import '../../src/context.dart'; +import '../../src/fake_process_manager.dart'; import '../../src/fakes.dart'; const Map kDyLdLibEntry = { @@ -64,7 +65,7 @@ void main() { final bool wasInstalled = await device.installApp(iosApp); expect(wasInstalled, true); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }); testWithoutContext('IOSDevice.installApp calls ios-deploy correctly with network', () async { @@ -94,7 +95,7 @@ void main() { final bool wasInstalled = await device.installApp(iosApp); expect(wasInstalled, true); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }); testWithoutContext('IOSDevice.uninstallApp calls ios-deploy correctly', () async { @@ -116,7 +117,7 @@ void main() { final bool wasUninstalled = await device.uninstallApp(iosApp); expect(wasUninstalled, true); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }); group('isAppInstalled', () { @@ -141,7 +142,7 @@ void main() { final bool isAppInstalled = await device.isAppInstalled(iosApp); expect(isAppInstalled, false); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }); testWithoutContext('returns true when app is installed', () async { @@ -165,7 +166,7 @@ void main() { final bool isAppInstalled = await device.isAppInstalled(iosApp); expect(isAppInstalled, isTrue); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }); testWithoutContext('returns false when app is not installed', () async { @@ -190,7 +191,7 @@ void main() { final bool isAppInstalled = await device.isAppInstalled(iosApp); expect(isAppInstalled, isFalse); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); expect(logger.traceText, contains('${iosApp.id} not installed on ${device.id}')); }); @@ -218,7 +219,7 @@ void main() { final bool isAppInstalled = await device.isAppInstalled(iosApp); expect(isAppInstalled, isFalse); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); expect(logger.traceText, contains(stderr)); }); }); diff --git a/packages/flutter_tools/test/general.shard/ios/ios_device_port_forwarder_test.dart b/packages/flutter_tools/test/general.shard/ios/ios_device_port_forwarder_test.dart index a0771222ce..7185b61988 100644 --- a/packages/flutter_tools/test/general.shard/ios/ios_device_port_forwarder_test.dart +++ b/packages/flutter_tools/test/general.shard/ios/ios_device_port_forwarder_test.dart @@ -11,6 +11,7 @@ import 'package:mockito/mockito.dart'; import '../../src/common.dart'; import '../../src/context.dart'; +import '../../src/fake_process_manager.dart'; const Map kDyLdLibEntry = { 'DYLD_LIBRARY_PATH': '/path/to/libs', @@ -49,7 +50,7 @@ void main() { // First port tried (49154) should fail, then succeed on the next expect(hostPort, 49154 + 1); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }); } diff --git a/packages/flutter_tools/test/general.shard/ios/ios_device_start_nonprebuilt_test.dart b/packages/flutter_tools/test/general.shard/ios/ios_device_start_nonprebuilt_test.dart index 5398ae8ea1..3ee851850f 100644 --- a/packages/flutter_tools/test/general.shard/ios/ios_device_start_nonprebuilt_test.dart +++ b/packages/flutter_tools/test/general.shard/ios/ios_device_start_nonprebuilt_test.dart @@ -163,7 +163,7 @@ void main() { expect(fileSystem.directory('build/ios/iphoneos'), exists); expect(launchResult.started, true); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }, overrides: { ProcessManager: () => processManager, FileSystem: () => fileSystem, @@ -252,7 +252,7 @@ void main() { expect(launchResult?.started, true); expect(fileSystem.directory('build/ios/iphoneos'), exists); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }, overrides: { ProcessManager: () => processManager, FileSystem: () => fileSystem, @@ -316,7 +316,7 @@ void main() { expect(logger.statusText, contains('Xcode build failed due to concurrent builds, will retry in 2 seconds')); expect(launchResult.started, true); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }); }, overrides: { ProcessManager: () => processManager, diff --git a/packages/flutter_tools/test/general.shard/ios/ios_device_start_prebuilt_test.dart b/packages/flutter_tools/test/general.shard/ios/ios_device_start_prebuilt_test.dart index 87e086a08b..1bb13cb0d4 100644 --- a/packages/flutter_tools/test/general.shard/ios/ios_device_start_prebuilt_test.dart +++ b/packages/flutter_tools/test/general.shard/ios/ios_device_start_prebuilt_test.dart @@ -23,6 +23,7 @@ import 'package:mockito/mockito.dart'; import '../../src/common.dart'; import '../../src/context.dart'; +import '../../src/fake_process_manager.dart'; import '../../src/fakes.dart'; // The command used to actually launch the app with args in release/profile. @@ -200,7 +201,7 @@ void main() { expect(launchResult.started, true); expect(launchResult.hasObservatory, false); expect(await device.stopApp(iosApp), false); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }); testWithoutContext('IOSDevice.startApp forwards all supported debugging options', () async { @@ -290,7 +291,7 @@ void main() { expect(launchResult.started, true); expect(await device.stopApp(iosApp), false); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }); } diff --git a/packages/flutter_tools/test/general.shard/ios/mac_test.dart b/packages/flutter_tools/test/general.shard/ios/mac_test.dart index 222648a78c..6b5594904b 100644 --- a/packages/flutter_tools/test/general.shard/ios/mac_test.dart +++ b/packages/flutter_tools/test/general.shard/ios/mac_test.dart @@ -20,6 +20,7 @@ import 'package:mockito/mockito.dart'; import '../../src/common.dart'; import '../../src/context.dart'; +import '../../src/fake_process_manager.dart'; import '../../src/fakes.dart'; FakePlatform _kNoColorTerminalPlatform() => FakePlatform(stdoutSupportsAnsi: false); @@ -471,7 +472,7 @@ Exited (sigterm)''', ]); await removeFinderExtendedAttributes(iosProjectDirectory, ProcessUtils(processManager: processManager, logger: logger), logger); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }); testWithoutContext('ignores errors', () async { @@ -488,7 +489,7 @@ Exited (sigterm)''', await removeFinderExtendedAttributes(iosProjectDirectory, ProcessUtils(processManager: processManager, logger: logger), logger); expect(logger.traceText, contains('Failed to remove xattr com.apple.FinderInfo')); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }); }); } diff --git a/packages/flutter_tools/test/general.shard/resident_runner_test.dart b/packages/flutter_tools/test/general.shard/resident_runner_test.dart index 793a0c04fe..8a3c09b9af 100644 --- a/packages/flutter_tools/test/general.shard/resident_runner_test.dart +++ b/packages/flutter_tools/test/general.shard/resident_runner_test.dart @@ -39,6 +39,7 @@ import 'package:mockito/mockito.dart'; import '../src/common.dart'; import '../src/context.dart'; +import '../src/fake_process_manager.dart'; import '../src/fakes.dart'; import '../src/testbed.dart'; diff --git a/packages/flutter_tools/test/general.shard/resident_web_runner_test.dart b/packages/flutter_tools/test/general.shard/resident_web_runner_test.dart index 8bce7a7739..8f88ad5f3a 100644 --- a/packages/flutter_tools/test/general.shard/resident_web_runner_test.dart +++ b/packages/flutter_tools/test/general.shard/resident_web_runner_test.dart @@ -34,6 +34,7 @@ import 'package:webkit_inspection_protocol/webkit_inspection_protocol.dart'; import '../src/common.dart'; import '../src/context.dart'; +import '../src/fake_process_manager.dart'; import '../src/fakes.dart'; import '../src/testbed.dart'; diff --git a/packages/flutter_tools/test/general.shard/version_test.dart b/packages/flutter_tools/test/general.shard/version_test.dart index fe91232bef..a88b186a29 100644 --- a/packages/flutter_tools/test/general.shard/version_test.dart +++ b/packages/flutter_tools/test/general.shard/version_test.dart @@ -20,6 +20,7 @@ import 'package:mockito/mockito.dart'; import '../src/common.dart'; import '../src/context.dart'; +import '../src/fake_process_manager.dart'; final SystemClock _testClock = SystemClock.fixed(DateTime(2015, 1, 1)); final DateTime _stampUpToDate = _testClock.ago(FlutterVersion.checkAgeConsideredUpToDate ~/ 2); @@ -578,168 +579,97 @@ void main() { }); testUsingContext('determine does not call fetch --tags', () { - final MockProcessUtils processUtils = MockProcessUtils(); - when(processUtils.runSync( - ['git', 'fetch', 'https://github.com/flutter/flutter.git', '--tags'], - workingDirectory: anyNamed('workingDirectory'), - environment: anyNamed('environment'), - )).thenReturn(RunResult(ProcessResult(105, 0, '', ''), ['git', 'fetch'])); - when(processUtils.runSync( - ['git', 'describe', '--match', '*.*.*', '--long', '--tags', 'HEAD'], - workingDirectory: anyNamed('workingDirectory'), - environment: anyNamed('environment'), - )).thenReturn(RunResult(ProcessResult(106, 0, 'v0.1.2-3-1234abcd', ''), ['git', 'describe'])); - when(processUtils.runSync( - ['git', 'tag', '--points-at', 'HEAD'], - workingDirectory: anyNamed('workingDirectory'), - environment: anyNamed('environment'), - )).thenReturn( - RunResult(ProcessResult(110, 0, '', ''), - ['git', 'tag', '--points-at', 'HEAD'], - )); + final FakeProcessManager fakeProcessManager = FakeProcessManager.list([ + const FakeCommand( + command: ['git', 'tag', '--points-at', 'HEAD'], + ), + const FakeCommand( + command: ['git', 'describe', '--match', '*.*.*', '--long', '--tags', 'HEAD'], + stdout: 'v0.1.2-3-1234abcd', + ), + ]); + final ProcessUtils processUtils = ProcessUtils( + processManager: fakeProcessManager, + logger: BufferLogger.test(), + ); GitTagVersion.determine(processUtils, workingDirectory: '.'); - - verifyNever(processUtils.runSync( - ['git', 'rev-parse', '--abbrev-ref', 'HEAD'], - workingDirectory: anyNamed('workingDirectory'), - environment: anyNamed('environment'), - )); - verifyNever(processUtils.runSync( - ['git', 'fetch', 'https://github.com/flutter/flutter.git', '--tags'], - workingDirectory: anyNamed('workingDirectory'), - environment: anyNamed('environment'), - )); - verify(processUtils.runSync( - ['git', 'describe', '--match', '*.*.*', '--long', '--tags', 'HEAD'], - workingDirectory: anyNamed('workingDirectory'), - environment: anyNamed('environment'), - )).called(1); + expect(fakeProcessManager, hasNoRemainingExpectations); }); testUsingContext('determine does not fetch tags on dev/stable/beta', () { - final MockProcessUtils processUtils = MockProcessUtils(); - when(processUtils.runSync( - ['git', 'rev-parse', '--abbrev-ref', 'HEAD'], - workingDirectory: anyNamed('workingDirectory'), - environment: anyNamed('environment'), - )).thenReturn(RunResult(ProcessResult(105, 0, 'dev', ''), ['git', 'fetch'])); - when(processUtils.runSync( - ['git', 'fetch', 'https://github.com/flutter/flutter.git', '--tags'], - workingDirectory: anyNamed('workingDirectory'), - environment: anyNamed('environment'), - )).thenReturn(RunResult(ProcessResult(106, 0, '', ''), ['git', 'fetch'])); - when(processUtils.runSync( - ['git', 'describe', '--match', '*.*.*', '--long', '--tags', 'HEAD'], - workingDirectory: anyNamed('workingDirectory'), - environment: anyNamed('environment'), - )).thenReturn(RunResult(ProcessResult(107, 0, 'v0.1.2-3-1234abcd', ''), ['git', 'describe'])); - when(processUtils.runSync( - ['git', 'tag', '--points-at', 'HEAD'], - workingDirectory: anyNamed('workingDirectory'), - environment: anyNamed('environment'), - )).thenReturn( - RunResult(ProcessResult(108, 0, '', ''), - ['git', 'tag', '--points-at', 'HEAD'], - )); + final FakeProcessManager fakeProcessManager = FakeProcessManager.list([ + const FakeCommand( + command: ['git', 'rev-parse', '--abbrev-ref', 'HEAD'], + stdout: 'dev', + ), + const FakeCommand( + command: ['git', 'tag', '--points-at', 'HEAD'], + ), + const FakeCommand( + command: ['git', 'describe', '--match', '*.*.*', '--long', '--tags', 'HEAD'], + stdout: 'v0.1.2-3-1234abcd', + ), + ]); + final ProcessUtils processUtils = ProcessUtils( + processManager: fakeProcessManager, + logger: BufferLogger.test(), + ); GitTagVersion.determine(processUtils, workingDirectory: '.', fetchTags: true); - - verify(processUtils.runSync( - ['git', 'rev-parse', '--abbrev-ref', 'HEAD'], - workingDirectory: anyNamed('workingDirectory'), - environment: anyNamed('environment'), - )).called(1); - verifyNever(processUtils.runSync( - ['git', 'fetch', 'https://github.com/flutter/flutter.git', '--tags'], - workingDirectory: anyNamed('workingDirectory'), - environment: anyNamed('environment'), - )); - verify(processUtils.runSync( - ['git', 'describe', '--match', '*.*.*', '--long', '--tags', 'HEAD'], - workingDirectory: anyNamed('workingDirectory'), - environment: anyNamed('environment'), - )).called(1); + expect(fakeProcessManager, hasNoRemainingExpectations); }); testUsingContext('determine calls fetch --tags on master', () { - final MockProcessUtils processUtils = MockProcessUtils(); - when(processUtils.runSync( - ['git', 'rev-parse', '--abbrev-ref', 'HEAD'], - workingDirectory: anyNamed('workingDirectory'), - environment: anyNamed('environment'), - )).thenReturn(RunResult(ProcessResult(108, 0, 'master', ''), ['git', 'fetch'])); - when(processUtils.runSync( - ['git', 'fetch', 'https://github.com/flutter/flutter.git', '--tags', '-f'], - workingDirectory: anyNamed('workingDirectory'), - environment: anyNamed('environment'), - )).thenReturn(RunResult(ProcessResult(109, 0, '', ''), ['git', 'fetch'])); - when(processUtils.runSync( - ['git', 'tag', '--points-at', 'HEAD'], - workingDirectory: anyNamed('workingDirectory'), - environment: anyNamed('environment'), - )).thenReturn( - RunResult(ProcessResult(110, 0, '', ''), - ['git', 'tag', '--points-at', 'HEAD'], - )); - when(processUtils.runSync( - ['git', 'describe', '--match', '*.*.*', '--long', '--tags', 'HEAD'], - workingDirectory: anyNamed('workingDirectory'), - environment: anyNamed('environment'), - )).thenReturn(RunResult(ProcessResult(111, 0, 'v0.1.2-3-1234abcd', ''), ['git', 'describe'])); + final FakeProcessManager fakeProcessManager = FakeProcessManager.list([ + const FakeCommand( + command: ['git', 'rev-parse', '--abbrev-ref', 'HEAD'], + stdout: 'master', + ), + const FakeCommand( + command: ['git', 'fetch', 'https://github.com/flutter/flutter.git', '--tags', '-f'], + ), + const FakeCommand( + command: ['git', 'tag', '--points-at', 'HEAD'], + ), + const FakeCommand( + command: ['git', 'describe', '--match', '*.*.*', '--long', '--tags', 'HEAD'], + stdout: 'v0.1.2-3-1234abcd', + ), + ]); + final ProcessUtils processUtils = ProcessUtils( + processManager: fakeProcessManager, + logger: BufferLogger.test(), + ); GitTagVersion.determine(processUtils, workingDirectory: '.', fetchTags: true); - - verify(processUtils.runSync( - ['git', 'rev-parse', '--abbrev-ref', 'HEAD'], - workingDirectory: anyNamed('workingDirectory'), - environment: anyNamed('environment'), - )).called(1); - verify(processUtils.runSync( - ['git', 'fetch', 'https://github.com/flutter/flutter.git', '--tags', '-f'], - workingDirectory: anyNamed('workingDirectory'), - environment: anyNamed('environment'), - )).called(1); - verify(processUtils.runSync( - ['git', 'describe', '--match', '*.*.*', '--long', '--tags', 'HEAD'], - workingDirectory: anyNamed('workingDirectory'), - environment: anyNamed('environment'), - )).called(1); + expect(fakeProcessManager, hasNoRemainingExpectations); }); testUsingContext('determine uses overridden git url', () { - final MockProcessUtils processUtils = MockProcessUtils(); - when(processUtils.runSync( - ['git', 'rev-parse', '--abbrev-ref', 'HEAD'], - workingDirectory: anyNamed('workingDirectory'), - environment: anyNamed('environment'), - )).thenReturn(RunResult(ProcessResult(108, 0, 'master', ''), ['git', 'fetch'])); - when(processUtils.runSync( - ['git', 'fetch', 'https://githubmirror.com/flutter.git', '--tags', '-f'], - workingDirectory: anyNamed('workingDirectory'), - environment: anyNamed('environment'), - )).thenReturn(RunResult(ProcessResult(109, 0, '', ''), ['git', 'fetch'])); - when(processUtils.runSync( - ['git', 'tag', '--points-at', 'HEAD'], - workingDirectory: anyNamed('workingDirectory'), - environment: anyNamed('environment'), - )).thenReturn( - RunResult(ProcessResult(110, 0, '', ''), - ['git', 'tag', '--points-at', 'HEAD'], - )); - when(processUtils.runSync( - ['git', 'describe', '--match', '*.*.*', '--long', '--tags', 'HEAD'], - workingDirectory: anyNamed('workingDirectory'), - environment: anyNamed('environment'), - )).thenReturn(RunResult(ProcessResult(111, 0, 'v0.1.2-3-1234abcd', ''), ['git', 'describe'])); + final FakeProcessManager fakeProcessManager = FakeProcessManager.list([ + const FakeCommand( + command: ['git', 'rev-parse', '--abbrev-ref', 'HEAD'], + stdout: 'master', + ), + const FakeCommand( + command: ['git', 'fetch', 'https://githubmirror.com/flutter.git', '--tags', '-f'], + ), + const FakeCommand( + command: ['git', 'tag', '--points-at', 'HEAD'], + ), + const FakeCommand( + command: ['git', 'describe', '--match', '*.*.*', '--long', '--tags', 'HEAD'], + stdout: 'v0.1.2-3-1234abcd', + ), + ]); + final ProcessUtils processUtils = ProcessUtils( + processManager: fakeProcessManager, + logger: BufferLogger.test(), + ); GitTagVersion.determine(processUtils, workingDirectory: '.', fetchTags: true); - - verify(processUtils.runSync( - ['git', 'fetch', 'https://githubmirror.com/flutter.git', '--tags', '-f'], - workingDirectory: anyNamed('workingDirectory'), - environment: anyNamed('environment'), - )).called(1); + expect(fakeProcessManager, hasNoRemainingExpectations); }, overrides: { Platform: () => FakePlatform(environment: { 'FLUTTER_GIT_URL': 'https://githubmirror.com/flutter.git', @@ -873,5 +803,4 @@ void fakeData( } class MockProcessManager extends Mock implements ProcessManager {} -class MockProcessUtils extends Mock implements ProcessUtils {} class MockCache extends Mock implements Cache {} diff --git a/packages/flutter_tools/test/general.shard/web/devices_test.dart b/packages/flutter_tools/test/general.shard/web/devices_test.dart index d65d9cef95..f5a72d396e 100644 --- a/packages/flutter_tools/test/general.shard/web/devices_test.dart +++ b/packages/flutter_tools/test/general.shard/web/devices_test.dart @@ -14,6 +14,7 @@ import 'package:flutter_tools/src/web/web_device.dart'; import '../../src/common.dart'; import '../../src/context.dart'; +import '../../src/fake_process_manager.dart'; import '../../src/fakes.dart'; void main() { @@ -206,7 +207,7 @@ void main() { // Verify caching works correctly. expect(await chromeDevice.sdkNameAndVersion, 'ABC'); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }); testWithoutContext('Chrome and Edge version check invokes registry query on windows.', () async { @@ -252,7 +253,7 @@ void main() { // Verify caching works correctly. expect(await chromeDevice.sdkNameAndVersion, 'Google Chrome 74.0.0'); - expect(processManager.hasRemainingExpectations, false); + expect(processManager, hasNoRemainingExpectations); }); testWithoutContext('Edge is not supported on versions less than 73', () async { diff --git a/packages/flutter_tools/test/src/fake_process_manager.dart b/packages/flutter_tools/test/src/fake_process_manager.dart index 7e32b70766..65c298f6df 100644 --- a/packages/flutter_tools/test/src/fake_process_manager.dart +++ b/packages/flutter_tools/test/src/fake_process_manager.dart @@ -215,6 +215,9 @@ abstract class FakeProcessManager implements ProcessManager { /// This is always `true` for [FakeProcessManager.any]. bool get hasRemainingExpectations; + /// The expected [FakeCommand]s that have not yet run. + List get _remainingExpectations; + @protected FakeCommand findCommand( List command, @@ -353,6 +356,9 @@ class _FakeAnyProcessManager extends FakeProcessManager { @override bool get hasRemainingExpectations => true; + + @override + List get _remainingExpectations => []; } class _SequenceProcessManager extends FakeProcessManager { @@ -382,4 +388,35 @@ class _SequenceProcessManager extends FakeProcessManager { @override bool get hasRemainingExpectations => _commands.isNotEmpty; + + @override + List get _remainingExpectations => _commands; +} + +/// Matcher that successfully matches against a [FakeProcessManager] with +/// no remaining expectations ([item.hasRemainingExpectations] returns false). +const Matcher hasNoRemainingExpectations = _HasNoRemainingExpectations(); + +class _HasNoRemainingExpectations extends Matcher { + const _HasNoRemainingExpectations(); + + @override + bool matches(dynamic item, Map matchState) => + item is FakeProcessManager && !item.hasRemainingExpectations; + + @override + Description describe(Description description) => + description.add('a fake process manager with no remaining expectations'); + + @override + Description describeMismatch( + dynamic item, + Description description, + Map matchState, + bool verbose, + ) { + final FakeProcessManager fakeProcessManager = item as FakeProcessManager; + return description.add( + 'has remaining expectations:\n${fakeProcessManager._remainingExpectations.map((FakeCommand command) => command.command).join('\n')}'); + } }