| // 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'); |
| } |