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