v8/test/inspector/debugger/pause-on-promise-rejections.js
Alexey Kozyatinskiy 3f99afc93c inspector: mark all pauses on promise rejection with proper reason
Sometimes we do not have promise on stack, e.g. Promise.reject call,
but we need to attribute this pause with promise rejection.

TBR=yangguo@chromium.org

Bug: chromium:755728
Cq-Include-Trybots: luci.chromium.try:linux_chromium_headless_rel;master.tryserver.blink:linux_trusty_blink_rel
Change-Id: I03ca1e1cd6c21677f0a12ece626e2c8a1938437b
Reviewed-on: https://chromium-review.googlesource.com/1249942
Reviewed-by: Aleksey Kozyatinskiy <kozyatinskiy@chromium.org>
Commit-Queue: Aleksey Kozyatinskiy <kozyatinskiy@chromium.org>
Cr-Commit-Position: refs/heads/master@{#56293}
2018-09-28 15:53:34 +00:00

69 lines
2.2 KiB
JavaScript

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