| // 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'); | |
| } | |
| } |