mirror of
https://github.com/nodejs/node.git
synced 2025-05-15 17:51:35 +00:00

PR-URL: https://github.com/nodejs/node/pull/45230 Reviewed-By: Jiawen Geng <technicalcute@gmail.com> Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com>
201 lines
6.4 KiB
JavaScript
201 lines
6.4 KiB
JavaScript
// Copyright 2022 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('Line breakpoints for yield');
|
|
|
|
// clang-format off
|
|
const url = 'line-breakpoint-yield.js';
|
|
contextGroup.addScript(`
|
|
var obj = {
|
|
foo() {
|
|
debugger;
|
|
},
|
|
|
|
*barGenerator() {
|
|
yield this.foo();
|
|
},
|
|
|
|
*bazGenerator() {
|
|
yield this.foo();
|
|
},
|
|
|
|
async* barAsyncGenerator() {
|
|
yield this.foo();
|
|
},
|
|
|
|
async* bazAsyncGenerator() {
|
|
yield this.foo();
|
|
},
|
|
|
|
*minifiedGenerator(){yield this.foo();}
|
|
};
|
|
`, 0, 0, url);
|
|
// clang-format on
|
|
|
|
session.setupScriptMap();
|
|
InspectorTest.runAsyncTestSuite([
|
|
async function testYieldInGeneratorWithLeadingWhitespace() {
|
|
await Promise.all([
|
|
Protocol.Debugger.enable(),
|
|
Protocol.Runtime.enable(),
|
|
]);
|
|
InspectorTest.log(
|
|
'Setting breakpoint on `yield this.foo()` in `obj.barGenerator`');
|
|
const {result: {breakpointId}} =
|
|
await Protocol.Debugger.setBreakpointByUrl({
|
|
url,
|
|
lineNumber: 7,
|
|
columnNumber: 0,
|
|
});
|
|
InspectorTest.log('Calling `obj.barGenerator().next()`');
|
|
const pausedPromise = Protocol.Debugger.oncePaused();
|
|
const evalPromise = Protocol.Runtime.evaluate({
|
|
expression: 'obj.barGenerator().next()',
|
|
});
|
|
const {params: {hitBreakpoints}} = await pausedPromise;
|
|
if (hitBreakpoints?.length === 1 && hitBreakpoints[0] === breakpointId) {
|
|
InspectorTest.log('Hit breakpoint before calling into `this.foo`');
|
|
} else {
|
|
InspectorTest.log('Missed breakpoint before calling into `this.foo`');
|
|
}
|
|
await Promise.all([
|
|
Protocol.Debugger.removeBreakpoint({breakpointId}),
|
|
Protocol.Debugger.disable(),
|
|
evalPromise,
|
|
Protocol.Runtime.disable(),
|
|
]);
|
|
},
|
|
|
|
async function testYieldInGeneratorWithoutLeadingWhitespace() {
|
|
await Promise.all([
|
|
Protocol.Debugger.enable(),
|
|
Protocol.Runtime.enable(),
|
|
]);
|
|
InspectorTest.log(
|
|
'Setting breakpoint on `await this.foo()` in `obj.bazGenerator`');
|
|
const {result: {breakpointId}} =
|
|
await Protocol.Debugger.setBreakpointByUrl({
|
|
url,
|
|
lineNumber: 11,
|
|
columnNumber: 0,
|
|
});
|
|
InspectorTest.log('Calling `obj.bazGenerator().next()`');
|
|
const pausedPromise = Protocol.Debugger.oncePaused();
|
|
const evalPromise = Protocol.Runtime.evaluate({
|
|
expression: 'obj.bazGenerator().next()',
|
|
});
|
|
const {params: {hitBreakpoints}} = await pausedPromise;
|
|
if (hitBreakpoints?.length === 1 && hitBreakpoints[0] === breakpointId) {
|
|
InspectorTest.log('Hit breakpoint before calling into `this.foo`');
|
|
} else {
|
|
InspectorTest.log('Missed breakpoint before calling into `this.foo`');
|
|
}
|
|
await Promise.all([
|
|
Protocol.Debugger.removeBreakpoint({breakpointId}),
|
|
Protocol.Debugger.disable(),
|
|
evalPromise,
|
|
Protocol.Runtime.disable(),
|
|
]);
|
|
},
|
|
|
|
async function testYieldInAsyncGeneratorWithLeadingWhitespace() {
|
|
await Promise.all([
|
|
Protocol.Debugger.enable(),
|
|
Protocol.Runtime.enable(),
|
|
]);
|
|
InspectorTest.log(
|
|
'Setting breakpoint on `yield this.foo()` in `obj.barAsyncGenerator`');
|
|
const {result: {breakpointId}} =
|
|
await Protocol.Debugger.setBreakpointByUrl({
|
|
url,
|
|
lineNumber: 15,
|
|
columnNumber: 0,
|
|
});
|
|
InspectorTest.log('Calling `obj.barAsyncGenerator().next()`');
|
|
const pausedPromise = Protocol.Debugger.oncePaused();
|
|
const evalPromise = Protocol.Runtime.evaluate({
|
|
expression: 'obj.barAsyncGenerator().next()',
|
|
awaitPromise: true,
|
|
});
|
|
const {params: {hitBreakpoints}} = await pausedPromise;
|
|
if (hitBreakpoints?.length === 1 && hitBreakpoints[0] === breakpointId) {
|
|
InspectorTest.log('Hit breakpoint before calling into `this.foo`');
|
|
} else {
|
|
InspectorTest.log('Missed breakpoint before calling into `this.foo`');
|
|
}
|
|
await Promise.all([
|
|
Protocol.Debugger.removeBreakpoint({breakpointId}),
|
|
Protocol.Debugger.disable(),
|
|
evalPromise,
|
|
Protocol.Runtime.disable(),
|
|
]);
|
|
},
|
|
|
|
async function testYieldInAsyncGeneratorWithoutLeadingWhitespace() {
|
|
await Promise.all([
|
|
Protocol.Debugger.enable(),
|
|
Protocol.Runtime.enable(),
|
|
]);
|
|
InspectorTest.log(
|
|
'Setting breakpoint on `yield this.foo()` in `obj.bazAsyncGenerator`');
|
|
const {result: {breakpointId}} =
|
|
await Protocol.Debugger.setBreakpointByUrl({
|
|
url,
|
|
lineNumber: 19,
|
|
columnNumber: 0,
|
|
});
|
|
InspectorTest.log('Calling `obj.bazAsyncGenerator().next()`');
|
|
const pausedPromise = Protocol.Debugger.oncePaused();
|
|
const evalPromise = Protocol.Runtime.evaluate({
|
|
expression: 'obj.bazAsyncGenerator().next()',
|
|
awaitPromise: true,
|
|
});
|
|
const {params: {hitBreakpoints}} = await pausedPromise;
|
|
if (hitBreakpoints?.length === 1 && hitBreakpoints[0] === breakpointId) {
|
|
InspectorTest.log('Hit breakpoint before calling into `this.foo`');
|
|
} else {
|
|
InspectorTest.log('Missed breakpoint before calling into `this.foo`');
|
|
}
|
|
await Promise.all([
|
|
Protocol.Debugger.removeBreakpoint({breakpointId}),
|
|
Protocol.Debugger.disable(),
|
|
evalPromise,
|
|
Protocol.Runtime.disable(),
|
|
]);
|
|
},
|
|
|
|
async function testYieldInMinifiedGenerator() {
|
|
await Promise.all([
|
|
Protocol.Debugger.enable(),
|
|
Protocol.Runtime.enable(),
|
|
]);
|
|
InspectorTest.log(
|
|
'Setting breakpoint on `yield this.foo()` in `obj.minifiedGenerator`');
|
|
const {result: {breakpointId}} =
|
|
await Protocol.Debugger.setBreakpointByUrl({
|
|
url,
|
|
lineNumber: 22,
|
|
columnNumber: 23,
|
|
});
|
|
InspectorTest.log('Calling `obj.minifiedGenerator().next()`');
|
|
const pausedPromise = Protocol.Debugger.oncePaused();
|
|
const evalPromise = Protocol.Runtime.evaluate({
|
|
expression: 'obj.minifiedGenerator().next()',
|
|
});
|
|
const {params: {hitBreakpoints}} = await pausedPromise;
|
|
if (hitBreakpoints?.length === 1 && hitBreakpoints[0] === breakpointId) {
|
|
InspectorTest.log('Hit breakpoint before calling into `this.foo`');
|
|
} else {
|
|
InspectorTest.log('Missed breakpoint before calling into `this.foo`');
|
|
}
|
|
await Promise.all([
|
|
Protocol.Debugger.removeBreakpoint({breakpointId}),
|
|
Protocol.Debugger.disable(),
|
|
evalPromise,
|
|
Protocol.Runtime.disable(),
|
|
]);
|
|
},
|
|
]);
|