Show macOS arm64 architecture in doctor and devices list (#69245)

This commit is contained in:
Jenn Magder 2020-10-30 13:48:04 -07:00 committed by GitHub
parent bd121ecd22
commit de5bf09e7a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 52 additions and 1 deletions

View File

@ -621,6 +621,10 @@ abstract class Device {
/// The device's platform.
Future<TargetPlatform> get targetPlatform;
/// Platform name for display only.
Future<String> get targetPlatformDisplayName async =>
getNameForTargetPlatform(await targetPlatform);
Future<String> get sdkNameAndVersion;
/// Create a platform-specific [DevFSWriter] for the given [app], or
@ -749,7 +753,7 @@ abstract class Device {
table.add(<String>[
'${device.name} (${device.category})',
device.id,
getNameForTargetPlatform(targetPlatform),
await device.targetPlatformDisplayName,
'${await device.sdkNameAndVersion}$supportIndicator',
]);
}

View File

@ -27,6 +27,7 @@ class MacOSDevice extends DesktopDevice {
@required OperatingSystemUtils operatingSystemUtils,
}) : _processManager = processManager,
_logger = logger,
_operatingSystemUtils = operatingSystemUtils,
super(
'macos',
platformType: PlatformType.macos,
@ -39,6 +40,7 @@ class MacOSDevice extends DesktopDevice {
final ProcessManager _processManager;
final Logger _logger;
final OperatingSystemUtils _operatingSystemUtils;
@override
bool isSupported() => true;
@ -46,9 +48,20 @@ class MacOSDevice extends DesktopDevice {
@override
String get name => 'macOS';
/// Returns [TargetPlatform.darwin_x64] even on macOS ARM devices.
///
/// Build system, artifacts rely on Rosetta to translate to x86_64 on ARM.
@override
Future<TargetPlatform> get targetPlatform async => TargetPlatform.darwin_x64;
@override
Future<String> get targetPlatformDisplayName async {
if (_operatingSystemUtils.hostPlatform == HostPlatform.darwin_arm) {
return 'darwin-arm64';
}
return super.targetPlatformDisplayName;
}
@override
bool isSupportedForProject(FlutterProject flutterProject) {
return flutterProject.macos.existsSync();

View File

@ -604,6 +604,9 @@ void main() {
when(device.id).thenReturn(id);
when(device.isLocalEmulator).thenAnswer((_) async => false);
when(device.sdkNameAndVersion).thenAnswer((_) async => 'Android 46');
when(device.targetPlatformDisplayName)
.thenAnswer((_) async => 'android');
return device;
}

View File

@ -1059,5 +1059,6 @@ class MockDevice extends Mock implements Device {
when(id).thenReturn('device-id');
when(isLocalEmulator).thenAnswer((_) => Future<bool>.value(false));
when(targetPlatform).thenAnswer((_) => Future<TargetPlatform>.value(TargetPlatform.android));
when(targetPlatformDisplayName).thenAnswer((_) async => 'android');
}
}

View File

@ -238,6 +238,8 @@ void main() {
when(mockDevice.id).thenReturn('mock-id');
when(mockDevice.name).thenReturn('mock-name');
when(mockDevice.platformType).thenReturn(PlatformType.android);
when(mockDevice.targetPlatformDisplayName)
.thenAnswer((Invocation invocation) async => 'mock-platform');
when(mockDevice.sdkNameAndVersion).thenAnswer((Invocation invocation) => Future<String>.value('api-14'));
when(mockDeviceManager.getDevices()).thenAnswer((Invocation invocation) {

View File

@ -166,6 +166,34 @@ void main() {
expect(device.isSupportedForProject(flutterProject), true);
});
testWithoutContext('target platform display name on x86_64', () async {
final FakeOperatingSystemUtils fakeOperatingSystemUtils =
FakeOperatingSystemUtils();
fakeOperatingSystemUtils.hostPlatform = HostPlatform.darwin_x64;
final MacOSDevice device = MacOSDevice(
fileSystem: MemoryFileSystem.test(),
logger: BufferLogger.test(),
processManager: FakeProcessManager.any(),
operatingSystemUtils: fakeOperatingSystemUtils,
);
expect(await device.targetPlatformDisplayName, 'darwin-x64');
});
testWithoutContext('target platform display name on ARM', () async {
final FakeOperatingSystemUtils fakeOperatingSystemUtils =
FakeOperatingSystemUtils();
fakeOperatingSystemUtils.hostPlatform = HostPlatform.darwin_arm;
final MacOSDevice device = MacOSDevice(
fileSystem: MemoryFileSystem.test(),
logger: BufferLogger.test(),
processManager: FakeProcessManager.any(),
operatingSystemUtils: fakeOperatingSystemUtils,
);
expect(await device.targetPlatformDisplayName, 'darwin-arm64');
});
testUsingContext('isSupportedForProject is false with no host app', () async {
final FileSystem fileSystem = MemoryFileSystem.test();
final MacOSDevice device = MacOSDevice(