// 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. let {session, contextGroup, Protocol} = InspectorTest.start("Check that inspector correctly passes caught/uncaught information."); contextGroup.addScript( `function throwCaught() { try { throw new Error(); } catch (_) {} } function throwUncaught() { throw new Error(); } function throwInPromiseCaught() { var reject; new Promise(function(res, rej) { reject = rej; }).catch(() => {}); reject(); } function throwInPromiseUncaught() { new Promise(function promiseUncaught() { throw new Error(); }); } function throwInMapConstructor() { new Map('a'); } function throwInAsyncIterator() { let it = (async function*() {})(); it.next.call({}); } function schedule(f) { setTimeout(f, 0); } `); Protocol.Debugger.enable(); Protocol.Debugger.setPauseOnExceptions({ "state": "all" }); Protocol.Debugger.onPaused(message => { InspectorTest.log("paused in " + message.params.callFrames[0].functionName); InspectorTest.log("uncaught: " + message.params.data.uncaught); Protocol.Debugger.resume(); }); Protocol.Runtime.evaluate({ "expression": "schedule(throwCaught);" }) .then(() => Protocol.Runtime.evaluate( { "expression": "schedule(throwUncaught);" })) .then(() => Protocol.Runtime.evaluate( { "expression": "schedule(throwInPromiseCaught);"})) .then(() => Protocol.Runtime.evaluate( { "expression": "schedule(throwInPromiseUncaught);"})) .then(() => Protocol.Runtime.evaluate( { "expression": "schedule(throwInMapConstructor);"})) .then(() => Protocol.Runtime.evaluate( { "expression": "schedule(throwInAsyncIterator);"})) .then(() => InspectorTest.completeTest());