// Copyright 2018 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('Tests Debugger.setBreakpointOnFunctionCall.'); (async function test() { Protocol.Debugger.enable(); { const {result: {result: {objectId}}} = await Protocol.Runtime.evaluate( {expression: 'function foo(a,b){ return a + b; }; foo'}); InspectorTest.log('set breakpoint on function call'); const {result: {breakpointId}} = await Protocol.Debugger.setBreakpointOnFunctionCall({objectId}); InspectorTest.log('call function'); Protocol.Runtime.evaluate({expression: 'foo(1,2)'}); const {params: {hitBreakpoints}} = await Protocol.Debugger.oncePaused(); InspectorTest.log('paused'); InspectorTest.log( `hitBreakpoints contains id: ${hitBreakpoints[0] === breakpointId}`); await Protocol.Debugger.resume(); InspectorTest.log('remove breakpoint'); const result = await Protocol.Debugger.removeBreakpoint({breakpointId}); InspectorTest.logMessage(result); InspectorTest.log('call function again'); await Protocol.Runtime.evaluate({expression: 'foo(1,2)'}); InspectorTest.log('evaluate finished without pause'); } { const {result: {result: {objectId}}} = await Protocol.Runtime.evaluate( {expression: 'function foo(a,b){ return a + b; }; foo'}); InspectorTest.log('set breakpoint on function call'); const {result: {breakpointId}} = await Protocol.Debugger.setBreakpointOnFunctionCall({objectId}); InspectorTest.log('set breakpoint on same function call'); InspectorTest.logMessage( await Protocol.Debugger.setBreakpointOnFunctionCall({objectId})); await Protocol.Debugger.removeBreakpoint({breakpointId}); } { const {result: {result: {objectId}}} = await Protocol.Runtime.evaluate({expression: 'Array.prototype.push'}); InspectorTest.log('set breakpoint on function call with condition'); const {result: {breakpointId}} = await Protocol.Debugger.setBreakpointOnFunctionCall( {objectId, condition: 'arguments[0] === 2'}); InspectorTest.log('call function, condition is false'); await Protocol.Runtime.evaluate({expression: '[].push(0)'}); InspectorTest.log('evaluate finished without pause'); InspectorTest.log('call function, condition is true'); Protocol.Runtime.evaluate({expression: '[].push(2)'}); const {params: {hitBreakpoints}} = await Protocol.Debugger.oncePaused(); InspectorTest.log('paused'); InspectorTest.log( `hitBreakpoints contains id: ${hitBreakpoints[0] === breakpointId}`); await Protocol.Debugger.resume(); InspectorTest.log('remove breakpoint'); const result = await Protocol.Debugger.removeBreakpoint({breakpointId}); InspectorTest.logMessage(result); InspectorTest.log('call function again'); Protocol.Runtime.evaluate({expression: '[].push(2)'}); InspectorTest.log('evaluate finished without pause'); } InspectorTest.completeTest(); })();