| // 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 stepping with blackboxed frames on stack'); |
| |
| contextGroup.addScript( |
| ` |
| function frameworkCall(funcs) { |
| for (var f of funcs) f(); |
| } |
| |
| function frameworkBreakAndCall(funcs) { |
| inspector.breakProgram('', ''); |
| for (var f of funcs) f(); |
| } |
| //# sourceURL=framework.js`, |
| 8, 4); |
| |
| contextGroup.addScript( |
| ` |
| function userFoo() { |
| return 1; |
| } |
| |
| function userBoo() { |
| return 2; |
| } |
| |
| function testStepFromUser() { |
| frameworkCall([userFoo, userBoo]) |
| } |
| |
| function testStepFromFramework() { |
| frameworkBreakAndCall([userFoo, userBoo]); |
| } |
| //# sourceURL=user.js`, |
| 21, 4); |
| |
| session.setupScriptMap(); |
| |
| Protocol.Debugger.enable() |
| .then( |
| () => Protocol.Debugger.setBlackboxPatterns( |
| {patterns: ['framework\.js']})) |
| .then(() => InspectorTest.runTestSuite(testSuite)); |
| |
| var testSuite = [ |
| function testStepIntoFromUser(next) { |
| contextGroup.schedulePauseOnNextStatement('', ''); |
| test('testStepFromUser()', [ |
| 'print', // before testStepFromUser call |
| 'stepInto', 'stepInto', 'print', // userFoo |
| 'stepInto', 'stepInto', 'print', // userBoo |
| 'stepInto', 'stepInto', 'print' // testStepFromUser |
| ]).then(next); |
| }, |
| |
| function testStepOverFromUser(next) { |
| contextGroup.schedulePauseOnNextStatement('', ''); |
| test('testStepFromUser()', [ |
| 'print', // before testStepFromUser call |
| 'stepInto', 'stepInto', 'print', // userFoo |
| 'stepOver', 'stepOver', 'print', // userBoo |
| 'stepOver', 'stepOver', 'print' // testStepFromUser |
| ]).then(next); |
| }, |
| |
| function testStepOutFromUser(next) { |
| contextGroup.schedulePauseOnNextStatement('', ''); |
| test('testStepFromUser()', [ |
| 'print', // before testStepFromUser call |
| 'stepInto', 'stepInto', 'print', // userFoo |
| 'stepOut', 'print' // testStepFromUser |
| ]).then(next); |
| }, |
| |
| function testStepIntoFromFramework(next) { |
| test('testStepFromFramework()', [ |
| 'print', // frameworkBreakAndCall |
| 'stepInto', 'print', // userFoo |
| ]).then(next); |
| }, |
| |
| function testStepOverFromFramework(next) { |
| test('testStepFromFramework()', [ |
| 'print', // frameworkBreakAndCall |
| 'stepOver', 'print', // testStepFromFramework |
| ]).then(next); |
| }, |
| |
| function testStepOutFromFramework(next) { |
| test('testStepFromFramework()', [ |
| 'print', // frameworkBreakAndCall |
| 'stepOut', 'print', // testStepFromFramework |
| ]).then(next); |
| } |
| ]; |
| |
| function test(entryExpression, actions) { |
| Protocol.Debugger.onPaused(message => { |
| var action = actions.shift() || 'resume'; |
| if (action === 'print') { |
| session.logCallFrames(message.params.callFrames); |
| InspectorTest.log(''); |
| action = actions.shift() || 'resume'; |
| } |
| if (action) InspectorTest.log(`Executing ${action}...`); |
| Protocol.Debugger[action](); |
| }); |
| return Protocol.Runtime.evaluate( |
| {expression: entryExpression + '//# sourceURL=expr.js'}); |
| } |