| Index: test/inspector/debugger/step-into-async.js
|
| diff --git a/test/inspector/debugger/step-into-async.js b/test/inspector/debugger/step-into-async.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..fc8274c82a010cdac883568080612541e486ca85
|
| --- /dev/null
|
| +++ b/test/inspector/debugger/step-into-async.js
|
| @@ -0,0 +1,164 @@
|
| +// 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.
|
| +
|
| +print('Checks stepIntoAsync for Promise.then');
|
| +
|
| +InspectorTest.addScript(`
|
| +function foo() {
|
| +}
|
| +
|
| +function boo() {
|
| +}
|
| +
|
| +function basic(next) {
|
| + var p = new Promise(r => resolve = r);
|
| + debugger;
|
| + p.then(foo).then(next);
|
| + resolve();
|
| + foo();
|
| +}
|
| +
|
| +function promiseResolve(next) {
|
| + debugger;
|
| + Promise.resolve().then(foo).then(next);
|
| +}
|
| +
|
| +function promiseReject(next) {
|
| + debugger;
|
| + Promise.reject().catch(foo).then(next);
|
| +}
|
| +
|
| +function promiseAll(next) {
|
| + debugger;
|
| + Promise.all([ Promise.resolve() ]).then(foo).then(next);
|
| +}
|
| +
|
| +function promiseRace(next) {
|
| + debugger;
|
| + Promise.race([ Promise.resolve() ]).then(foo).then(next);
|
| +}
|
| +
|
| +function twoChainedCallbacks(next) {
|
| + debugger;
|
| + Promise.resolve().then(boo).then(foo).then(next);
|
| +}
|
| +
|
| +function newPromise(next) {
|
| + var resolve;
|
| + debugger;
|
| + new Promise(r => resolve = r).then(boo).then(next);
|
| + resolve();
|
| +}
|
| +
|
| +function returnedPromise(next) {
|
| + function promise() {
|
| + return Promise.resolve();
|
| + }
|
| + debugger;
|
| + promise().then(boo).then(next);
|
| +}
|
| +
|
| +function asyncAwait(next) {
|
| + async function foo2() {
|
| + await Promise.resolve();
|
| + }
|
| +
|
| + async function foo1() {
|
| + await foo2();
|
| + next();
|
| + }
|
| + debugger;
|
| + foo1();
|
| +}
|
| +
|
| +function runTest(test) {
|
| + return new Promise(function runTest(resolve) { test(resolve); });
|
| +}
|
| +//# sourceURL=test.js`, 7, 26);
|
| +
|
| +InspectorTest.setupScriptMap();
|
| +var actions = [];
|
| +Protocol.Debugger.onPaused(message => {
|
| + var frames = message.params.callFrames.filter(frame => frame.functionName !== 'runTest');
|
| + InspectorTest.logCallFrames(frames);
|
| + delete message.params.callFrames;
|
| + if (message.params.data) InspectorTest.logMessage(message);
|
| + InspectorTest.log('');
|
| + var action = actions.shift() || 'resume';
|
| + InspectorTest.log('Executing: ' + action);
|
| + Protocol.Debugger[action]().then(message => {
|
| + if (!message.error) return;
|
| + InspectorTest.logMessage(message);
|
| + Protocol.Debugger.resume();
|
| + });
|
| +});
|
| +
|
| +Protocol.Debugger.enable();
|
| +InspectorTest.runTestSuite([
|
| + function testBasic(next) {
|
| + actions = [ 'stepInto', 'stepInto', 'stepIntoAsync' ];
|
| + Protocol.Runtime.evaluate({ expression: 'runTest(basic)', awaitPromise: true })
|
| + .then(next);
|
| + },
|
| +
|
| + function testPromiseResolve(next) {
|
| + actions = [ 'stepInto', 'stepInto', 'stepIntoAsync' ];
|
| + Protocol.Runtime.evaluate({ expression: 'runTest(promiseResolve)', awaitPromise: true })
|
| + .then(next);
|
| + },
|
| +
|
| + function testPromiseReject(next) {
|
| + actions = [ 'stepInto', 'stepInto', 'stepIntoAsync' ];
|
| + Protocol.Runtime.evaluate({ expression: 'runTest(promiseReject)', awaitPromise: true })
|
| + .then(next);
|
| + },
|
| +
|
| + function testPromiseAll(next) {
|
| + actions = [ 'stepInto', 'stepInto', 'stepIntoAsync' ];
|
| + Protocol.Runtime.evaluate({ expression: 'runTest(promiseAll)', awaitPromise: true })
|
| + .then(next);
|
| + },
|
| +
|
| + function testPromiseRace(next) {
|
| + actions = [ 'stepInto', 'stepInto', 'stepIntoAsync' ];
|
| + Protocol.Runtime.evaluate({ expression: 'runTest(promiseRace)', awaitPromise: true })
|
| + .then(next);
|
| + },
|
| +
|
| + function testTwoChainedCallbacks(next) {
|
| + actions = [ 'stepInto', 'stepInto', 'stepInto', 'stepIntoAsync' ];
|
| + Protocol.Runtime.evaluate({ expression: 'runTest(twoChainedCallbacks)', awaitPromise: true })
|
| + .then(next);
|
| + },
|
| +
|
| + function testNewPromise(next) {
|
| + actions = [ 'stepInto', 'stepInto', 'stepOut', 'stepInto', 'stepIntoAsync' ];
|
| + Protocol.Runtime.evaluate({ expression: 'runTest(newPromise)', awaitPromise: true })
|
| + .then(next);
|
| + },
|
| +
|
| + function testReturnedPromise(next) {
|
| + actions = [ 'stepInto', 'stepInto', 'stepOut', 'stepInto', 'stepIntoAsync' ];
|
| + Protocol.Runtime.evaluate({ expression: 'runTest(returnedPromise)', awaitPromise: true })
|
| + .then(next);
|
| + },
|
| +
|
| + function testAsyncAwait(next) {
|
| + actions = [ 'stepInto', 'stepInto', 'stepInto', 'stepInto', 'stepInto', 'stepInto', 'stepInto' ];
|
| + Protocol.Runtime.evaluate({ expression: 'runTest(asyncAwait)', awaitPromise: true })
|
| + .then(next);
|
| + },
|
| +
|
| + function testResumeWorkAfterBreak(next) {
|
| + actions = [ 'stepInto', 'stepInto' ];
|
| + Protocol.Runtime.evaluate({ expression: 'runTest(basic)', awaitPromise: true })
|
| + .then(next);
|
| + },
|
| +
|
| + function testStepIntoAsyncWithoutScheduled(next) {
|
| + actions = [ 'stepIntoAsync' ];
|
| + Protocol.Runtime.evaluate({ expression: 'runTest(basic)', awaitPromise: true })
|
| + .then(next);
|
| + }
|
| +]);
|
|
|