Unverified Commit 125451bc authored by Jenn Magder's avatar Jenn Magder Committed by GitHub

Migrate mac.dart to null safety (#88846)

parent a1cd3f45
This diff is collapsed.
...@@ -373,7 +373,7 @@ class XcodeProjectBuildContext { ...@@ -373,7 +373,7 @@ class XcodeProjectBuildContext {
/// ///
/// Represents the output of `xcodebuild -list`. /// Represents the output of `xcodebuild -list`.
class XcodeProjectInfo { class XcodeProjectInfo {
XcodeProjectInfo( const XcodeProjectInfo(
this.targets, this.targets,
this.buildConfigurations, this.buildConfigurations,
this.schemes, this.schemes,
......
...@@ -86,18 +86,88 @@ void main() { ...@@ -86,18 +86,88 @@ void main() {
BufferLogger logger; BufferLogger logger;
Xcode xcode; Xcode xcode;
FakeXcodeProjectInterpreter fakeXcodeProjectInterpreter; FakeXcodeProjectInterpreter fakeXcodeProjectInterpreter;
XcodeProjectInfo projectInfo;
setUp(() { setUp(() {
logger = BufferLogger.test(); logger = BufferLogger.test();
fileSystem = MemoryFileSystem.test(); fileSystem = MemoryFileSystem.test();
processManager = FakeProcessManager.empty(); processManager = FakeProcessManager.empty();
fakeXcodeProjectInterpreter = FakeXcodeProjectInterpreter(); projectInfo = XcodeProjectInfo(
<String>['Runner'],
<String>['Debug', 'Release'],
<String>['Runner'],
logger,
);
fakeXcodeProjectInterpreter = FakeXcodeProjectInterpreter(projectInfo: projectInfo);
xcode = Xcode.test(processManager: FakeProcessManager.any(), xcodeProjectInterpreter: fakeXcodeProjectInterpreter); xcode = Xcode.test(processManager: FakeProcessManager.any(), xcodeProjectInterpreter: fakeXcodeProjectInterpreter);
fileSystem.file('foo/.packages') fileSystem.file('foo/.packages')
..createSync(recursive: true) ..createSync(recursive: true)
..writeAsStringSync('\n'); ..writeAsStringSync('\n');
}); });
testUsingContext('missing TARGET_BUILD_DIR', () async {
final IOSDevice iosDevice = setUpIOSDevice(
fileSystem: fileSystem,
processManager: processManager,
logger: logger,
artifacts: artifacts,
);
setUpIOSProject(fileSystem);
final FlutterProject flutterProject = FlutterProject.fromDirectory(fileSystem.currentDirectory);
final BuildableIOSApp buildableIOSApp = BuildableIOSApp(flutterProject.ios, 'flutter', 'My Super Awesome App.app');
processManager.addCommand(FakeCommand(command: _xattrArgs(flutterProject)));
processManager.addCommand(const FakeCommand(command: kRunReleaseArgs));
final LaunchResult launchResult = await iosDevice.startApp(
buildableIOSApp,
debuggingOptions: DebuggingOptions.disabled(BuildInfo.release),
platformArgs: <String, Object>{},
);
expect(launchResult.started, false);
expect(logger.errorText, contains('Xcode build is missing expected TARGET_BUILD_DIR build setting'));
expect(processManager, hasNoRemainingExpectations);
}, overrides: <Type, Generator>{
ProcessManager: () => processManager,
FileSystem: () => fileSystem,
Logger: () => logger,
Platform: () => macPlatform,
XcodeProjectInterpreter: () => FakeXcodeProjectInterpreter(buildSettings: const <String, String>{
'WRAPPER_NAME': 'My Super Awesome App.app',
'DEVELOPMENT_TEAM': '3333CCCC33',
}, projectInfo: projectInfo),
Xcode: () => xcode,
});
testUsingContext('missing project info', () async {
final IOSDevice iosDevice = setUpIOSDevice(
fileSystem: fileSystem,
processManager: FakeProcessManager.any(),
logger: logger,
artifacts: artifacts,
);
setUpIOSProject(fileSystem);
final FlutterProject flutterProject = FlutterProject.fromDirectory(fileSystem.currentDirectory);
final BuildableIOSApp buildableIOSApp = BuildableIOSApp(flutterProject.ios, 'flutter', 'My Super Awesome App.app');
final LaunchResult launchResult = await iosDevice.startApp(
buildableIOSApp,
debuggingOptions: DebuggingOptions.disabled(BuildInfo.release),
platformArgs: <String, Object>{},
);
expect(launchResult.started, false);
expect(logger.errorText, contains('Xcode project not found'));
}, overrides: <Type, Generator>{
ProcessManager: () => FakeProcessManager.any(),
FileSystem: () => fileSystem,
Logger: () => logger,
Platform: () => macPlatform,
XcodeProjectInterpreter: () => FakeXcodeProjectInterpreter(projectInfo: null),
Xcode: () => xcode,
});
testUsingContext('with buildable app', () async { testUsingContext('with buildable app', () async {
final IOSDevice iosDevice = setUpIOSDevice( final IOSDevice iosDevice = setUpIOSDevice(
fileSystem: fileSystem, fileSystem: fileSystem,
...@@ -244,7 +314,8 @@ IOSDevice setUpIOSDevice({ ...@@ -244,7 +314,8 @@ IOSDevice setUpIOSDevice({
); );
logger ??= BufferLogger.test(); logger ??= BufferLogger.test();
return IOSDevice('123', return IOSDevice(
'123',
name: 'iPhone 1', name: 'iPhone 1',
sdkVersion: sdkVersion, sdkVersion: sdkVersion,
fileSystem: fileSystem ?? MemoryFileSystem.test(), fileSystem: fileSystem ?? MemoryFileSystem.test(),
...@@ -270,12 +341,27 @@ IOSDevice setUpIOSDevice({ ...@@ -270,12 +341,27 @@ IOSDevice setUpIOSDevice({
} }
class FakeXcodeProjectInterpreter extends Fake implements XcodeProjectInterpreter { class FakeXcodeProjectInterpreter extends Fake implements XcodeProjectInterpreter {
FakeXcodeProjectInterpreter({
@required this.projectInfo,
this.buildSettings = const <String, String>{
'TARGET_BUILD_DIR': 'build/ios/Release-iphoneos',
'WRAPPER_NAME': 'My Super Awesome App.app',
'DEVELOPMENT_TEAM': '3333CCCC33',
},
});
final Map<String, String> buildSettings;
final XcodeProjectInfo projectInfo;
@override @override
final bool isInstalled = true; final bool isInstalled = true;
@override @override
final Version version = Version(1000, 0, 0); final Version version = Version(1000, 0, 0);
@override
String get versionText => version.toString();
@override @override
List<String> xcrunCommand() => <String>['xcrun']; List<String> xcrunCommand() => <String>['xcrun'];
...@@ -283,23 +369,12 @@ class FakeXcodeProjectInterpreter extends Fake implements XcodeProjectInterprete ...@@ -283,23 +369,12 @@ class FakeXcodeProjectInterpreter extends Fake implements XcodeProjectInterprete
Future<XcodeProjectInfo> getInfo( Future<XcodeProjectInfo> getInfo(
String projectPath, { String projectPath, {
String projectFilename, String projectFilename,
}) async => }) async => projectInfo;
XcodeProjectInfo(
<String>['Runner'],
<String>['Debug', 'Release'],
<String>['Runner'],
BufferLogger.test(),
);
@override @override
Future<Map<String, String>> getBuildSettings( Future<Map<String, String>> getBuildSettings(
String projectPath, { String projectPath, {
@required XcodeProjectBuildContext buildContext, @required XcodeProjectBuildContext buildContext,
Duration timeout = const Duration(minutes: 1), Duration timeout = const Duration(minutes: 1),
}) async => }) async => buildSettings;
<String, String>{
'TARGET_BUILD_DIR': 'build/ios/Release-iphoneos',
'WRAPPER_NAME': 'My Super Awesome App.app',
'DEVELOPMENT_TEAM': '3333CCCC33',
};
} }
...@@ -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/file.dart'; import 'package:file/file.dart';
import 'package:file/memory.dart'; import 'package:file/memory.dart';
import 'package:flutter_tools/src/artifacts.dart'; import 'package:flutter_tools/src/artifacts.dart';
...@@ -23,15 +21,15 @@ import '../../src/fake_process_manager.dart'; ...@@ -23,15 +21,15 @@ import '../../src/fake_process_manager.dart';
import '../../src/fakes.dart'; import '../../src/fakes.dart';
void main() { void main() {
BufferLogger logger; late BufferLogger logger;
setUp(() { setUp(() {
logger = BufferLogger.test(); logger = BufferLogger.test();
}); });
group('IMobileDevice', () { group('IMobileDevice', () {
Artifacts artifacts; late Artifacts artifacts;
Cache cache; late Cache cache;
setUp(() { setUp(() {
artifacts = Artifacts.test(); artifacts = Artifacts.test();
...@@ -44,8 +42,8 @@ void main() { ...@@ -44,8 +42,8 @@ void main() {
}); });
group('screenshot', () { group('screenshot', () {
FakeProcessManager fakeProcessManager; late FakeProcessManager fakeProcessManager;
File outputFile; late File outputFile;
setUp(() { setUp(() {
fakeProcessManager = FakeProcessManager.empty(); fakeProcessManager = FakeProcessManager.empty();
...@@ -131,8 +129,8 @@ void main() { ...@@ -131,8 +129,8 @@ void main() {
}); });
group('Diagnose Xcode build failure', () { group('Diagnose Xcode build failure', () {
Map<String, String> buildSettings; late Map<String, String> buildSettings;
TestUsage testUsage; late TestUsage testUsage;
setUp(() { setUp(() {
buildSettings = <String, String>{ buildSettings = <String, String>{
...@@ -445,7 +443,7 @@ Exited (sigterm)''', ...@@ -445,7 +443,7 @@ Exited (sigterm)''',
}); });
group('remove Finder extended attributes', () { group('remove Finder extended attributes', () {
Directory projectDirectory; late Directory projectDirectory;
setUp(() { setUp(() {
final MemoryFileSystem fs = MemoryFileSystem.test(); final MemoryFileSystem fs = MemoryFileSystem.test();
projectDirectory = fs.directory('flutter_project'); projectDirectory = fs.directory('flutter_project');
...@@ -494,5 +492,5 @@ class FakeIosProject extends Fake implements IosProject { ...@@ -494,5 +492,5 @@ class FakeIosProject extends Fake implements IosProject {
Future<String> hostAppBundleName(BuildInfo buildInfo) async => 'UnitTestRunner.app'; Future<String> hostAppBundleName(BuildInfo buildInfo) async => 'UnitTestRunner.app';
@override @override
final Directory xcodeProject = null; Directory get xcodeProject => xcodeProjectInfoFile.fileSystem.directory('Runner.xcodeproj');
} }
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