blob: 0a11e8977efd8ab9cede25cab613753cdd3ef858 [file] [log] [blame]
// 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('Change return string constant at breakpoint');
contextGroup.addScript(
`SlimFunction = eval(
'(function f() {\\n ' +
' return \\'Cat\\';\\n' +
'})\\n' +
'//# sourceURL=eval.js\\n');`);
(async function test() {
session.setupScriptMap();
let scriptPromise = new Promise(resolve => {
Protocol.Debugger.onScriptParsed(({params}) => {
if (params.url === 'eval.js') {
resolve(params);
Protocol.Debugger.onScriptParsed(null);
}
});
});
Protocol.Debugger.enable();
const script = await scriptPromise;
InspectorTest.log('Set breakpoint inside f() and call function..');
const {result:{actualLocation}} = await Protocol.Debugger.setBreakpoint({
location: { scriptId: script.scriptId, lineNumber: 1, columnNumber: 0}});
const evalPromise = Protocol.Runtime.evaluate({expression: 'SlimFunction()'});
const {params:{callFrames}} = await Protocol.Debugger.oncePaused();
InspectorTest.log('Paused at:');
await session.logSourceLocation(callFrames[0].location);
InspectorTest.log('Change Cat to Capybara..');
const {result:{scriptSource}} = await Protocol.Debugger.getScriptSource({
scriptId: script.scriptId
});
const {result:{callFrames:[topFrame],stackChanged}} =
await Protocol.Debugger.setScriptSource({
scriptId: script.scriptId,
scriptSource: scriptSource.replace(`'Cat'`, `'Capybara'`)
});
InspectorTest.log('Paused at:');
await session.logSourceLocation(topFrame.location, true);
InspectorTest.log('Resume and check return value..');
Protocol.Debugger.resume();
InspectorTest.log(
`SlimFunction() = ${(await evalPromise).result.result.value}`);
InspectorTest.completeTest();
})();