Index: runtime/observatory/tests/service/pause_on_unhandled_async_exceptions2_test.dart |
diff --git a/runtime/observatory/tests/service/pause_on_unhandled_async_exceptions2_test.dart b/runtime/observatory/tests/service/pause_on_unhandled_async_exceptions2_test.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..1812693b87fda160be3e42c1ea85caa71b1c908f |
--- /dev/null |
+++ b/runtime/observatory/tests/service/pause_on_unhandled_async_exceptions2_test.dart |
@@ -0,0 +1,53 @@ |
+// 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 = 29; |
+ |
+class Foo { |
+ |
+} |
+ |
+doThrow() { |
+ throw "TheException"; // Line 13. |
+ return "end of doThrow"; |
+} |
+ |
+asyncThrower() async { |
+ doThrow(); |
+} |
+ |
+testeeMain() async { |
+ // No try ... catch. |
+ await asyncThrower(); |
+} |
+ |
+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); |