From bc7286f118b299b54233d28b98f50ec9eae13362 Mon Sep 17 00:00:00 2001 From: Jenn Magder Date: Thu, 7 Jan 2021 13:13:56 -0800 Subject: [PATCH] Use simctl exit code instead of stderr (#73070) --- .../flutter_tools/lib/src/macos/xcode.dart | 2 +- .../test/general.shard/macos/xcode_test.dart | 47 +++++++++++++++++++ .../macos/xcode_validator_test.dart | 3 -- 3 files changed, 48 insertions(+), 4 deletions(-) diff --git a/packages/flutter_tools/lib/src/macos/xcode.dart b/packages/flutter_tools/lib/src/macos/xcode.dart index 116aeac36f1..1e00ae124c4 100644 --- a/packages/flutter_tools/lib/src/macos/xcode.dart +++ b/packages/flutter_tools/lib/src/macos/xcode.dart @@ -124,7 +124,7 @@ class Xcode { final RunResult result = _processUtils.runSync( [...xcrunCommand(), 'simctl', 'list'], ); - _isSimctlInstalled = result.stderr == null || result.stderr == ''; + _isSimctlInstalled = result.exitCode == 0; } on ProcessException { _isSimctlInstalled = false; } diff --git a/packages/flutter_tools/test/general.shard/macos/xcode_test.dart b/packages/flutter_tools/test/general.shard/macos/xcode_test.dart index 90d6d10b7a5..f6d2c256b19 100644 --- a/packages/flutter_tools/test/general.shard/macos/xcode_test.dart +++ b/packages/flutter_tools/test/general.shard/macos/xcode_test.dart @@ -140,6 +140,53 @@ void main() { expect(xcode.isInstalledAndMeetsVersionCheck, isFalse); }); + testWithoutContext('isSimctlInstalled is true when simctl list succeeds', () { + when(mockXcodeProjectInterpreter.xcrunCommand()).thenReturn(['xcrun']); + fakeProcessManager.addCommand( + const FakeCommand( + command: [ + 'xcrun', + 'simctl', + 'list', + ], + ), + ); + final Xcode xcode = Xcode( + logger: logger, + platform: FakePlatform(operatingSystem: 'macos'), + fileSystem: MemoryFileSystem.test(), + processManager: fakeProcessManager, + xcodeProjectInterpreter: mockXcodeProjectInterpreter, + ); + + expect(xcode.isSimctlInstalled, isTrue); + expect(fakeProcessManager.hasRemainingExpectations, isFalse); + }); + + testWithoutContext('isSimctlInstalled is true when simctl list fails', () { + when(mockXcodeProjectInterpreter.xcrunCommand()).thenReturn(['xcrun']); + fakeProcessManager.addCommand( + const FakeCommand( + command: [ + 'xcrun', + 'simctl', + 'list', + ], + exitCode: 1, + ), + ); + final Xcode xcode = Xcode( + logger: logger, + platform: FakePlatform(operatingSystem: 'macos'), + fileSystem: MemoryFileSystem.test(), + processManager: fakeProcessManager, + xcodeProjectInterpreter: mockXcodeProjectInterpreter, + ); + + expect(xcode.isSimctlInstalled, isFalse); + expect(fakeProcessManager.hasRemainingExpectations, isFalse); + }); + group('macOS', () { Xcode xcode; FakePlatform platform; diff --git a/packages/flutter_tools/test/general.shard/macos/xcode_validator_test.dart b/packages/flutter_tools/test/general.shard/macos/xcode_validator_test.dart index 0812ccc5a55..29675a350d2 100644 --- a/packages/flutter_tools/test/general.shard/macos/xcode_validator_test.dart +++ b/packages/flutter_tools/test/general.shard/macos/xcode_validator_test.dart @@ -7,12 +7,9 @@ import 'package:flutter_tools/src/doctor.dart'; import 'package:flutter_tools/src/macos/xcode.dart'; import 'package:flutter_tools/src/macos/xcode_validator.dart'; import 'package:mockito/mockito.dart'; -import 'package:process/process.dart'; import '../../src/common.dart'; -import '../../src/context.dart'; -class MockProcessManager extends Mock implements ProcessManager {} class MockXcode extends Mock implements Xcode {} void main() {