| // 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. |
| |
| let {session, contextGroup, Protocol} = InspectorTest.start('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`; |
| contextGroup.addScript(source); |
| |
| var scriptId; |
| Protocol.Debugger.onceScriptParsed().then(message => { |
| if (message.params.url === 'test.js') |
| scriptId = message.params.scriptId; |
| }).then(() => InspectorTest.runTestSuite(tests)); |
| |
| session.setupScriptMap(); |
| Protocol.Debugger.onPaused(message => { |
| session.logSourceLocation(message.params.callFrames[0].location); |
| Protocol.Debugger.resume(); |
| }); |
| |
| Protocol.Debugger.enable(); |
| var tests = [ |
| function testWholeFunction(next) { |
| Protocol.Debugger.getPossibleBreakpoints({ start: location(1, 18), ignoreNestedFunctions: false }) |
| .then(message => session.logBreakLocations(message.result.locations)) |
| .then(next); |
| }, |
| |
| function testWholeFunctionWithoutNested(next) { |
| Protocol.Debugger.getPossibleBreakpoints({ start: location(1, 18), ignoreNestedFunctions: true }) |
| .then(message => session.logBreakLocations(message.result.locations)) |
| .then(next); |
| }, |
| |
| function testPartOfFunctionWithoutNested(next) { |
| Protocol.Debugger.getPossibleBreakpoints({ start: location(1, 18), end: location(2, 18), ignoreNestedFunctions: true }) |
| .then(message => session.logBreakLocations(message.result.locations)) |
| .then(next); |
| }, |
| |
| function testNestedFunction(next) { |
| Protocol.Debugger.getPossibleBreakpoints({ start: location(4, 0), ignoreNestedFunctions: true }) |
| .then(message => session.logBreakLocations(message.result.locations)) |
| .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(locations) { |
| var promises = []; |
| for (var location of 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'); |
| } |
| } |