| // 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. | |
| let {session, contextGroup, Protocol} = InspectorTest.start('Checks Debugger.scheduleStepIntoAsync.'); | |
| contextGroup.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`); | |
| contextGroup.addScript(` | |
| function createPromise() { | |
| return Promise.resolve().then(v => v * 3).then(v => v * 4); | |
| } | |
| //# sourceURL=framework.js`) | |
| session.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:'); | |
| session.logSourceLocation(message.params.callFrames[0].location); | |
| return message; | |
| } |