From c2b7342ca470b11cfaad4fbfb094f73aa4c85320 Mon Sep 17 00:00:00 2001 From: Jia Hao Date: Wed, 6 May 2020 23:16:03 +0800 Subject: [PATCH] Handle uncaught error for warnIfSlow (#56418) --- .../lib/src/driver/vmservice_driver.dart | 10 +++++++++- packages/flutter_driver/test/flutter_driver_test.dart | 10 ++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/packages/flutter_driver/lib/src/driver/vmservice_driver.dart b/packages/flutter_driver/lib/src/driver/vmservice_driver.dart index 52d3bcf92db..af9a4fb2561 100644 --- a/packages/flutter_driver/lib/src/driver/vmservice_driver.dart +++ b/packages/flutter_driver/lib/src/driver/vmservice_driver.dart @@ -633,7 +633,15 @@ Future _warnIfSlow({ assert(future != null); assert(timeout != null); assert(message != null); - return future..timeout(timeout, onTimeout: () { _log(message); return null; }); + future + .timeout(timeout, onTimeout: () { + _log(message); + return null; + }) + // Don't duplicate errors if [future] completes with an error. + .catchError((dynamic e) => null); + + return future; } /// Encapsulates connection information to an instance of a Flutter application. diff --git a/packages/flutter_driver/test/flutter_driver_test.dart b/packages/flutter_driver/test/flutter_driver_test.dart index 18906b36635..f60ad1b28e7 100644 --- a/packages/flutter_driver/test/flutter_driver_test.dart +++ b/packages/flutter_driver/test/flutter_driver_test.dart @@ -665,6 +665,16 @@ void main() { expect(error.message, 'Error in Flutter application: {message: This is a failure}'); } }); + + test('uncaught remote error', () async { + when(mockIsolate.invokeExtension(any, any)).thenAnswer((Invocation i) { + return Future>.error( + rpc.RpcException(9999, 'test error'), + ); + }); + + expect(driver.waitFor(find.byTooltip('foo')), throwsDriverError); + }); }); });