Index: third_party/WebKit/LayoutTests/inspector-protocol/debugger/stepping-with-blackboxed-ranges.js |
diff --git a/third_party/WebKit/LayoutTests/inspector-protocol/debugger/stepping-with-blackboxed-ranges.js b/third_party/WebKit/LayoutTests/inspector-protocol/debugger/stepping-with-blackboxed-ranges.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..497572845515e1147502aa8c6fd359a45f8f5172 |
--- /dev/null |
+++ b/third_party/WebKit/LayoutTests/inspector-protocol/debugger/stepping-with-blackboxed-ranges.js |
@@ -0,0 +1,131 @@ |
+(async function(testRunner) { |
+ let {page, session, dp} = await testRunner.startBlank(''); |
+ |
+ function printCallFrames(response) { |
+ var callFrames = response.params.callFrames; |
+ var topCallFrame = callFrames[0]; |
+ if (topCallFrame.functionName.startsWith('blackboxed')) |
+ testRunner.log('FAIL: blackboxed function in top call frame'); |
+ for (var callFrame of callFrames) |
+ testRunner.log(callFrame.functionName + ': ' + callFrame.location.lineNumber + ':' + callFrame.location.columnNumber); |
+ testRunner.log(''); |
+ } |
+ |
+ function printError(response) { |
+ if (response.error) |
+ testRunner.log(response.error.message); |
+ } |
+ |
+ await session.evaluate( |
+`function blackboxedBoo() |
+{ |
+ var a = 42; |
+ var b = foo(); |
+ return a + b; |
+} |
+//# sourceURL=blackboxed-script.js |
+`); |
+ |
+ await session.evaluate( |
+`function notBlackboxedFoo() |
+{ |
+ var a = 42; |
+ var b = blackboxedBoo(); |
+ return a + b; |
+} |
+ |
+function blackboxedFoo() |
+{ |
+ var a = 42; |
+ var b = notBlackboxedFoo(); |
+ return a + b; |
+} |
+ |
+function notBlackboxedBoo() |
+{ |
+ var a = 42; |
+ var b = blackboxedFoo(); |
+ return a + b; |
+} |
+//# sourceURL=mixed-source.js |
+`); |
+ |
+ await session.evaluate(` |
+ |
+ |
+ |
+ |
+ |
+function testFunction() |
+{ |
+ notBlackboxedBoo(); // for setup ranges and stepOut |
+ notBlackboxedBoo(); // for stepIn |
+} |
+ |
+function foo() |
+{ |
+ debugger; |
+ return 239; |
+} |
+ `); |
+ |
+ await dp.Debugger.enable(); |
+ session.evaluate('setTimeout(testFunction, 0);'); |
+ |
+ var response = await dp.Debugger.oncePaused(); |
+ printCallFrames(response); |
+ var scriptId = response.params.callFrames[2].location.scriptId; |
+ |
+ printError(await dp.Debugger.setBlackboxedRanges({ |
+ scriptId: response.params.callFrames[1].location.scriptId, |
+ positions: [{lineNumber: 0, columnNumber: 0}] // blackbox ranges for blackboxed.js |
+ })); |
+ |
+ var incorrectPositions = [ |
+ [{lineNumber: 0, columnNumber: 0}, {lineNumber: 0, columnNumber: 0}], |
+ [{lineNumber: 0, columnNumber: 1}, {lineNumber: 0, columnNumber: 0}], |
+ [{lineNumber: 0, columnNumber: -1}], |
+ ]; |
+ for (var positions of incorrectPositions) { |
+ testRunner.log('Try to set positions: ' + JSON.stringify(positions)); |
+ printError(await dp.Debugger.setBlackboxedRanges({scriptId, positions})); |
+ } |
+ |
+ await dp.Debugger.setBlackboxedRanges({ |
+ scriptId, |
+ positions: [{lineNumber: 6, columnNumber: 0}, {lineNumber: 14, columnNumber: 0}] // blackbox ranges for mixed.js |
+ }); |
+ |
+ testRunner.log('action: stepOut'); |
+ dp.Debugger.stepOut(); |
+ printCallFrames(await dp.Debugger.oncePaused()); |
+ testRunner.log('action: stepOut'); |
+ dp.Debugger.stepOut(); |
+ printCallFrames(await dp.Debugger.oncePaused()); |
+ testRunner.log('action: stepOut'); |
+ dp.Debugger.stepOut(); |
+ printCallFrames(await dp.Debugger.oncePaused()); |
+ testRunner.log('action: stepInto'); |
+ dp.Debugger.stepInto(); |
+ printCallFrames(await dp.Debugger.oncePaused()); |
+ testRunner.log('action: stepOver'); |
+ dp.Debugger.stepOver(); |
+ await dp.Debugger.oncePaused(); |
+ testRunner.log('action: stepInto'); |
+ dp.Debugger.stepInto(); |
+ printCallFrames(await dp.Debugger.oncePaused()); |
+ testRunner.log('action: stepOver'); |
+ dp.Debugger.stepOver(); |
+ await dp.Debugger.oncePaused(); |
+ testRunner.log('action: stepInto'); |
+ dp.Debugger.stepInto(); |
+ printCallFrames(await dp.Debugger.oncePaused()); |
+ testRunner.log('action: stepOver'); |
+ dp.Debugger.stepOver(); |
+ await dp.Debugger.oncePaused(); |
+ testRunner.log('action: stepInto'); |
+ dp.Debugger.stepInto(); |
+ printCallFrames(await dp.Debugger.oncePaused()); |
+ await dp.Debugger.resume(); |
+ testRunner.completeTest(); |
+}) |