// 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('Checks provisional breakpoints by hash in anonymous scripts'); session.setupScriptMap(); InspectorTest.runAsyncTestSuite([ async function testNextScriptParsed() { await Protocol.Debugger.enable(); // set breakpoint in anonymous script.. Protocol.Runtime.evaluate({expression: 'function foo(){}'}); let {params:{hash}} = await Protocol.Debugger.onceScriptParsed(); let {result:{breakpointId}} = await Protocol.Debugger.setBreakpointByUrl({ scriptHash: hash, lineNumber: 0, columnNumber: 15 }); // evaluate the same anonymous script again.. Protocol.Runtime.evaluate({expression: 'function foo(){}'}); // run function and check Debugger.paused event.. let evaluation = Protocol.Runtime.evaluate({expression: 'foo()'}); let result = await Promise.race([evaluation, Protocol.Debugger.oncePaused()]); if (result.method !== 'Debugger.paused') { InspectorTest.log('FAIL: breakpoint was ignored'); } else { await session.logSourceLocation(result.params.callFrames[0].location); } // remove breakpoint and run again.. await Protocol.Debugger.removeBreakpoint({breakpointId}); evaluation = Protocol.Runtime.evaluate({expression: 'foo()'}); result = await Promise.race([evaluation, Protocol.Debugger.oncePaused()]); if (result.method === 'Debugger.paused') { InspectorTest.log('FAIL: breakpoint was not removed'); } await Protocol.Debugger.disable(); }, async function testPreviousScriptParsed() { await Protocol.Debugger.enable(); // run script and store function to global list.. await Protocol.Runtime.evaluate({expression: 'var list = list ? list.concat(foo) : [foo]; function foo(){}'}); // run same script again.. Protocol.Runtime.evaluate({expression: 'var list = list ? list.concat(foo) : [foo]; function foo(){}'}); let {params:{hash}} = await Protocol.Debugger.onceScriptParsed(); // set breakpoint by hash of latest script.. let {result:{breakpointId}} = await Protocol.Debugger.setBreakpointByUrl({ scriptHash: hash, lineNumber: 0, columnNumber: 49 }); // call each function in global list and wait for Debugger.paused events.. let evaluation = Protocol.Runtime.evaluate({expression: 'list.forEach(x => x())'}); let result = await Promise.race([evaluation, Protocol.Debugger.oncePaused()]); while (result.method === 'Debugger.paused') { await session.logSourceLocation(result.params.callFrames[0].location); Protocol.Debugger.resume(); result = await Promise.race([evaluation, Protocol.Debugger.oncePaused()]); } // remove breakpoint and call functions again.. await Protocol.Debugger.removeBreakpoint({breakpointId}); evaluation = Protocol.Runtime.evaluate({expression: 'foo()'}); result = await Promise.race([evaluation, Protocol.Debugger.oncePaused()]); if (result.method === 'Debugger.paused') { InspectorTest.log('FAIL: breakpoint was not removed'); } await Protocol.Debugger.disable(); } ]);