diff --git a/dwds/lib/src/services/chrome_proxy_service.dart b/dwds/lib/src/services/chrome_proxy_service.dart index 479bc2faf..cc9a134c0 100644 --- a/dwds/lib/src/services/chrome_proxy_service.dart +++ b/dwds/lib/src/services/chrome_proxy_service.dart @@ -1080,6 +1080,17 @@ ${globalLoadStrategy.loadModuleSnippet}("dart_sdk").developer.invokeExtension( isolateId, step: step, frameIndex: frameIndex, + ).catchError( + (error) => Future.error( + RPCError( + 'resume', + RPCErrorKind.kIsolateMustBePaused.code, + error, + ), + ), + test: (e) => e.toString().contains( + 'Can only perform operation while paused', + ), ), ); @@ -1088,33 +1099,20 @@ ${globalLoadStrategy.loadModuleSnippet}("dart_sdk").developer.invokeExtension( String? step, int? frameIndex, }) async { - try { - if (inspector.appConnection.isStarted) { - return captureElapsedTime( - () async { - await isInitialized; - await isStarted; - _checkIsolate('resume', isolateId); - return await (await debuggerFuture) - .resume(step: step, frameIndex: frameIndex); - }, - (result) => DwdsEvent.resume(step), - ); - } else { - inspector.appConnection.runMain(); - return Success(); - } - } on WipError catch (e) { - final errorMessage = e.message; - if (errorMessage != null && - errorMessage.contains('Can only perform operation while paused')) { - throw RPCError( - 'resume', - RPCErrorKind.kIsolateMustBePaused.code, - errorMessage, - ); - } - rethrow; + if (inspector.appConnection.isStarted) { + return captureElapsedTime( + () async { + await isInitialized; + await isStarted; + _checkIsolate('resume', isolateId); + return await (await debuggerFuture) + .resume(step: step, frameIndex: frameIndex); + }, + (result) => DwdsEvent.resume(step), + ); + } else { + inspector.appConnection.runMain(); + return Success(); } } diff --git a/dwds/test/chrome_proxy_service_test.dart b/dwds/test/chrome_proxy_service_test.dart index 988a5977e..b366c686c 100644 --- a/dwds/test/chrome_proxy_service_test.dart +++ b/dwds/test/chrome_proxy_service_test.dart @@ -1368,12 +1368,18 @@ void main() { expect(pauseBreakpoints, hasLength(1)); expect(pauseBreakpoints.first.id, bp.id); await service.removeBreakpoint(isolateId!, bp.id!); - }); - tearDown(() async { // Resume execution to not impact other tests. await service.resume(isolateId!); }); + + test('resuming throws error if not paused', () async { + await expectLater( + service.resume(isolateId!), + // Note: 106 is the `kIsolateMustBePaused` error code. + throwsRPCErrorWithMessage('106'), + ); + }); }); group('Step', () {