// 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. // Flags: --no-always-opt let {session, contextGroup, Protocol} = InspectorTest.start('Tests Debugger.setScriptSource'); session.setupScriptMap(); function foo(a,b,c) { var x = a; debugger; return x + b; } function boo() { debugger; var x = 1; return x + 2; } InspectorTest.runAsyncTestSuite([ async function addLineAfter() { await Protocol.Debugger.enable(); Protocol.Runtime.evaluate({expression: foo.toString()}); let {params:{scriptId}} = await Protocol.Debugger.onceScriptParsed(); Protocol.Runtime.evaluate({ expression: 'setTimeout(() => foo(1,2,3), 0)//# sourceURL=test.js'}); let {params:{callFrames}} = await Protocol.Debugger.oncePaused(); await session.logSourceLocation(callFrames[0].location); await replaceInSource(scriptId, 'debugger;', 'debugger;\nvar x = 3;'); Protocol.Debugger.resume(); await Protocol.Debugger.oncePaused(); await Protocol.Debugger.disable(); }, async function addLineBefore() { await Protocol.Debugger.enable(); Protocol.Runtime.evaluate({expression: foo.toString()}); let {params:{scriptId}} = await Protocol.Debugger.onceScriptParsed(); Protocol.Runtime.evaluate({ expression: 'setTimeout(foo, 0)//# sourceURL=test.js'}); let {params:{callFrames}} = await Protocol.Debugger.oncePaused(); await session.logSourceLocation(callFrames[0].location); await replaceInSource(scriptId, 'debugger;', 'var x = 3;\ndebugger;'); Protocol.Debugger.resume(); await Protocol.Debugger.oncePaused(); await Protocol.Debugger.disable(); }, async function breakAtFirstLineAddLineAfter() { await Protocol.Debugger.enable(); Protocol.Runtime.evaluate({expression: boo.toString()}); let {params:{scriptId}} = await Protocol.Debugger.onceScriptParsed(); Protocol.Runtime.evaluate({ expression: 'setTimeout(boo, 0)//# sourceURL=test.js'}); let {params:{callFrames}} = await Protocol.Debugger.oncePaused(); await session.logSourceLocation(callFrames[0].location); await replaceInSource(scriptId, 'debugger;', 'debugger;\nvar x = 3;'); await Protocol.Debugger.disable(); }, async function breakAtFirstLineAddLineBefore() { await Protocol.Debugger.enable(); Protocol.Runtime.evaluate({expression: boo.toString()}); let {params:{scriptId}} = await Protocol.Debugger.onceScriptParsed(); Protocol.Runtime.evaluate({ expression: 'setTimeout(boo, 0)//# sourceURL=test.js'}); let {params:{callFrames}} = await Protocol.Debugger.oncePaused(); await session.logSourceLocation(callFrames[0].location); await replaceInSource(scriptId, 'debugger;', 'var x = 3;\ndebugger;'); await Protocol.Debugger.disable(); } ]); async function replaceInSource(scriptId, oldString, newString) { InspectorTest.log('---'); let {result:{scriptSource}} = await Protocol.Debugger.getScriptSource({scriptId}); let {result} = await Protocol.Debugger.setScriptSource({ scriptId, scriptSource: scriptSource.replace(oldString, newString) }); InspectorTest.log('Break location after LiveEdit:'); await session.logSourceLocation(result.callFrames[0].location, true); InspectorTest.log('stackChanged: ' + result.stackChanged); if (result.stackChanged) { InspectorTest.log('Protocol.Debugger.stepInto'); Protocol.Debugger.stepInto(); var {params:{callFrames}} = await Protocol.Debugger.oncePaused(); await session.logSourceLocation(callFrames[0].location); } }