Add canRun override to FakeProcessManager (#74865)

This commit is contained in:
Jenn Magder 2021-01-28 19:06:56 -08:00 committed by GitHub
parent 904d63fbd6
commit dbb1958c5e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 17 additions and 31 deletions

View file

@ -55,10 +55,12 @@ final Platform macPlatform = FakePlatform(
void main() { void main() {
MockFlutterVersion mockFlutterVersion; MockFlutterVersion mockFlutterVersion;
BufferLogger logger; BufferLogger logger;
FakeProcessManager fakeProcessManager;
setUp(() { setUp(() {
mockFlutterVersion = MockFlutterVersion(); mockFlutterVersion = MockFlutterVersion();
logger = BufferLogger.test(); logger = BufferLogger.test();
fakeProcessManager = FakeProcessManager.list(<FakeCommand>[]);
}); });
testWithoutContext('ValidationMessage equality and hashCode includes contextUrl', () { testWithoutContext('ValidationMessage equality and hashCode includes contextUrl', () {
@ -597,7 +599,6 @@ void main() {
}, overrides: noColorTerminalOverride); }, overrides: noColorTerminalOverride);
}); });
group('grouped validator merging results', () { group('grouped validator merging results', () {
final PassingGroupedValidator installed = PassingGroupedValidator('Category'); final PassingGroupedValidator installed = PassingGroupedValidator('Category');
final PartialGroupedValidator partial = PartialGroupedValidator('Category'); final PartialGroupedValidator partial = PartialGroupedValidator('Category');
@ -650,14 +651,12 @@ void main() {
}); });
testUsingContext('WebWorkflow is a part of validator workflows if enabled', () async { testUsingContext('WebWorkflow is a part of validator workflows if enabled', () async {
when(globals.processManager.canRun(any)).thenReturn(true);
expect(DoctorValidatorsProvider.defaultInstance.workflows, expect(DoctorValidatorsProvider.defaultInstance.workflows,
contains(isA<WebWorkflow>())); contains(isA<WebWorkflow>()));
}, overrides: <Type, Generator>{ }, overrides: <Type, Generator>{
FeatureFlags: () => TestFeatureFlags(isWebEnabled: true), FeatureFlags: () => TestFeatureFlags(isWebEnabled: true),
FileSystem: () => MemoryFileSystem.test(), FileSystem: () => MemoryFileSystem.test(),
ProcessManager: () => MockProcessManager(), ProcessManager: () => fakeProcessManager,
}); });
testUsingContext('Fetches tags to get the right version', () async { testUsingContext('Fetches tags to get the right version', () async {
@ -1046,7 +1045,6 @@ class VsCodeValidatorTestTargets extends VsCodeValidator {
static final String missingExtensions = globals.fs.path.join('test', 'data', 'vscode', 'notExtensions'); static final String missingExtensions = globals.fs.path.join('test', 'data', 'vscode', 'notExtensions');
} }
class MockProcessManager extends Mock implements ProcessManager {}
class MockPlistParser extends Mock implements PlistParser {} class MockPlistParser extends Mock implements PlistParser {}
class MockDeviceManager extends Mock implements DeviceManager {} class MockDeviceManager extends Mock implements DeviceManager {}
class MockDevice extends Mock implements Device { class MockDevice extends Mock implements Device {

View file

@ -47,15 +47,16 @@ void main() {
}); });
testWithoutContext('AndroidDevices returns empty device list and diagnostics when adb cannot be run', () async { testWithoutContext('AndroidDevices returns empty device list and diagnostics when adb cannot be run', () async {
final FakeProcessManager fakeProcessManager = FakeProcessManager.list(<FakeCommand>[]);
fakeProcessManager.excludedExecutables.add('adb');
final AndroidDevices androidDevices = AndroidDevices( final AndroidDevices androidDevices = AndroidDevices(
androidSdk: FakeAndroidSdk(null), androidSdk: FakeAndroidSdk(),
logger: BufferLogger.test(), logger: BufferLogger.test(),
androidWorkflow: AndroidWorkflow( androidWorkflow: AndroidWorkflow(
androidSdk: FakeAndroidSdk('adb'), androidSdk: FakeAndroidSdk('adb'),
featureFlags: TestFeatureFlags(), featureFlags: TestFeatureFlags(),
), ),
// Will throw an exception if anything other than canRun is invoked processManager: fakeProcessManager,
processManager: FakeProcessManger(),
fileSystem: MemoryFileSystem.test(), fileSystem: MemoryFileSystem.test(),
platform: FakePlatform(), platform: FakePlatform(),
userMessages: UserMessages(), userMessages: UserMessages(),
@ -63,6 +64,7 @@ void main() {
expect(await androidDevices.pollingGetDevices(), isEmpty); expect(await androidDevices.pollingGetDevices(), isEmpty);
expect(await androidDevices.getDiagnostics(), isEmpty); expect(await androidDevices.getDiagnostics(), isEmpty);
expect(fakeProcessManager.hasRemainingExpectations, isFalse);
}); });
testWithoutContext('AndroidDevices returns empty device list and diagnostics on null Android SDK', () async { testWithoutContext('AndroidDevices returns empty device list and diagnostics on null Android SDK', () async {
@ -239,10 +241,3 @@ class FakeAndroidSdk extends Fake implements AndroidSdk {
@override @override
final String adbPath; final String adbPath;
} }
class FakeProcessManger extends Fake implements ProcessManager {
@override
bool canRun(dynamic executable, {String workingDirectory}) {
return false;
}
}

View file

@ -763,11 +763,7 @@ class FakeDownloadedArtifact extends CachedArtifact {
} }
class MockArtifactUpdater extends Mock implements ArtifactUpdater {} class MockArtifactUpdater extends Mock implements ArtifactUpdater {}
class MockProcessManager extends Mock implements ProcessManager {}
class MockFileSystem extends Mock implements FileSystem {}
class MockFile extends Mock implements File {} class MockFile extends Mock implements File {}
class MockDirectory extends Mock implements Directory {}
class MockRandomAccessFile extends Mock implements RandomAccessFile {}
class MockCachedArtifact extends Mock implements CachedArtifact {} class MockCachedArtifact extends Mock implements CachedArtifact {}
class MockIosUsbArtifacts extends Mock implements IosUsbArtifacts {} class MockIosUsbArtifacts extends Mock implements IosUsbArtifacts {}
class MockInternetAddress extends Mock implements InternetAddress {} class MockInternetAddress extends Mock implements InternetAddress {}

View file

@ -11,22 +11,20 @@ import 'package:flutter_tools/src/base/platform.dart';
import 'package:flutter_tools/src/doctor.dart'; import 'package:flutter_tools/src/doctor.dart';
import 'package:flutter_tools/src/web/chrome.dart'; import 'package:flutter_tools/src/web/chrome.dart';
import 'package:flutter_tools/src/web/web_validator.dart'; import 'package:flutter_tools/src/web/web_validator.dart';
import 'package:mockito/mockito.dart';
import 'package:process/process.dart';
import '../../src/common.dart'; import '../../src/common.dart';
import '../../src/fake_process_manager.dart'; import '../../src/fake_process_manager.dart';
void main() { void main() {
Platform platform; Platform platform;
ProcessManager processManager; FakeProcessManager fakeProcessManager;
ChromiumLauncher chromeLauncher; ChromiumLauncher chromeLauncher;
FileSystem fileSystem; FileSystem fileSystem;
ChromiumValidator webValidator; ChromiumValidator webValidator;
setUp(() { setUp(() {
fileSystem = MemoryFileSystem.test(); fileSystem = MemoryFileSystem.test();
processManager = MockProcessManager(); fakeProcessManager = FakeProcessManager.list(<FakeCommand>[]);
platform = FakePlatform( platform = FakePlatform(
operatingSystem: 'macos', operatingSystem: 'macos',
environment: <String, String>{}, environment: <String, String>{},
@ -34,7 +32,7 @@ void main() {
chromeLauncher = ChromiumLauncher( chromeLauncher = ChromiumLauncher(
fileSystem: fileSystem, fileSystem: fileSystem,
platform: platform, platform: platform,
processManager: processManager, processManager: fakeProcessManager,
operatingSystemUtils: null, operatingSystemUtils: null,
browserFinder: findChromeExecutable, browserFinder: findChromeExecutable,
logger: BufferLogger.test(), logger: BufferLogger.test(),
@ -46,15 +44,13 @@ void main() {
}); });
testWithoutContext('WebValidator can find executable on macOS', () async { testWithoutContext('WebValidator can find executable on macOS', () async {
when(processManager.canRun(kMacOSExecutable)).thenReturn(true);
final ValidationResult result = await webValidator.validate(); final ValidationResult result = await webValidator.validate();
expect(result.type, ValidationType.installed); expect(result.type, ValidationType.installed);
}); });
testWithoutContext('WebValidator Can notice missing macOS executable ', () async { testWithoutContext('WebValidator Can notice missing macOS executable ', () async {
when(processManager.canRun(kMacOSExecutable)).thenReturn(false); fakeProcessManager.excludedExecutables.add(kMacOSExecutable);
final ValidationResult result = await webValidator.validate(); final ValidationResult result = await webValidator.validate();
@ -62,7 +58,7 @@ void main() {
}); });
testWithoutContext('WebValidator does not warn about CHROME_EXECUTABLE unless it cant find chrome ', () async { testWithoutContext('WebValidator does not warn about CHROME_EXECUTABLE unless it cant find chrome ', () async {
when(processManager.canRun(kMacOSExecutable)).thenReturn(false); fakeProcessManager.excludedExecutables.add(kMacOSExecutable);
final ValidationResult result = await webValidator.validate(); final ValidationResult result = await webValidator.validate();
@ -73,5 +69,3 @@ void main() {
expect(result.type, ValidationType.missing); expect(result.type, ValidationType.missing);
}); });
} }
class MockProcessManager extends Mock implements ProcessManager {}

View file

@ -301,8 +301,11 @@ abstract class FakeProcessManager implements ProcessManager {
); );
} }
/// Returns false if executable in [excludedExecutables].
@override @override
bool canRun(dynamic executable, {String workingDirectory}) => true; bool canRun(dynamic executable, {String workingDirectory}) => !excludedExecutables.contains(executable);
Set<String> excludedExecutables = <String>{};
@override @override
bool killPid(int pid, [io.ProcessSignal signal = io.ProcessSignal.sigterm]) { bool killPid(int pid, [io.ProcessSignal signal = io.ProcessSignal.sigterm]) {