Use simctl exit code instead of stderr (#73070)
diff --git a/packages/flutter_tools/lib/src/macos/xcode.dart b/packages/flutter_tools/lib/src/macos/xcode.dart
index 116aeac..1e00ae1 100644
--- a/packages/flutter_tools/lib/src/macos/xcode.dart
+++ b/packages/flutter_tools/lib/src/macos/xcode.dart
@@ -124,7 +124,7 @@
final RunResult result = _processUtils.runSync(
<String>[...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 90d6d10..f6d2c25 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 @@
expect(xcode.isInstalledAndMeetsVersionCheck, isFalse);
});
+ testWithoutContext('isSimctlInstalled is true when simctl list succeeds', () {
+ when(mockXcodeProjectInterpreter.xcrunCommand()).thenReturn(<String>['xcrun']);
+ fakeProcessManager.addCommand(
+ const FakeCommand(
+ command: <String>[
+ '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(<String>['xcrun']);
+ fakeProcessManager.addCommand(
+ const FakeCommand(
+ command: <String>[
+ '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 0812ccc..29675a3 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/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() {