diff options
Diffstat (limited to 'deps/v8/test/debugger/debug/debug-exceptions.js')
-rw-r--r-- | deps/v8/test/debugger/debug/debug-exceptions.js | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/deps/v8/test/debugger/debug/debug-exceptions.js b/deps/v8/test/debugger/debug/debug-exceptions.js new file mode 100644 index 0000000000..42090770d8 --- /dev/null +++ b/deps/v8/test/debugger/debug/debug-exceptions.js @@ -0,0 +1,87 @@ +// 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. + + + +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(_) {} +}); + + +// Check that an internal exception in our yield* desugaring is not observable. +{ + uncaught = null; + + let iter = { + next() {return {value:42, done:false}}, + throw() {return {done:true}} + }; + let iterable = {[Symbol.iterator]() {return iter}}; + function* f() { yield* iterable } + + let g = f(); + g.next(); + assertEquals({value: undefined, done: true}, g.throw()); + assertNull(uncaught); // No exception event was generated. +} + + +assertFalse(error); |