Terminate simulator app on "q" (#114114)

This commit is contained in:
Jenn Magder 2022-10-27 15:06:35 -07:00 committed by GitHub
parent 8aad1190b7
commit 15e694414c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 55 additions and 4 deletions

View File

@ -16,7 +16,7 @@ Future<void> main() async {
await testWithNewIOSSimulator('TestHotReloadSim', (String deviceId) async { await testWithNewIOSSimulator('TestHotReloadSim', (String deviceId) async {
simulatorDeviceId = deviceId; simulatorDeviceId = deviceId;
// This isn't actually a benchmark test, so do not use the returned `benchmarkScoreKeys` result. // This isn't actually a benchmark test, so do not use the returned `benchmarkScoreKeys` result.
await createHotModeTest(deviceIdOverride: deviceId)(); await createHotModeTest(deviceIdOverride: deviceId, checkAppRunningOnLocalDevice: true)();
}); });
} finally { } finally {
await removeIOSimulator(simulatorDeviceId); await removeIOSimulator(simulatorDeviceId);

View File

@ -257,6 +257,25 @@ class SimControl {
return result; return result;
} }
Future<RunResult> stopApp(String deviceId, String appIdentifier) async {
RunResult result;
try {
result = await _processUtils.run(
<String>[
..._xcode.xcrunCommand(),
'simctl',
'terminate',
deviceId,
appIdentifier,
],
throwOnError: true,
);
} on ProcessException catch (exception) {
throwToolExit('Unable to terminate $appIdentifier on $deviceId:\n$exception');
}
return result;
}
Future<void> takeScreenshot(String deviceId, String outputPath) async { Future<void> takeScreenshot(String deviceId, String outputPath) async {
try { try {
await _processUtils.run( await _processUtils.run(
@ -533,11 +552,13 @@ class IOSSimulator extends Device {
@override @override
Future<bool> stopApp( Future<bool> stopApp(
ApplicationPackage app, { ApplicationPackage? app, {
String? userIdentifier, String? userIdentifier,
}) async { }) async {
// Currently we don't have a way to stop an app running on iOS. if (app == null) {
return false; return false;
}
return (await _simControl.stopApp(id, app.id)).exitCode == 0;
} }
String get logFilePath { String get logFilePath {

View File

@ -901,6 +901,36 @@ Dec 20 17:04:32 md32-11-vm1 Another App[88374]: Ignore this text'''
throwsToolExit(message: r'Unable to launch'), throwsToolExit(message: r'Unable to launch'),
); );
}); });
testWithoutContext('.stopApp() handles exceptions', () async {
fakeProcessManager.addCommand(const FakeCommand(
command: <String>[
'xcrun',
'simctl',
'terminate',
deviceId,
appId,
],
exception: ProcessException('xcrun', <String>[]),
));
expect(
() async => simControl.stopApp(deviceId, appId),
throwsToolExit(message: 'Unable to terminate'),
);
expect(fakeProcessManager, hasNoRemainingExpectations);
});
testWithoutContext('simulator stopApp handles null app package', () async {
final IOSSimulator iosSimulator = IOSSimulator(
'x',
name: 'Testo',
simulatorCategory: 'NaN',
simControl: simControl,
);
expect(await iosSimulator.stopApp(null), isFalse);
});
}); });
group('startApp', () { group('startApp', () {