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() {
MockFlutterVersion mockFlutterVersion;
BufferLogger logger;
FakeProcessManager fakeProcessManager;
setUp(() {
mockFlutterVersion = MockFlutterVersion();
logger = BufferLogger.test();
fakeProcessManager = FakeProcessManager.list(<FakeCommand>[]);
});
testWithoutContext('ValidationMessage equality and hashCode includes contextUrl', () {
@ -597,7 +599,6 @@ void main() {
}, overrides: noColorTerminalOverride);
});
group('grouped validator merging results', () {
final PassingGroupedValidator installed = PassingGroupedValidator('Category');
final PartialGroupedValidator partial = PartialGroupedValidator('Category');
@ -650,14 +651,12 @@ void main() {
});
testUsingContext('WebWorkflow is a part of validator workflows if enabled', () async {
when(globals.processManager.canRun(any)).thenReturn(true);
expect(DoctorValidatorsProvider.defaultInstance.workflows,
contains(isA<WebWorkflow>()));
}, overrides: <Type, Generator>{
FeatureFlags: () => TestFeatureFlags(isWebEnabled: true),
FileSystem: () => MemoryFileSystem.test(),
ProcessManager: () => MockProcessManager(),
ProcessManager: () => fakeProcessManager,
});
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');
}
class MockProcessManager extends Mock implements ProcessManager {}
class MockPlistParser extends Mock implements PlistParser {}
class MockDeviceManager extends Mock implements DeviceManager {}
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 {
final FakeProcessManager fakeProcessManager = FakeProcessManager.list(<FakeCommand>[]);
fakeProcessManager.excludedExecutables.add('adb');
final AndroidDevices androidDevices = AndroidDevices(
androidSdk: FakeAndroidSdk(null),
androidSdk: FakeAndroidSdk(),
logger: BufferLogger.test(),
androidWorkflow: AndroidWorkflow(
androidSdk: FakeAndroidSdk('adb'),
featureFlags: TestFeatureFlags(),
),
// Will throw an exception if anything other than canRun is invoked
processManager: FakeProcessManger(),
processManager: fakeProcessManager,
fileSystem: MemoryFileSystem.test(),
platform: FakePlatform(),
userMessages: UserMessages(),
@ -63,6 +64,7 @@ void main() {
expect(await androidDevices.pollingGetDevices(), isEmpty);
expect(await androidDevices.getDiagnostics(), isEmpty);
expect(fakeProcessManager.hasRemainingExpectations, isFalse);
});
testWithoutContext('AndroidDevices returns empty device list and diagnostics on null Android SDK', () async {
@ -239,10 +241,3 @@ class FakeAndroidSdk extends Fake implements AndroidSdk {
@override
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 MockProcessManager extends Mock implements ProcessManager {}
class MockFileSystem extends Mock implements FileSystem {}
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 MockIosUsbArtifacts extends Mock implements IosUsbArtifacts {}
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/web/chrome.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/fake_process_manager.dart';
void main() {
Platform platform;
ProcessManager processManager;
FakeProcessManager fakeProcessManager;
ChromiumLauncher chromeLauncher;
FileSystem fileSystem;
ChromiumValidator webValidator;
setUp(() {
fileSystem = MemoryFileSystem.test();
processManager = MockProcessManager();
fakeProcessManager = FakeProcessManager.list(<FakeCommand>[]);
platform = FakePlatform(
operatingSystem: 'macos',
environment: <String, String>{},
@ -34,7 +32,7 @@ void main() {
chromeLauncher = ChromiumLauncher(
fileSystem: fileSystem,
platform: platform,
processManager: processManager,
processManager: fakeProcessManager,
operatingSystemUtils: null,
browserFinder: findChromeExecutable,
logger: BufferLogger.test(),
@ -46,15 +44,13 @@ void main() {
});
testWithoutContext('WebValidator can find executable on macOS', () async {
when(processManager.canRun(kMacOSExecutable)).thenReturn(true);
final ValidationResult result = await webValidator.validate();
expect(result.type, ValidationType.installed);
});
testWithoutContext('WebValidator Can notice missing macOS executable ', () async {
when(processManager.canRun(kMacOSExecutable)).thenReturn(false);
fakeProcessManager.excludedExecutables.add(kMacOSExecutable);
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 {
when(processManager.canRun(kMacOSExecutable)).thenReturn(false);
fakeProcessManager.excludedExecutables.add(kMacOSExecutable);
final ValidationResult result = await webValidator.validate();
@ -73,5 +69,3 @@ void main() {
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
bool canRun(dynamic executable, {String workingDirectory}) => true;
bool canRun(dynamic executable, {String workingDirectory}) => !excludedExecutables.contains(executable);
Set<String> excludedExecutables = <String>{};
@override
bool killPid(int pid, [io.ProcessSignal signal = io.ProcessSignal.sigterm]) {