v8/test/inspector/debugger/schedule-step-into-async.js
kozyatinskiy 47276d3db3 [inspector] introduced Debugger.scheduleStepIntoAsync
This method could be called on pause and will do stepInto next scheduled callback if any will happen until next break.
First implementation support only callbacks chained by Promise.prototype.then.

BUG=chromium:432469
R=yangguo@chromium.org,dgozman@chromium.org

Review-Url: https://codereview.chromium.org/2723273002
Cr-Commit-Position: refs/heads/master@{#43616}
2017-03-06 16:28:21 +00:00

160 lines
5.0 KiB
JavaScript

// Copyright 2017 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.
InspectorTest.log('Checks Debugger.scheduleStepIntoAsync.');
InspectorTest.addScript(`
function testNoScheduledTask() {
debugger;
return 42;
}
function testSimple() {
debugger;
Promise.resolve().then(v => v * 2);
}
function testNotResolvedPromise() {
var resolveCallback;
var p = new Promise(resolve => resolveCallback = resolve);
debugger;
p.then(v => v * 2);
resolveCallback();
}
function testTwoAsyncTasks() {
debugger;
Promise.resolve().then(v => v * 2);
Promise.resolve().then(v => v * 4);
}
function testTwoAsyncTasksWithBreak() {
debugger;
Promise.resolve().then(v => v * 2);
debugger;
Promise.resolve().then(v => v * 4);
}
function testPromiseAll() {
debugger;
Promise.all([ Promise.resolve(), Promise.resolve() ]).then(v => v * 2);
}
function testBlackboxedCreatePromise() {
debugger;
createPromise().then(v => v * 2);
}
//# sourceURL=test.js`);
InspectorTest.addScript(`
function createPromise() {
return Promise.resolve().then(v => v * 3).then(v => v * 4);
}
//# sourceURL=framework.js`)
InspectorTest.setupScriptMap();
Protocol.Debugger.enable();
InspectorTest.runAsyncTestSuite([
async function testScheduleErrors() {
Protocol.Runtime.evaluate({ expression: 'testNoScheduledTask()' });
await waitPauseAndDumpLocation();
Protocol.Debugger.scheduleStepIntoAsync().then(InspectorTest.logMessage);
Protocol.Debugger.scheduleStepIntoAsync().then(InspectorTest.logMessage);
Protocol.Debugger.stepInto();
await waitPauseAndDumpLocation();
await Protocol.Debugger.resume();
},
async function testSimple() {
Protocol.Runtime.evaluate({ expression: 'testSimple()' });
await waitPauseAndDumpLocation();
Protocol.Debugger.stepOver();
await waitPauseAndDumpLocation();
Protocol.Debugger.scheduleStepIntoAsync().then(InspectorTest.logMessage);
Protocol.Debugger.stepInto();
await waitPauseAndDumpLocation();
await Protocol.Debugger.resume();
},
async function testNotResolvedPromise() {
Protocol.Runtime.evaluate({ expression: 'testNotResolvedPromise()' });
await waitPauseAndDumpLocation();
Protocol.Debugger.stepOver();
await waitPauseAndDumpLocation();
Protocol.Debugger.scheduleStepIntoAsync().then(InspectorTest.logMessage);
Protocol.Debugger.stepInto();
await waitPauseAndDumpLocation();
await Protocol.Debugger.resume();
},
async function testTwoAsyncTasks() {
Protocol.Runtime.evaluate({ expression: 'testTwoAsyncTasks()' });
await waitPauseAndDumpLocation();
Protocol.Debugger.scheduleStepIntoAsync().then(InspectorTest.logMessage);
Protocol.Debugger.resume();
await waitPauseAndDumpLocation();
await Protocol.Debugger.resume();
},
async function testTwoTasksAndGoToSecond() {
Protocol.Runtime.evaluate({ expression: 'testTwoAsyncTasks()' });
await waitPauseAndDumpLocation();
Protocol.Debugger.stepOver();
await waitPauseAndDumpLocation();
Protocol.Debugger.stepOver();
await waitPauseAndDumpLocation();
Protocol.Debugger.scheduleStepIntoAsync().then(InspectorTest.logMessage);
Protocol.Debugger.resume();
await waitPauseAndDumpLocation();
await Protocol.Debugger.resume();
},
async function testTwoAsyncTasksWithBreak() {
Protocol.Runtime.evaluate({ expression: 'testTwoAsyncTasksWithBreak()' });
await waitPauseAndDumpLocation();
Protocol.Debugger.stepOver();
await waitPauseAndDumpLocation();
Protocol.Debugger.scheduleStepIntoAsync().then(InspectorTest.logMessage);
Protocol.Debugger.resume();
await waitPauseAndDumpLocation();
Protocol.Debugger.scheduleStepIntoAsync().then(InspectorTest.logMessage);
Protocol.Debugger.resume();
await waitPauseAndDumpLocation();
await Protocol.Debugger.resume();
},
async function testPromiseAll() {
Protocol.Runtime.evaluate({ expression: 'testPromiseAll()' });
await waitPauseAndDumpLocation();
Protocol.Debugger.stepOver();
await waitPauseAndDumpLocation();
Protocol.Debugger.scheduleStepIntoAsync().then(InspectorTest.logMessage);
Protocol.Debugger.stepOver();
await waitPauseAndDumpLocation();
await Protocol.Debugger.resume();
},
async function testWithBlackboxedCode() {
Protocol.Runtime.evaluate({ expression: 'testBlackboxedCreatePromise()' });
await waitPauseAndDumpLocation();
Protocol.Debugger.stepOver();
await waitPauseAndDumpLocation();
await Protocol.Debugger.setBlackboxPatterns({patterns: ['framework\.js'] });
Protocol.Debugger.scheduleStepIntoAsync().then(InspectorTest.logMessage);
Protocol.Debugger.stepOver();
await waitPauseAndDumpLocation();
await Protocol.Debugger.resume();
}
]);
async function waitPauseAndDumpLocation() {
var message = await Protocol.Debugger.oncePaused();
InspectorTest.log('paused at:');
InspectorTest.logSourceLocation(message.params.callFrames[0].location);
return message;
}