node/deps/v8/test/inspector/debugger/set-script-source-debug-evaluate-closure.js
Michaël Zasso edd537ca2f deps: update V8 to 10.8.168.20
PR-URL: https://github.com/nodejs/node/pull/45230
Reviewed-By: Jiawen Geng <technicalcute@gmail.com>
Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com>
2022-11-19 09:11:32 +00:00

65 lines
1.9 KiB
JavaScript

// Copyright 2020 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.
const {session, contextGroup, Protocol} =
InspectorTest.start('Check that setScriptSource doesn\'t affect debug-evaluate block listing');
const script = `
// INSERT NEWLINES HERE
function f() {
let a = 3; () => a; // context allocated.
return function g() {
let a = 42; // stack-allocated. Shadowing context-allocated from f.
return function h() {
// Give h a context.
let x = 5; () => x;
return function i() {
debugger;
};
};
};
}
(((f())())())();
`;
const updatedScript = script.replace('// INSERT NEWLINES HERE', '\n\n\n');
(async function test() {
await Protocol.Debugger.enable();
await Protocol.Runtime.enable();
const promise = Protocol.Debugger.oncePaused();
contextGroup.addScript(script);
const { params: { callFrames: [{ callFrameId, functionLocation: { scriptId } }] } } = await promise;
// Create a closure that returns `a` and stash it on the global.
await Protocol.Debugger.evaluateOnCallFrame({
callFrameId,
expression: `globalThis['foo'] = () => a;`
});
await Protocol.Debugger.resume();
// Expect a ReferenceError.
const { result: { result: result1 } } = await Protocol.Runtime.evaluate({
expression: 'globalThis.foo();'
});
InspectorTest.logMessage(result1);
// Move function 'h' but don't change it.
const { result: { status } } = await Protocol.Debugger.setScriptSource({
scriptId,
scriptSource: updatedScript,
});
InspectorTest.log(`Debugger.setScriptSource: ${status}`);
// Still expect a ReferenceError.
const { result: { result: result2 } } = await Protocol.Runtime.evaluate({
expression: 'globalThis.foo();'
});
InspectorTest.logMessage(result2);
InspectorTest.completeTest();
})();