blob: 7d97753d5949afe76ef5c20c017ddb8688b8dc57 [file] [log] [blame]
// 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();
}
]);