Index: test/inspector/debugger/get-possible-breakpoints-restrict-to-function.js |
diff --git a/test/inspector/debugger/get-possible-breakpoints-restrict-to-function.js b/test/inspector/debugger/get-possible-breakpoints-restrict-to-function.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..1ce440594d127cd471e963f94e2e4f969166d6bc |
--- /dev/null |
+++ b/test/inspector/debugger/get-possible-breakpoints-restrict-to-function.js |
@@ -0,0 +1,120 @@ |
+// Copyright 2016 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 Debugger.getPossibleBreakpoints with ignoreNestedFunctions'); |
+ |
+var source = ` |
+function test() { |
+ Array.from([1,2]).map(() => 1).filter(() => true); |
+ function nested1() { |
+ Array.from([1,2]).map(() => 1).filter(() => true); |
+ } |
+ function nested2() { |
+ Array.from([1,2]).map(() => 1).filter(() => true); |
+ } |
+ nested1(); |
+ nested2(); |
+} |
+//# sourceURL=test.js`; |
+InspectorTest.addScript(source); |
+ |
+var scriptId; |
+Protocol.Debugger.onceScriptParsed().then(message => { |
+ if (message.params.url === 'test.js') |
+ scriptId = message.params.scriptId; |
+}).then(() => InspectorTest.runTestSuite(tests)); |
+ |
+InspectorTest.setupScriptMap(); |
+Protocol.Debugger.onPaused(dumpBreakLocationInSourceAndResume); |
+ |
+Protocol.Debugger.enable(); |
+var tests = [ |
+ function testWholeFunction(next) { |
+ Protocol.Debugger.getPossibleBreakpoints({ start: location(1, 18), ignoreNestedFunctions: false }) |
+ .then(dumpAllLocations) |
+ .then(next); |
+ }, |
+ |
+ function testWholeFunctionWithoutNested(next) { |
+ Protocol.Debugger.getPossibleBreakpoints({ start: location(1, 18), ignoreNestedFunctions: true }) |
+ .then(dumpAllLocations) |
+ .then(next); |
+ }, |
+ |
+ function testPartOfFunctionWithoutNested(next) { |
+ Protocol.Debugger.getPossibleBreakpoints({ start: location(1, 18), end: location(2, 18), ignoreNestedFunctions: true }) |
+ .then(dumpAllLocations) |
+ .then(next); |
+ }, |
+ |
+ function testNestedFunction(next) { |
+ Protocol.Debugger.getPossibleBreakpoints({ start: location(4, 0), ignoreNestedFunctions: true }) |
+ .then(dumpAllLocations) |
+ .then(setAllBreakpoints) |
+ .then(() => InspectorTest.log('Run test() to check breakpoints..')) |
+ .then(() => Protocol.Runtime.evaluate({ expression: 'test()' })) |
+ .then(next); |
+ } |
+]; |
+ |
+function location(lineNumber, columnNumber) { |
+ return { lineNumber: lineNumber, columnNumber: columnNumber, scriptId: scriptId }; |
+} |
+ |
+function setAllBreakpoints(message) { |
+ var promises = []; |
+ for (var location of message.result.locations) |
+ promises.push(Protocol.Debugger.setBreakpoint({ location: location }).then(checkBreakpoint)); |
+ return Promise.all(promises); |
+} |
+ |
+function checkBreakpoint(message) { |
+ if (message.error) { |
+ InspectorTest.log('FAIL: error in setBreakpoint'); |
+ InspectorTest.logMessage(message); |
+ return; |
+ } |
+ var id_data = message.result.breakpointId.split(':'); |
+ if (parseInt(id_data[1]) !== message.result.actualLocation.lineNumber || parseInt(id_data[2]) !== message.result.actualLocation.columnNumber) { |
+ InspectorTest.log('FAIL: possible breakpoint was resolved in another location'); |
+ } |
+} |
+ |
+function dumpAllLocations(message) { |
+ if (message.error) { |
+ InspectorTest.logMessage(message); |
+ return; |
+ } |
+ |
+ var sourceLines = source.split('\n') |
+ var lineOffsets = Array(sourceLines.length).fill(0); |
+ for (var location of message.result.locations) { |
+ var lineNumber = location.lineNumber; |
+ var columnNumber = location.columnNumber; |
+ var line = sourceLines[lineNumber] || ''; |
+ var offset = lineOffsets[lineNumber]; |
+ line = line.slice(0, columnNumber + offset) + '#' + line.slice(columnNumber + offset); |
+ ++lineOffsets[lineNumber]; |
+ sourceLines[lineNumber] = line; |
+ } |
+ InspectorTest.log(sourceLines.join('\n')); |
+ return message; |
+} |
+ |
+function dumpBreakLocationInSourceAndResume(message) { |
+ InspectorTest.logCallFrames([ message.params.callFrames[0] ]); |
+ |
+ var location = message.params.callFrames[0].location; |
+ var sourceLines = source.split('\n') |
+ |
+ var lineNumber = location.lineNumber |
+ var columnNumber = location.columnNumber; |
+ |
+ var line = sourceLines[lineNumber]; |
+ line = line.slice(0, columnNumber) + '^' + line.slice(columnNumber); |
+ sourceLines[lineNumber] = line; |
+ InspectorTest.log(sourceLines.join('\n')); |
+ InspectorTest.log(''); |
+ Protocol.Debugger.resume(); |
+} |