Index: runtime/observatory/tests/service/pause_on_unhandled_async_exceptions_test.dart |
diff --git a/runtime/observatory/tests/service/pause_on_unhandled_async_exceptions_test.dart b/runtime/observatory/tests/service/pause_on_unhandled_async_exceptions_test.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..2f4354e4dccbf950d836fe9010635a185915d8c4 |
--- /dev/null |
+++ b/runtime/observatory/tests/service/pause_on_unhandled_async_exceptions_test.dart |
@@ -0,0 +1,65 @@ |
+// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file |
+// for details. All rights reserved. Use of this source code is governed by a |
+// BSD-style license that can be found in the LICENSE file. |
+// VMOptions=--error_on_bad_type --error_on_bad_override |
+ |
+import 'package:observatory/service_io.dart'; |
+import 'package:observatory/models.dart' as M; |
+import 'package:unittest/unittest.dart'; |
+import 'test_helper.dart'; |
+import 'service_test_common.dart'; |
+ |
+const LINE_A = 37; |
+ |
+class Foo { |
+ |
+} |
+ |
+doThrow() { |
+ throw "TheException"; // Line 13. |
+ return "end of doThrow"; |
+} |
+ |
+asyncThrower() async { |
+ doThrow(); |
+} |
+ |
+testeeMain() async { |
+ try { |
+ // caught. |
+ try { |
+ await asyncThrower(); |
+ } catch (e) { |
+ } |
+ |
+ // uncaught. |
+ try { |
+ await asyncThrower(); // LINE_A. |
+ } on double catch (e) { |
+ } |
+ } on Foo catch (e) { |
+ } |
+} |
+ |
+var tests = [ |
+ hasStoppedWithUnhandledException, |
+ |
+ (Isolate isolate) async { |
+ print("We stoppped!"); |
+ var stack = await isolate.getStack(); |
+ expect(stack['asyncCausalFrames'], isNotNull); |
+ var asyncStack = stack['asyncCausalFrames']; |
+ expect(asyncStack[0].toString(), contains('doThrow')); |
+ expect(asyncStack[1].toString(), contains('asyncThrower')); |
+ expect(asyncStack[2].kind, equals(M.FrameKind.asyncSuspensionMarker)); |
+ expect(asyncStack[3].toString(), contains('testeeMain')); |
+ // We've stopped at LINE_A. |
+ expect(await asyncStack[3].location.toUserString(), |
+ contains('.dart:$LINE_A')); |
+ } |
+]; |
+ |
+main(args) => runIsolateTests(args, |
+ tests, |
+ pause_on_unhandled_exceptions: true, |
+ testeeConcurrent: testeeMain); |