Index: test/mjsunit/debug-exceptions.js |
diff --git a/test/mjsunit/debug-exceptions.js b/test/mjsunit/debug-exceptions.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..655e535c259fe6bdf4e5bdf07589fda6ebdcde4d |
--- /dev/null |
+++ b/test/mjsunit/debug-exceptions.js |
@@ -0,0 +1,70 @@ |
+// Copyright 2016 the V8 project authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+// Flags: --expose-debug-as debug |
+ |
+ |
+Debug = debug.Debug |
+ |
+let error = false; |
+let uncaught; |
+ |
+function listener(event, exec_state, event_data, data) { |
+ if (event != Debug.DebugEvent.Exception) return; |
+ try { |
+ uncaught = event_data.uncaught(); |
+ } catch (e) { |
+ error = true; |
+ } |
+} |
+ |
+Debug.setBreakOnException(); |
+Debug.setListener(listener); |
+ |
+ |
+function assertCaught(f) { |
+ try {f()} finally { |
+ assertFalse(uncaught); |
+ return; |
+ } |
+} |
+ |
+function assertUncaught(f) { |
+ try {f()} finally { |
+ assertTrue(uncaught); |
+ return; |
+ } |
+} |
+ |
+ |
+assertUncaught(() => { |
+ for (var a of [1, 2, 3]) { |
+ throw a |
+ } |
+}); |
+ |
+assertUncaught(() => { |
+ for (var a of [1, 2, 3]) { |
+ try {throw a} finally {} |
+ } |
+}); |
+ |
+assertCaught(() => { |
+ for (var a of [1, 2, 3]) { |
+ try { |
+ try {throw a} finally {} |
+ } catch(_) {} |
+ } |
+}); |
+ |
+assertCaught(() => { |
+ try { |
+ for (var a of [1, 2, 3]) { |
+ try {throw a} finally {} |
+ } |
+ } catch(_) {} |
+}); |
+ |
+ |
+assertFalse(error); |