Index: test/inspector/debugger/framework-stepping.js |
diff --git a/test/inspector/debugger/framework-stepping.js b/test/inspector/debugger/framework-stepping.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..831a4491eff4e5636b8964a670573781dfc1de2e |
--- /dev/null |
+++ b/test/inspector/debugger/framework-stepping.js |
@@ -0,0 +1,113 @@ |
+// 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 stepping with blackboxed frames on stack'); |
+ |
+InspectorTest.addScript( |
+ ` |
+function frameworkCall(funcs) { |
+ for (var f of funcs) f(); |
+} |
+ |
+function frameworkBreakAndCall(funcs) { |
+ debugger; |
+ for (var f of funcs) f(); |
+} |
+//# sourceURL=framework.js`, |
+ 8, 4); |
+ |
+InspectorTest.addScript( |
+ ` |
+function userFoo() { |
+ return 1; |
+} |
+ |
+function userBoo() { |
+ return 2; |
+} |
+ |
+function testStepFromUser() { |
+ frameworkCall([userFoo, userBoo]) |
+} |
+ |
+function testStepFromFramework() { |
+ frameworkBreakAndCall([userFoo, userBoo]); |
+} |
+//# sourceURL=user.js`, |
+ 21, 4); |
+ |
+InspectorTest.setupScriptMap(); |
+ |
+Protocol.Debugger.enable() |
+ .then( |
+ () => Protocol.Debugger.setBlackboxPatterns( |
+ {patterns: ['framework\.js']})) |
+ .then(() => InspectorTest.runTestSuite(testSuite)); |
+ |
+var testSuite = [ |
+ function testStepIntoFromUser(next) { |
+ schedulePauseOnNextStatement('', ''); |
+ test('testStepFromUser()', [ |
+ 'print', // before testStepFromUser call |
+ 'stepInto', 'stepInto', 'print', // userFoo |
+ 'stepInto', 'stepInto', 'print', // userBoo |
+ 'stepInto', 'stepInto', 'print' // testStepFromUser |
+ ]).then(next); |
+ }, |
+ |
+ function testStepOverFromUser(next) { |
+ schedulePauseOnNextStatement('', ''); |
+ test('testStepFromUser()', [ |
+ 'print', // before testStepFromUser call |
+ 'stepInto', 'stepInto', 'print', // userFoo |
+ 'stepOver', 'stepOver', 'print', // userBoo |
+ 'stepOver', 'stepOver', 'print' // testStepFromUser |
+ ]).then(next); |
+ }, |
+ |
+ function testStepOutFromUser(next) { |
+ 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') { |
+ InspectorTest.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'}); |
+} |