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