// 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. let {session, contextGroup, Protocol} = InspectorTest.start('Break locations around function calls'); contextGroup.addScript(` function foo1() {} function foo2() {} function foo3() {} //# sourceURL=test.js`); InspectorTest.logProtocolCommandCalls('Debugger.stepInto'); session.setupScriptMap(); InspectorTest.runAsyncTestSuite([ async function testFunctionCallAsArgument() { await testExpression('foo2(foo1())'); }, async function testFunctionCallAsArgument() { await testExpression('foo2(foo1());'); }, async function testFunctionCallAsArguments() { await testExpression('foo3(foo1(), foo2());'); }, async function testFunctionCallInBinaryExpression() { await testExpression('foo3(foo1() + foo2());'); }, ]); async function logPauseLocation() { let {params:{callFrames}} = await Protocol.Debugger.oncePaused(); session.logSourceLocation(callFrames[0].location); } async function testExpression(expression) { await Protocol.Debugger.enable(); let wrapper = `function test() { ${expression} } //# sourceURL=test-function.js`; Protocol.Runtime.evaluate({expression: wrapper}); let {params:{scriptId}} = await Protocol.Debugger.onceScriptParsed(); let {result:{locations}} = await Protocol.Debugger.getPossibleBreakpoints({ start: {lineNumber: 0, columnNumber : 0, scriptId}}); locations = locations.filter(location => location.lineNumber === 1); InspectorTest.log('Break locations in expression:'); await session.logBreakLocations(locations); for (let location of locations) { InspectorTest.log('Breakpoint at:'); await session.logSourceLocation(location); let {result:{breakpointId}} = await Protocol.Debugger.setBreakpoint({ location}); let evaluate = Protocol.Runtime.evaluate({ expression: 'test();\n//# sourceURL=expr.js'}); InspectorTest.log('Break at:'); await logPauseLocation(); Protocol.Debugger.stepInto(); await logPauseLocation(); await Protocol.Debugger.removeBreakpoint({breakpointId}); Protocol.Debugger.resume(); await evaluate; } InspectorTest.log('Breakpoint at expression line.') let {result:{breakpointId}} = await Protocol.Debugger.setBreakpointByUrl({ lineNumber: 1, url: 'test-function.js'}); let evaluate = Protocol.Runtime.evaluate({ expression: 'test();\n//# sourceURL=expr.js'}); await logPauseLocation(); Protocol.Debugger.stepInto(); await logPauseLocation(); await Protocol.Debugger.removeBreakpoint({breakpointId}); Protocol.Debugger.resume(); await evaluate; await Protocol.Debugger.disable(); }