Unverified Commit a99fba01 authored by Jenn Magder's avatar Jenn Magder Committed by GitHub

Move FakeOperatingSystemUtils from context.dart to fakes.dart (#80916)

parent 77504823
...@@ -24,6 +24,7 @@ import 'package:process/process.dart'; ...@@ -24,6 +24,7 @@ import 'package:process/process.dart';
import '../../src/common.dart'; import '../../src/common.dart';
import '../../src/context.dart'; import '../../src/context.dart';
import '../../src/fakes.dart';
import '../../src/test_flutter_command_runner.dart'; import '../../src/test_flutter_command_runner.dart';
final Platform _kNoColorTerminalPlatform = FakePlatform(stdoutSupportsAnsi: false); final Platform _kNoColorTerminalPlatform = FakePlatform(stdoutSupportsAnsi: false);
......
...@@ -17,7 +17,6 @@ import 'package:flutter_tools/src/doctor_validator.dart'; ...@@ -17,7 +17,6 @@ import 'package:flutter_tools/src/doctor_validator.dart';
import 'package:mockito/mockito.dart'; import 'package:mockito/mockito.dart';
import '../../src/common.dart'; import '../../src/common.dart';
import '../../src/context.dart';
import '../../src/fakes.dart'; import '../../src/fakes.dart';
import '../../src/mocks.dart' show MockAndroidSdk, MockProcessManager; import '../../src/mocks.dart' show MockAndroidSdk, MockProcessManager;
......
...@@ -12,7 +12,8 @@ import 'package:flutter_tools/src/base/platform.dart'; ...@@ -12,7 +12,8 @@ import 'package:flutter_tools/src/base/platform.dart';
import 'package:flutter_tools/src/cache.dart'; import 'package:flutter_tools/src/cache.dart';
import 'package:flutter_tools/src/project.dart'; import 'package:flutter_tools/src/project.dart';
import '../../src/common.dart'; import '../../src/common.dart';
import '../../src/context.dart'; import '../../src/fake_process_manager.dart';
import '../../src/fakes.dart';
void main() { void main() {
group('injectGradleWrapperIfNeeded', () { group('injectGradleWrapperIfNeeded', () {
......
...@@ -13,7 +13,8 @@ import 'package:flutter_tools/src/build_info.dart'; ...@@ -13,7 +13,8 @@ import 'package:flutter_tools/src/build_info.dart';
import 'package:flutter_tools/src/cache.dart'; import 'package:flutter_tools/src/cache.dart';
import '../src/common.dart'; import '../src/common.dart';
import '../src/context.dart'; import '../src/fake_process_manager.dart';
import '../src/fakes.dart';
void main() { void main() {
group('CachedArtifacts', () { group('CachedArtifacts', () {
......
...@@ -21,9 +21,9 @@ import 'package:mockito/mockito.dart'; ...@@ -21,9 +21,9 @@ import 'package:mockito/mockito.dart';
import 'package:package_config/package_config.dart'; import 'package:package_config/package_config.dart';
import '../src/common.dart'; import '../src/common.dart';
import '../src/context.dart';
import '../src/fake_http_client.dart'; import '../src/fake_http_client.dart';
import '../src/fake_vm_services.dart'; import '../src/fake_vm_services.dart';
import '../src/fakes.dart';
final FakeVmServiceRequest createDevFSRequest = FakeVmServiceRequest( final FakeVmServiceRequest createDevFSRequest = FakeVmServiceRequest(
method: '_createDevFS', method: '_createDevFS',
......
...@@ -42,6 +42,7 @@ import 'package:vm_service/vm_service.dart' as vm_service; ...@@ -42,6 +42,7 @@ import 'package:vm_service/vm_service.dart' as vm_service;
import '../../src/common.dart'; import '../../src/common.dart';
import '../../src/context.dart'; import '../../src/context.dart';
import '../../src/fake_vm_services.dart'; import '../../src/fake_vm_services.dart';
import '../../src/fakes.dart';
final vm_service.Isolate fakeIsolate = vm_service.Isolate( final vm_service.Isolate fakeIsolate = vm_service.Isolate(
id: '1', id: '1',
......
...@@ -8,8 +8,8 @@ import 'package:flutter_tools/src/base/logger.dart'; ...@@ -8,8 +8,8 @@ import 'package:flutter_tools/src/base/logger.dart';
import 'package:flutter_tools/src/ios/devices.dart'; import 'package:flutter_tools/src/ios/devices.dart';
import '../../src/common.dart'; import '../../src/common.dart';
import '../../src/context.dart';
import '../../src/fake_process_manager.dart'; import '../../src/fake_process_manager.dart';
import '../../src/fakes.dart';
const Map<String, String> kDyLdLibEntry = <String, String>{ const Map<String, String> kDyLdLibEntry = <String, String>{
'DYLD_LIBRARY_PATH': '/path/to/libs', 'DYLD_LIBRARY_PATH': '/path/to/libs',
......
...@@ -10,19 +10,18 @@ import 'package:flutter_tools/src/artifacts.dart'; ...@@ -10,19 +10,18 @@ import 'package:flutter_tools/src/artifacts.dart';
import 'package:flutter_tools/src/base/file_system.dart'; import 'package:flutter_tools/src/base/file_system.dart';
import 'package:flutter_tools/src/base/logger.dart'; import 'package:flutter_tools/src/base/logger.dart';
import 'package:flutter_tools/src/base/process.dart'; import 'package:flutter_tools/src/base/process.dart';
import 'package:flutter_tools/src/build_info.dart';
import 'package:flutter_tools/src/cache.dart'; import 'package:flutter_tools/src/cache.dart';
import 'package:flutter_tools/src/ios/devices.dart'; import 'package:flutter_tools/src/ios/devices.dart';
import 'package:flutter_tools/src/ios/mac.dart'; import 'package:flutter_tools/src/ios/mac.dart';
import 'package:flutter_tools/src/project.dart'; import 'package:flutter_tools/src/project.dart';
import 'package:flutter_tools/src/reporting/reporting.dart'; import 'package:flutter_tools/src/reporting/reporting.dart';
import 'package:mockito/mockito.dart'; import 'package:test/fake.dart';
import '../../src/common.dart'; import '../../src/common.dart';
import '../../src/fake_process_manager.dart'; import '../../src/fake_process_manager.dart';
import '../../src/fakes.dart'; import '../../src/fakes.dart';
class MockIosProject extends Mock implements IosProject {}
void main() { void main() {
BufferLogger logger; BufferLogger logger;
...@@ -414,12 +413,9 @@ Exited (sigterm)''', ...@@ -414,12 +413,9 @@ Exited (sigterm)''',
'another line'; 'another line';
testWithoutContext('upgradePbxProjWithFlutterAssets', () async { testWithoutContext('upgradePbxProjWithFlutterAssets', () async {
final MockIosProject project = MockIosProject();
final File pbxprojFile = MemoryFileSystem.test().file('project.pbxproj') final File pbxprojFile = MemoryFileSystem.test().file('project.pbxproj')
..writeAsStringSync(flutterAssetPbxProjLines); ..writeAsStringSync(flutterAssetPbxProjLines);
final FakeIosProject project = FakeIosProject(pbxprojFile);
when(project.xcodeProjectInfoFile).thenReturn(pbxprojFile);
when(project.hostAppBundleName(any)).thenAnswer((_) => Future<String>.value('UnitTestRunner.app'));
bool result = upgradePbxProjWithFlutterAssets(project, logger); bool result = upgradePbxProjWithFlutterAssets(project, logger);
expect(result, true); expect(result, true);
...@@ -488,3 +484,15 @@ Exited (sigterm)''', ...@@ -488,3 +484,15 @@ Exited (sigterm)''',
}); });
}); });
} }
class FakeIosProject extends Fake implements IosProject {
FakeIosProject(this.xcodeProjectInfoFile);
@override
final File xcodeProjectInfoFile;
@override
Future<String> hostAppBundleName(BuildInfo buildInfo) async => 'UnitTestRunner.app';
@override
final Directory xcodeProject = null;
}
...@@ -2,8 +2,6 @@ ...@@ -2,8 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
// @dart = 2.8
import 'package:file/memory.dart'; import 'package:file/memory.dart';
import 'package:flutter_tools/src/base/file_system.dart'; import 'package:flutter_tools/src/base/file_system.dart';
import 'package:flutter_tools/src/convert.dart'; import 'package:flutter_tools/src/convert.dart';
...@@ -241,8 +239,8 @@ const String _kApacheLicense = r''' ...@@ -241,8 +239,8 @@ const String _kApacheLicense = r'''
'''; ''';
void main() { void main() {
FileSystem fileSystem; late FileSystem fileSystem;
LicenseCollector licenseCollector; late LicenseCollector licenseCollector;
setUp(() { setUp(() {
fileSystem = MemoryFileSystem.test(); fileSystem = MemoryFileSystem.test();
......
...@@ -25,8 +25,8 @@ import 'package:mockito/mockito.dart'; ...@@ -25,8 +25,8 @@ import 'package:mockito/mockito.dart';
import 'package:yaml/yaml.dart'; import 'package:yaml/yaml.dart';
import '../src/common.dart'; import '../src/common.dart';
import '../src/context.dart' hide FakeOperatingSystemUtils; import '../src/context.dart';
import '../src/fakes.dart'; import '../src/fakes.dart' hide FakeOperatingSystemUtils;
import '../src/pubspec_schema.dart'; import '../src/pubspec_schema.dart';
void main() { void main() {
......
...@@ -2,8 +2,6 @@ ...@@ -2,8 +2,6 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
// @dart = 2.8
import 'dart:async'; import 'dart:async';
import 'package:file/memory.dart'; import 'package:file/memory.dart';
...@@ -14,7 +12,8 @@ import 'package:flutter_tools/src/base/platform.dart'; ...@@ -14,7 +12,8 @@ import 'package:flutter_tools/src/base/platform.dart';
import 'package:flutter_tools/src/web/chrome.dart'; import 'package:flutter_tools/src/web/chrome.dart';
import '../../src/common.dart'; import '../../src/common.dart';
import '../../src/context.dart'; import '../../src/fake_process_manager.dart';
import '../../src/fakes.dart';
const List<String> kChromeArgs = <String>[ const List<String> kChromeArgs = <String>[
'--disable-background-timer-throttling', '--disable-background-timer-throttling',
...@@ -30,12 +29,12 @@ const List<String> kChromeArgs = <String>[ ...@@ -30,12 +29,12 @@ const List<String> kChromeArgs = <String>[
const String kDevtoolsStderr = '\n\nDevTools listening\n\n'; const String kDevtoolsStderr = '\n\nDevTools listening\n\n';
void main() { void main() {
FileExceptionHandler exceptionHandler; late FileExceptionHandler exceptionHandler;
ChromiumLauncher chromeLauncher; late ChromiumLauncher chromeLauncher;
FileSystem fileSystem; late FileSystem fileSystem;
Platform platform; late Platform platform;
FakeProcessManager processManager; late FakeProcessManager processManager;
OperatingSystemUtils operatingSystemUtils; late OperatingSystemUtils operatingSystemUtils;
setUp(() { setUp(() {
exceptionHandler = FileExceptionHandler(); exceptionHandler = FileExceptionHandler();
......
...@@ -2,13 +2,11 @@ ...@@ -2,13 +2,11 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
// @dart = 2.8
import 'package:flutter_tools/src/base/user_messages.dart' hide userMessages; import 'package:flutter_tools/src/base/user_messages.dart' hide userMessages;
import 'package:flutter_tools/src/doctor_validator.dart'; import 'package:flutter_tools/src/doctor_validator.dart';
import 'package:flutter_tools/src/windows/visual_studio.dart'; import 'package:flutter_tools/src/windows/visual_studio.dart';
import 'package:flutter_tools/src/windows/visual_studio_validator.dart'; import 'package:flutter_tools/src/windows/visual_studio_validator.dart';
import 'package:mockito/mockito.dart'; import 'package:test/fake.dart';
import '../../src/common.dart'; import '../../src/common.dart';
...@@ -16,63 +14,50 @@ final UserMessages userMessages = UserMessages(); ...@@ -16,63 +14,50 @@ final UserMessages userMessages = UserMessages();
void main() { void main() {
group('Visual Studio validation', () { group('Visual Studio validation', () {
MockVisualStudio mockVisualStudio; late FakeVisualStudio fakeVisualStudio;
setUp(() { setUp(() {
mockVisualStudio = MockVisualStudio(); fakeVisualStudio = FakeVisualStudio();
// Default values regardless of whether VS is installed or not.
when(mockVisualStudio.workloadDescription).thenReturn('Desktop development');
when(mockVisualStudio.minimumVersionDescription).thenReturn('2019');
when(mockVisualStudio.necessaryComponentDescriptions()).thenReturn(<String>['A', 'B']);
}); });
// Assigns default values for a complete VS installation with necessary components. // Assigns default values for a complete VS installation with necessary components.
void _configureMockVisualStudioAsInstalled() { void _configureMockVisualStudioAsInstalled() {
when(mockVisualStudio.isInstalled).thenReturn(true); fakeVisualStudio.isPrerelease = false;
when(mockVisualStudio.isAtLeastMinimumVersion).thenReturn(true); fakeVisualStudio.isRebootRequired = false;
when(mockVisualStudio.isPrerelease).thenReturn(false); fakeVisualStudio.fullVersion = '16.2';
when(mockVisualStudio.isComplete).thenReturn(true); fakeVisualStudio.displayName = 'Visual Studio Community 2019';
when(mockVisualStudio.isLaunchable).thenReturn(true); fakeVisualStudio.windows10SDKVersion = '10.0.18362.0';
when(mockVisualStudio.isRebootRequired).thenReturn(false);
when(mockVisualStudio.hasNecessaryComponents).thenReturn(true);
when(mockVisualStudio.fullVersion).thenReturn('16.2');
when(mockVisualStudio.displayName).thenReturn('Visual Studio Community 2019');
when(mockVisualStudio.getWindows10SDKVersion()).thenReturn('10.0.18362.0');
} }
// Assigns default values for a complete VS installation that is too old. // Assigns default values for a complete VS installation that is too old.
void _configureMockVisualStudioAsTooOld() { void _configureMockVisualStudioAsTooOld() {
when(mockVisualStudio.isInstalled).thenReturn(true); fakeVisualStudio.isAtLeastMinimumVersion = false;
when(mockVisualStudio.isAtLeastMinimumVersion).thenReturn(false); fakeVisualStudio.isPrerelease = false;
when(mockVisualStudio.isPrerelease).thenReturn(false); fakeVisualStudio.isRebootRequired = false;
when(mockVisualStudio.isComplete).thenReturn(true); fakeVisualStudio.fullVersion = '15.1';
when(mockVisualStudio.isLaunchable).thenReturn(true); fakeVisualStudio.displayName = 'Visual Studio Community 2017';
when(mockVisualStudio.isRebootRequired).thenReturn(false); fakeVisualStudio.windows10SDKVersion = '10.0.17763.0';
when(mockVisualStudio.hasNecessaryComponents).thenReturn(true);
when(mockVisualStudio.fullVersion).thenReturn('15.1');
when(mockVisualStudio.displayName).thenReturn('Visual Studio Community 2017');
when(mockVisualStudio.getWindows10SDKVersion()).thenReturn('10.0.17763.0');
} }
// Assigns default values for a missing VS installation. // Assigns default values for a missing VS installation.
void _configureMockVisualStudioAsNotInstalled() { void _configureMockVisualStudioAsNotInstalled() {
when(mockVisualStudio.isInstalled).thenReturn(false); fakeVisualStudio.isInstalled = false;
when(mockVisualStudio.isAtLeastMinimumVersion).thenReturn(false); fakeVisualStudio.isAtLeastMinimumVersion = false;
when(mockVisualStudio.isPrerelease).thenReturn(false); fakeVisualStudio.isPrerelease = false;
when(mockVisualStudio.isComplete).thenReturn(false); fakeVisualStudio.isComplete = false;
when(mockVisualStudio.isLaunchable).thenReturn(false); fakeVisualStudio.isLaunchable = false;
when(mockVisualStudio.isRebootRequired).thenReturn(false); fakeVisualStudio.isRebootRequired = false;
when(mockVisualStudio.hasNecessaryComponents).thenReturn(false); fakeVisualStudio.hasNecessaryComponents = false;
when(mockVisualStudio.getWindows10SDKVersion()).thenReturn(null); fakeVisualStudio.windows10SDKVersion = null;
} }
testWithoutContext('Emits a message when Visual Studio is a pre-release version', () async { testWithoutContext('Emits a message when Visual Studio is a pre-release version', () async {
final VisualStudioValidator validator = VisualStudioValidator( final VisualStudioValidator validator = VisualStudioValidator(
userMessages: userMessages, userMessages: userMessages,
visualStudio: mockVisualStudio, visualStudio: fakeVisualStudio,
); );
_configureMockVisualStudioAsInstalled(); _configureMockVisualStudioAsInstalled();
when(mockVisualStudio.isPrerelease).thenReturn(true); fakeVisualStudio.isPrerelease = true;
final ValidationResult result = await validator.validate(); final ValidationResult result = await validator.validate();
final ValidationMessage expectedMessage = ValidationMessage(userMessages.visualStudioIsPrerelease); final ValidationMessage expectedMessage = ValidationMessage(userMessages.visualStudioIsPrerelease);
...@@ -83,10 +68,10 @@ void main() { ...@@ -83,10 +68,10 @@ void main() {
testWithoutContext('Emits a partial status when Visual Studio installation is incomplete', () async { testWithoutContext('Emits a partial status when Visual Studio installation is incomplete', () async {
final VisualStudioValidator validator = VisualStudioValidator( final VisualStudioValidator validator = VisualStudioValidator(
userMessages: userMessages, userMessages: userMessages,
visualStudio: mockVisualStudio, visualStudio: fakeVisualStudio,
); );
_configureMockVisualStudioAsInstalled(); _configureMockVisualStudioAsInstalled();
when(mockVisualStudio.isComplete).thenReturn(false); fakeVisualStudio.isComplete = false;
final ValidationResult result = await validator.validate(); final ValidationResult result = await validator.validate();
final ValidationMessage expectedMessage = ValidationMessage.error(userMessages.visualStudioIsIncomplete); final ValidationMessage expectedMessage = ValidationMessage.error(userMessages.visualStudioIsIncomplete);
...@@ -98,10 +83,10 @@ void main() { ...@@ -98,10 +83,10 @@ void main() {
testWithoutContext('Emits a partial status when Visual Studio installation needs rebooting', () async { testWithoutContext('Emits a partial status when Visual Studio installation needs rebooting', () async {
final VisualStudioValidator validator = VisualStudioValidator( final VisualStudioValidator validator = VisualStudioValidator(
userMessages: userMessages, userMessages: userMessages,
visualStudio: mockVisualStudio, visualStudio: fakeVisualStudio,
); );
_configureMockVisualStudioAsInstalled(); _configureMockVisualStudioAsInstalled();
when(mockVisualStudio.isRebootRequired).thenReturn(true); fakeVisualStudio.isRebootRequired = true;
final ValidationResult result = await validator.validate(); final ValidationResult result = await validator.validate();
final ValidationMessage expectedMessage = ValidationMessage.error(userMessages.visualStudioRebootRequired); final ValidationMessage expectedMessage = ValidationMessage.error(userMessages.visualStudioRebootRequired);
...@@ -113,10 +98,10 @@ void main() { ...@@ -113,10 +98,10 @@ void main() {
testWithoutContext('Emits a partial status when Visual Studio installation is not launchable', () async { testWithoutContext('Emits a partial status when Visual Studio installation is not launchable', () async {
final VisualStudioValidator validator = VisualStudioValidator( final VisualStudioValidator validator = VisualStudioValidator(
userMessages: userMessages, userMessages: userMessages,
visualStudio: mockVisualStudio, visualStudio: fakeVisualStudio,
); );
_configureMockVisualStudioAsInstalled(); _configureMockVisualStudioAsInstalled();
when(mockVisualStudio.isLaunchable).thenReturn(false); fakeVisualStudio.isLaunchable = false;
final ValidationResult result = await validator.validate(); final ValidationResult result = await validator.validate();
final ValidationMessage expectedMessage = ValidationMessage.error(userMessages.visualStudioNotLaunchable); final ValidationMessage expectedMessage = ValidationMessage.error(userMessages.visualStudioNotLaunchable);
...@@ -128,15 +113,15 @@ void main() { ...@@ -128,15 +113,15 @@ void main() {
testWithoutContext('Emits partial status when Visual Studio is installed but too old', () async { testWithoutContext('Emits partial status when Visual Studio is installed but too old', () async {
final VisualStudioValidator validator = VisualStudioValidator( final VisualStudioValidator validator = VisualStudioValidator(
userMessages: userMessages, userMessages: userMessages,
visualStudio: mockVisualStudio, visualStudio: fakeVisualStudio,
); );
_configureMockVisualStudioAsTooOld(); _configureMockVisualStudioAsTooOld();
final ValidationResult result = await validator.validate(); final ValidationResult result = await validator.validate();
final ValidationMessage expectedMessage = ValidationMessage.error( final ValidationMessage expectedMessage = ValidationMessage.error(
userMessages.visualStudioTooOld( userMessages.visualStudioTooOld(
mockVisualStudio.minimumVersionDescription, fakeVisualStudio.minimumVersionDescription,
mockVisualStudio.workloadDescription, fakeVisualStudio.workloadDescription,
), ),
); );
...@@ -147,10 +132,10 @@ void main() { ...@@ -147,10 +132,10 @@ void main() {
testWithoutContext('Emits partial status when Visual Studio is installed without necessary components', () async { testWithoutContext('Emits partial status when Visual Studio is installed without necessary components', () async {
final VisualStudioValidator validator = VisualStudioValidator( final VisualStudioValidator validator = VisualStudioValidator(
userMessages: userMessages, userMessages: userMessages,
visualStudio: mockVisualStudio, visualStudio: fakeVisualStudio,
); );
_configureMockVisualStudioAsInstalled(); _configureMockVisualStudioAsInstalled();
when(mockVisualStudio.hasNecessaryComponents).thenReturn(false); fakeVisualStudio.hasNecessaryComponents = false;
final ValidationResult result = await validator.validate(); final ValidationResult result = await validator.validate();
expect(result.type, ValidationType.partial); expect(result.type, ValidationType.partial);
...@@ -159,10 +144,10 @@ void main() { ...@@ -159,10 +144,10 @@ void main() {
testWithoutContext('Emits partial status when Visual Studio is installed but the SDK cannot be found', () async { testWithoutContext('Emits partial status when Visual Studio is installed but the SDK cannot be found', () async {
final VisualStudioValidator validator = VisualStudioValidator( final VisualStudioValidator validator = VisualStudioValidator(
userMessages: userMessages, userMessages: userMessages,
visualStudio: mockVisualStudio, visualStudio: fakeVisualStudio,
); );
_configureMockVisualStudioAsInstalled(); _configureMockVisualStudioAsInstalled();
when(mockVisualStudio.getWindows10SDKVersion()).thenReturn(null); fakeVisualStudio.windows10SDKVersion = null;
final ValidationResult result = await validator.validate(); final ValidationResult result = await validator.validate();
expect(result.type, ValidationType.partial); expect(result.type, ValidationType.partial);
...@@ -171,13 +156,13 @@ void main() { ...@@ -171,13 +156,13 @@ void main() {
testWithoutContext('Emits installed status when Visual Studio is installed with necessary components', () async { testWithoutContext('Emits installed status when Visual Studio is installed with necessary components', () async {
final VisualStudioValidator validator = VisualStudioValidator( final VisualStudioValidator validator = VisualStudioValidator(
userMessages: userMessages, userMessages: userMessages,
visualStudio: mockVisualStudio, visualStudio: fakeVisualStudio,
); );
_configureMockVisualStudioAsInstalled(); _configureMockVisualStudioAsInstalled();
final ValidationResult result = await validator.validate(); final ValidationResult result = await validator.validate();
final ValidationMessage expectedDisplayNameMessage = ValidationMessage( final ValidationMessage expectedDisplayNameMessage = ValidationMessage(
userMessages.visualStudioVersion(mockVisualStudio.displayName, mockVisualStudio.fullVersion)); userMessages.visualStudioVersion(fakeVisualStudio.displayName!, fakeVisualStudio.fullVersion!));
expect(result.messages.contains(expectedDisplayNameMessage), true); expect(result.messages.contains(expectedDisplayNameMessage), true);
expect(result.type, ValidationType.installed); expect(result.type, ValidationType.installed);
...@@ -186,14 +171,14 @@ void main() { ...@@ -186,14 +171,14 @@ void main() {
testWithoutContext('Emits missing status when Visual Studio is not installed', () async { testWithoutContext('Emits missing status when Visual Studio is not installed', () async {
final VisualStudioValidator validator = VisualStudioValidator( final VisualStudioValidator validator = VisualStudioValidator(
userMessages: userMessages, userMessages: userMessages,
visualStudio: mockVisualStudio, visualStudio: fakeVisualStudio,
); );
_configureMockVisualStudioAsNotInstalled(); _configureMockVisualStudioAsNotInstalled();
final ValidationResult result = await validator.validate(); final ValidationResult result = await validator.validate();
final ValidationMessage expectedMessage = ValidationMessage.error( final ValidationMessage expectedMessage = ValidationMessage.error(
userMessages.visualStudioMissing( userMessages.visualStudioMissing(
mockVisualStudio.workloadDescription, fakeVisualStudio.workloadDescription,
), ),
); );
...@@ -203,4 +188,51 @@ void main() { ...@@ -203,4 +188,51 @@ void main() {
}); });
} }
class MockVisualStudio extends Mock implements VisualStudio {} class FakeVisualStudio extends Fake implements VisualStudio {
@override
final String installLocation = 'bogus';
@override
final String displayVersion = 'version';
@override
final String minimumVersionDescription = '2019';
@override
List<String> necessaryComponentDescriptions() => <String>['A', 'B'];
@override
bool isInstalled = true;
@override
bool isAtLeastMinimumVersion = true;
@override
bool isPrerelease = true;
@override
bool isComplete = true;
@override
bool isLaunchable = true;
@override
bool isRebootRequired = true;
@override
bool hasNecessaryComponents = true;
@override
String? fullVersion;
@override
String? displayName;
String? windows10SDKVersion;
@override
String? getWindows10SDKVersion() => windows10SDKVersion;
@override
String get workloadDescription => 'Desktop development';
}
...@@ -296,46 +296,6 @@ class MockSimControl extends Mock implements SimControl { ...@@ -296,46 +296,6 @@ class MockSimControl extends Mock implements SimControl {
} }
} }
class FakeOperatingSystemUtils implements OperatingSystemUtils {
FakeOperatingSystemUtils({this.hostPlatform = HostPlatform.linux_x64});
@override
ProcessResult makeExecutable(File file) => null;
@override
HostPlatform hostPlatform = HostPlatform.linux_x64;
@override
void chmod(FileSystemEntity entity, String mode) { }
@override
File which(String execName) => null;
@override
List<File> whichAll(String execName) => <File>[];
@override
File makePipe(String path) => null;
@override
void unzip(File file, Directory targetDirectory) { }
@override
void unpack(File gzippedTarFile, Directory targetDirectory) { }
@override
Stream<List<int>> gzipLevel1Stream(Stream<List<int>> stream) => stream;
@override
String get name => 'fake OS name and version';
@override
String get pathVarSeparator => ';';
@override
Future<int> findFreePort({bool ipv6 = false}) async => 12345;
}
class MockIOSSimulatorUtils extends Mock implements IOSSimulatorUtils {} class MockIOSSimulatorUtils extends Mock implements IOSSimulatorUtils {}
class FakeXcodeProjectInterpreter implements XcodeProjectInterpreter { class FakeXcodeProjectInterpreter implements XcodeProjectInterpreter {
......
...@@ -15,6 +15,7 @@ import 'package:flutter_tools/src/convert.dart'; ...@@ -15,6 +15,7 @@ import 'package:flutter_tools/src/convert.dart';
import 'package:flutter_tools/src/features.dart'; import 'package:flutter_tools/src/features.dart';
import 'package:flutter_tools/src/ios/plist_parser.dart'; import 'package:flutter_tools/src/ios/plist_parser.dart';
import 'package:flutter_tools/src/version.dart'; import 'package:flutter_tools/src/version.dart';
import 'package:test/fake.dart';
/// Environment with DYLD_LIBRARY_PATH=/path/to/libraries /// Environment with DYLD_LIBRARY_PATH=/path/to/libraries
class FakeDyldEnvironmentArtifact extends ArtifactSet { class FakeDyldEnvironmentArtifact extends ArtifactSet {
...@@ -493,3 +494,40 @@ class FakeStatusLogger extends DelegatingLogger { ...@@ -493,3 +494,40 @@ class FakeStatusLogger extends DelegatingLogger {
int progressIndicatorPadding = kDefaultStatusPadding, int progressIndicatorPadding = kDefaultStatusPadding,
}) => status; }) => status;
} }
class FakeOperatingSystemUtils extends Fake implements OperatingSystemUtils {
FakeOperatingSystemUtils({this.hostPlatform = HostPlatform.linux_x64});
@override
void makeExecutable(File file) { }
@override
HostPlatform hostPlatform = HostPlatform.linux_x64;
@override
void chmod(FileSystemEntity entity, String mode) { }
@override
File? which(String execName) => null;
@override
List<File> whichAll(String execName) => <File>[];
@override
void unzip(File file, Directory targetDirectory) { }
@override
void unpack(File gzippedTarFile, Directory targetDirectory) { }
@override
Stream<List<int>> gzipLevel1Stream(Stream<List<int>> stream) => stream;
@override
String get name => 'fake OS name and version';
@override
String get pathVarSeparator => ';';
@override
Future<int> findFreePort({bool ipv6 = false}) async => 12345;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment