// Copyright 2018 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. const {session, contextGroup, Protocol} = InspectorTest.start('Test Debugger.paused reason for promise rejections'); (async function test() { Protocol.Debugger.enable(); Protocol.Debugger.setPauseOnExceptions({state: 'all'}); InspectorTest.log('Check Promise.reject in script:'); contextGroup.addScript(`Promise.reject(new Error())`); await logPausedReason(); await Protocol.Debugger.resume(); InspectorTest.log('Check Promise.reject in Runtime.evaluate:'); Protocol.Runtime.evaluate({expression: `Promise.reject(new Error())`}); await logPausedReason(); await Protocol.Debugger.resume(); InspectorTest.log('Check Promise.reject in async function:'); Protocol.Runtime.evaluate( {expression: `(async function() { await Promise.reject(); })()`}); await logPausedReason(); await Protocol.Debugger.resume(); InspectorTest.log('Check throw in async function:'); Protocol.Runtime.evaluate({ expression: `(async function() { await Promise.resolve(); throw 42; })()` }); await logPausedReason(); await Protocol.Debugger.resume(); InspectorTest.log('Check reject from constructor:'); Protocol.Runtime.evaluate({ expression: 'new Promise((_, reject) => reject(new Error())).catch(e => {})' }); await logPausedReason(); await Protocol.Debugger.resume(); InspectorTest.log('Check reject from thenable job:'); Protocol.Runtime.evaluate({ expression: `Promise.resolve().then(() => Promise.reject(new Error())).catch(e => 0)` }); await logPausedReason(); await Protocol.Debugger.resume(); InspectorTest.log( 'Check caught exception in async function (should be exception):'); Protocol.Runtime.evaluate({ expression: `(async function() { await Promise.resolve(); try { throw 42; } catch (e) {} })()` }); await logPausedReason(); await Protocol.Debugger.resume(); InspectorTest.completeTest(); })(); async function logPausedReason() { const {params: {reason}} = await Protocol.Debugger.oncePaused(); InspectorTest.log(reason + '\n'); }