From b5cd3ce854192d83b327af91dad03db46111b796 Mon Sep 17 00:00:00 2001 From: Jonah Williams Date: Tue, 24 Mar 2020 12:58:30 -0700 Subject: [PATCH] [flutter_tools] test and catch more exception types in web runner (#53183) --- .../src/build_runner/resident_web_runner.dart | 2 + .../resident_web_runner_test.dart | 93 ++++++++++--------- 2 files changed, 52 insertions(+), 43 deletions(-) diff --git a/packages/flutter_tools/lib/src/build_runner/resident_web_runner.dart b/packages/flutter_tools/lib/src/build_runner/resident_web_runner.dart index b7380fde589..55324257097 100644 --- a/packages/flutter_tools/lib/src/build_runner/resident_web_runner.dart +++ b/packages/flutter_tools/lib/src/build_runner/resident_web_runner.dart @@ -520,6 +520,8 @@ class _ResidentWebRunner extends ResidentWebRunner { return OperationResult(1, err.toString(), fatal: true); } on WipError catch (err) { return OperationResult(1, err.toString(), fatal: true); + } on vmservice.RPCError catch (err) { + return OperationResult(1, err.toString(), fatal: true); } finally { status.stop(); } diff --git a/packages/flutter_tools/test/general.shard/resident_web_runner_test.dart b/packages/flutter_tools/test/general.shard/resident_web_runner_test.dart index 934e918e1e9..81b58555b46 100644 --- a/packages/flutter_tools/test/general.shard/resident_web_runner_test.dart +++ b/packages/flutter_tools/test/general.shard/resident_web_runner_test.dart @@ -513,54 +513,61 @@ void main() { Usage: () => MockFlutterUsage(), })); - // TODO(jonahwilliams): re-enable tests once we switch back to DWDS for hot reload/restart. - // test('Fails on vmservice response error for hot restart', () => testbed.run(() async { - // _setupMocks(); - // final Completer connectionInfoCompleter = Completer(); - // unawaited(residentWebRunner.run( - // connectionInfoCompleter: connectionInfoCompleter, - // )); - // await connectionInfoCompleter.future; - // when(mockVmService.callServiceExtension('fullReload')).thenAnswer((Invocation _) async { - // return Response.parse({'type': 'Failed'}); - // }); - // final OperationResult result = await residentWebRunner.restart(fullRestart: true); + test('Fails non-fatally on vmservice response error for hot restart', () => testbed.run(() async { + _setupMocks(); + final Completer connectionInfoCompleter = Completer(); + unawaited(residentWebRunner.run( + connectionInfoCompleter: connectionInfoCompleter, + )); + await connectionInfoCompleter.future; + when(mockVmService.callMethod('hotRestart')).thenAnswer((Invocation _) async { + return Response.parse({'type': 'Failed'}); + }); + final OperationResult result = await residentWebRunner.restart(fullRestart: false); - // expect(result.code, 1); - // expect(result.message, contains('Failed')); - // })); + expect(result.code, 0); + })); - // TODO(jonahwilliams): re-enable tests once we switch back to DWDS for hot reload/restart. - // test('Fails on vmservice response error for hot reload', () => testbed.run(() async { - // _setupMocks(); - // final Completer connectionInfoCompleter = Completer(); - // unawaited(residentWebRunner.run( - // connectionInfoCompleter: connectionInfoCompleter, - // )); - // await connectionInfoCompleter.future; - // when(mockVmService.callServiceExtension('hotRestart')).thenAnswer((Invocation _) async { - // return Response.parse({'type': 'Failed'}); - // }); - // final OperationResult result = await residentWebRunner.restart(fullRestart: false); + test('Fails fatally on vmservice RpcError', () => testbed.run(() async { + _setupMocks(); + final Completer connectionInfoCompleter = Completer(); + unawaited(residentWebRunner.run( + connectionInfoCompleter: connectionInfoCompleter, + )); + await connectionInfoCompleter.future; + when(mockVmService.callMethod('hotRestart')).thenThrow(RPCError('Something went wrong', 2, '123')); + final OperationResult result = await residentWebRunner.restart(fullRestart: false); - // expect(result.code, 1); - // expect(result.message, contains('Failed')); - // })); + expect(result.code, 1); + expect(result.message, contains('Something went wrong')); + })); - // TODO(jonahwilliams): re-enable tests once we switch back to DWDS for hot reload/restart. - // test('Fails on vmservice RpcError', () => testbed.run(() async { - // _setupMocks(); - // final Completer connectionInfoCompleter = Completer(); - // unawaited(residentWebRunner.run( - // connectionInfoCompleter: connectionInfoCompleter, - // )); - // await connectionInfoCompleter.future; - // when(mockVmService.callServiceExtension('hotRestart')).thenThrow(RPCError('', 2, '123')); - // final OperationResult result = await residentWebRunner.restart(fullRestart: false); + test('Fails fatally on vmservice WipError', () => testbed.run(() async { + _setupMocks(); + final Completer connectionInfoCompleter = Completer(); + unawaited(residentWebRunner.run( + connectionInfoCompleter: connectionInfoCompleter, + )); + await connectionInfoCompleter.future; + when(mockVmService.callMethod('hotRestart')).thenThrow(WipError({})); + final OperationResult result = await residentWebRunner.restart(fullRestart: false); - // expect(result.code, 1); - // expect(result.message, contains('Page requires refresh')); - // })); + expect(result.code, 1); + })); + + test('Fails fatally on vmservice Exception', () => testbed.run(() async { + _setupMocks(); + final Completer connectionInfoCompleter = Completer(); + unawaited(residentWebRunner.run( + connectionInfoCompleter: connectionInfoCompleter, + )); + await connectionInfoCompleter.future; + when(mockVmService.callMethod('hotRestart')).thenThrow(Exception('Something went wrong')); + final OperationResult result = await residentWebRunner.restart(fullRestart: false); + + expect(result.code, 1); + expect(result.message, contains('Something went wrong')); + })); test('printHelp without details has web warning', () => testbed.run(() async { residentWebRunner.printHelp(details: false);