| // 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 how breakpoints and side effects live together.'); |
| |
| (async function main() { |
| session.setupScriptMap(); |
| Protocol.Debugger.enable(); |
| Protocol.Runtime.evaluate({expression: ` |
| var a = 1; |
| function foo() { |
| a = 2; |
| } |
| //# sourceURL=test.js`}); |
| Protocol.Debugger.setBreakpointByUrl({url: 'test.js', lineNumber: 3}); |
| |
| InspectorTest.log('Test breakpoint, should pause inside foo:'); |
| { |
| const evaluatePromise = Protocol.Runtime.evaluate({expression: 'foo()'}); |
| const {params:{callFrames}} = await Protocol.Debugger.oncePaused(); |
| session.logCallFrames(callFrames); |
| Protocol.Debugger.resume(); |
| await evaluatePromise; |
| } |
| |
| InspectorTest.log('\nRun foo with no side effects:'); |
| { |
| const {result:{result}} = await Protocol.Runtime.evaluate({ |
| expression: 'foo()', |
| throwOnSideEffect: true |
| }); |
| InspectorTest.logMessage(result); |
| } |
| |
| InspectorTest.log('\nTest breakpoint after run with side effect check:'); |
| { |
| const evaluatePromise = Protocol.Runtime.evaluate({expression: 'foo()'}); |
| const {params:{callFrames}} = await Protocol.Debugger.oncePaused(); |
| session.logCallFrames(callFrames); |
| Protocol.Debugger.resume(); |
| await evaluatePromise; |
| } |
| |
| await Protocol.Debugger.disable(); |
| |
| InspectorTest.log('\nRun foo with no side effects after debugger disabled:'); |
| { |
| const {result:{result}} = await Protocol.Runtime.evaluate({ |
| expression: 'foo()', |
| throwOnSideEffect: true |
| }); |
| InspectorTest.logMessage(result); |
| } |
| |
| InspectorTest.completeTest(); |
| })(); |