| Index: test/inspector/debugger/stepping-with-natives-and-frameworks.js
|
| diff --git a/test/inspector/debugger/stepping-with-natives-and-frameworks.js b/test/inspector/debugger/stepping-with-natives-and-frameworks.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..fd79bb1db9b947cfb3c16fb722ced718ec0f32a8
|
| --- /dev/null
|
| +++ b/test/inspector/debugger/stepping-with-natives-and-frameworks.js
|
| @@ -0,0 +1,300 @@
|
| +// 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('Stepping with natives and frameworks.');
|
| +
|
| +InspectorTest.addScript(`
|
| +function callAll() {
|
| + for (var f of arguments)
|
| + f();
|
| +}
|
| +//# sourceURL=framework.js`);
|
| +
|
| +InspectorTest.setupScriptMap();
|
| +InspectorTest.dumpProtocolCommand('Debugger.pause');
|
| +InspectorTest.dumpProtocolCommand('Debugger.stepInto');
|
| +InspectorTest.dumpProtocolCommand('Debugger.stepOver');
|
| +InspectorTest.dumpProtocolCommand('Debugger.stepOut');
|
| +InspectorTest.dumpProtocolCommand('Debugger.resume');
|
| +
|
| +Protocol.Debugger.enable();
|
| +Protocol.Debugger.setBlackboxPatterns({patterns: ['framework\.js']});
|
| +InspectorTest.runAsyncTestSuite([
|
| + async function testNativeCodeStepOut() {
|
| + Protocol.Debugger.pause();
|
| + Protocol.Runtime.evaluate({expression: '[1,2].map(v => v);'});
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + Protocol.Debugger.stepInto();
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + Protocol.Debugger.stepOut();
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + await Protocol.Debugger.resume();
|
| + },
|
| +
|
| + async function testNativeCodeStepOver() {
|
| + Protocol.Debugger.pause();
|
| + Protocol.Runtime.evaluate({expression: '[1,2].map(v => v);'});
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + Protocol.Debugger.stepInto();
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + Protocol.Debugger.stepOver();
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + Protocol.Debugger.stepOver();
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + Protocol.Debugger.stepOver();
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + Protocol.Debugger.stepOver();
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + await Protocol.Debugger.resume();
|
| + },
|
| +
|
| + async function testNativeCodeStepInto() {
|
| + Protocol.Debugger.pause();
|
| + Protocol.Runtime.evaluate({expression: '[1,2].map(v => v);'});
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + Protocol.Debugger.stepInto();
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + Protocol.Debugger.stepInto();
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + Protocol.Debugger.stepInto();
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + Protocol.Debugger.stepInto();
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + Protocol.Debugger.stepInto();
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + await Protocol.Debugger.resume();
|
| + },
|
| +
|
| + async function testFrameworkCodeStepInto() {
|
| + Protocol.Debugger.pause();
|
| + Protocol.Runtime.evaluate({expression: 'callAll(() => 1, () => 2);'});
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + Protocol.Debugger.stepInto();
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + Protocol.Debugger.stepInto();
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + Protocol.Debugger.stepInto();
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + Protocol.Debugger.stepInto();
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + Protocol.Debugger.stepInto();
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + await Protocol.Debugger.resume();
|
| + },
|
| +
|
| + async function testFrameworkCodeStepOver() {
|
| + Protocol.Debugger.pause();
|
| + Protocol.Runtime.evaluate({expression: 'callAll(() => 1, () => 2);'});
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + Protocol.Debugger.stepInto();
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + Protocol.Debugger.stepOver();
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + Protocol.Debugger.stepOver();
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + Protocol.Debugger.stepOver();
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + Protocol.Debugger.stepOver();
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + await Protocol.Debugger.resume();
|
| + },
|
| +
|
| + async function testFrameworkCodeStepOut() {
|
| + Protocol.Debugger.pause();
|
| + Protocol.Runtime.evaluate({expression: 'callAll(() => 1, () => 2);'});
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + Protocol.Debugger.stepInto();
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + Protocol.Debugger.stepOut();
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + Protocol.Debugger.stepOut();
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + await Protocol.Debugger.resume();
|
| + },
|
| +
|
| + async function testFrameworkNextCallDeeperStepOut() {
|
| + Protocol.Debugger.pause();
|
| + Protocol.Runtime.evaluate({
|
| + expression: 'callAll(() => 1, callAll.bind(null, () => 2));'});
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + Protocol.Debugger.stepInto();
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + Protocol.Debugger.stepOut();
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + Protocol.Debugger.stepOut();
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + await Protocol.Debugger.resume();
|
| + },
|
| +
|
| + async function testFrameworkNextCallDeeperStepOutSameFunction() {
|
| + await Protocol.Runtime.evaluate({expression: 'foo = () => 1'});
|
| + Protocol.Debugger.pause();
|
| + Protocol.Runtime.evaluate({
|
| + expression: 'callAll(foo, callAll.bind(null, foo));'});
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + Protocol.Debugger.stepInto();
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + Protocol.Debugger.stepOut();
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + await Protocol.Debugger.resume();
|
| + },
|
| +
|
| + async function testFrameworkNextCallDeeperStepInto() {
|
| + Protocol.Debugger.pause();
|
| + Protocol.Runtime.evaluate({
|
| + expression: 'callAll(() => 1, callAll.bind(null, () => 2));'});
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + Protocol.Debugger.stepInto();
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + Protocol.Debugger.stepOver();
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + Protocol.Debugger.stepOver();
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + Protocol.Debugger.stepOver();
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + Protocol.Debugger.stepOver();
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + await Protocol.Debugger.resume();
|
| + },
|
| +
|
| + async function testFrameworkNextCallDeeperStepOver() {
|
| + Protocol.Debugger.pause();
|
| + Protocol.Runtime.evaluate({
|
| + expression: 'callAll(() => 1, callAll.bind(null, () => 2));'});
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + Protocol.Debugger.stepInto();
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + Protocol.Debugger.stepOver();
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + Protocol.Debugger.stepOver();
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + Protocol.Debugger.stepOver();
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + Protocol.Debugger.stepOver();
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + await Protocol.Debugger.resume();
|
| + },
|
| +
|
| + async function testFrameworkCurrentCallDeeperStepOut() {
|
| + Protocol.Debugger.pause();
|
| + Protocol.Runtime.evaluate({
|
| + expression: 'callAll(callAll.bind(null, () => 1), () => 2);'});
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + Protocol.Debugger.stepInto();
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + Protocol.Debugger.stepOut();
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + Protocol.Debugger.stepOut();
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + await Protocol.Debugger.resume();
|
| + },
|
| +
|
| + async function testFrameworkCurrentCallDeeperStepOutSameFunction() {
|
| + await Protocol.Runtime.evaluate({expression: 'foo = () => 1'});
|
| + Protocol.Debugger.pause();
|
| + Protocol.Runtime.evaluate({
|
| + expression: 'callAll(callAll.bind(null, foo), foo);'});
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + Protocol.Debugger.stepInto();
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + Protocol.Debugger.stepOut();
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + await Protocol.Debugger.resume();
|
| + },
|
| +
|
| + async function testFrameworkCurrentCallDeeperStepOver() {
|
| + Protocol.Debugger.pause();
|
| + Protocol.Runtime.evaluate({
|
| + expression: 'callAll(callAll.bind(null, () => 1), () => 2);'});
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + Protocol.Debugger.stepInto();
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + Protocol.Debugger.stepOver();
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + Protocol.Debugger.stepOver();
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + Protocol.Debugger.stepOver();
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + Protocol.Debugger.stepOver();
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + await Protocol.Debugger.resume();
|
| + },
|
| +
|
| + async function testFrameworkCurrentCallDeeperStepInto() {
|
| + Protocol.Debugger.pause();
|
| + Protocol.Runtime.evaluate({
|
| + expression: 'callAll(callAll.bind(null, () => 1), () => 2);'});
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + Protocol.Debugger.stepInto();
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + Protocol.Debugger.stepInto();
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + Protocol.Debugger.stepInto();
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + Protocol.Debugger.stepInto();
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + Protocol.Debugger.stepInto();
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + await Protocol.Debugger.resume();
|
| + },
|
| +
|
| + async function testFrameworkStepOverMixed() {
|
| + await Protocol.Runtime.evaluate({expression: 'foo = () => 1'});
|
| + Protocol.Debugger.pause();
|
| + Protocol.Runtime.evaluate({
|
| + expression: 'callAll(foo, foo, () => 2);'});
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + Protocol.Debugger.stepInto();
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + Protocol.Debugger.stepOver();
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + Protocol.Debugger.stepOver();
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + Protocol.Debugger.stepOver();
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + Protocol.Debugger.stepOver();
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + Protocol.Debugger.stepOver();
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + Protocol.Debugger.stepOver();
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + await Protocol.Debugger.resume();
|
| + },
|
| +
|
| + async function testFrameworkStepOutMixed() {
|
| + await Protocol.Runtime.evaluate({expression: 'foo = () => 1'});
|
| + Protocol.Debugger.pause();
|
| + Protocol.Runtime.evaluate({
|
| + expression: 'callAll(foo, foo, () => 2);'});
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + Protocol.Debugger.stepInto();
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + Protocol.Debugger.stepOut();
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + Protocol.Debugger.stepOut();
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + await Protocol.Debugger.resume();
|
| + },
|
| +
|
| + async function testStepOutFrameworkSameFunctionAtReturn() {
|
| + await Protocol.Runtime.evaluate({expression: 'foo = () => 1'});
|
| + Protocol.Debugger.pause();
|
| + Protocol.Runtime.evaluate({
|
| + expression: 'callAll(foo, foo, () => 2);'});
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + Protocol.Debugger.stepInto();
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + Protocol.Debugger.stepOver();
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + Protocol.Debugger.stepOut();
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + Protocol.Debugger.stepOut();
|
| + await logPauseLocation(await Protocol.Debugger.oncePaused());
|
| + await Protocol.Debugger.resume();
|
| + }
|
| +]);
|
| +
|
| +function logPauseLocation(message) {
|
| + return InspectorTest.logSourceLocation(message.params.callFrames[0].location);
|
| +}
|
|
|