Source code

Revision control

Copy as Markdown

Other Tools

var global = newGlobal({newCompartment: true});
var dbg = Debugger(global);
dbg.onDebuggerStatement = onDebuggerStatement;
global.eval(`
debugger;
function f() {
var o = {}; // 4
o.a; o.a; o.a; o.a; // 6
o.a; o.a; // 7
o.a; o.a; o.a; // 8
o.a; // 9
} // 10
`);
function onDebuggerStatement(frame) {
const fScript = frame.script.getChildScripts()[0];
const allBreakpoints = fScript.getPossibleBreakpoints();
assertEq(allBreakpoints.length, 12);
assertBPCount({ line: 4 }, 1);
assertBPCount({ line: 5 }, 0);
assertBPCount({ line: 6 }, 4);
assertBPCount({ line: 7 }, 2);
assertBPCount({ line: 8 }, 3);
assertBPCount({ line: 9 }, 1);
assertBPCount({ line: 10 }, 1);
assertBPCount({ line: 6, minColumn: 8 }, 3);
assertBPCount({ line: 6, maxColumn: 17 }, 3);
assertBPCount({ line: 6, minColumn: 8, maxColumn: 17 }, 2);
assertBPError({ line: 1, minLine: 1 }, "line", "not allowed alongside 'minLine'/'maxLine'");
assertBPError({ line: 1, maxLine: 1 }, "line", "not allowed alongside 'minLine'/'maxLine'");
assertBPError({ line: "1" }, "line", "not an integer");
assertBPCount({ minLine: 9 }, 2);
assertBPCount({ minLine: 9, minColumn: 1 }, 2);
assertBPCount({ minLine: 9, minColumn: 9 }, 1);
assertBPError({ minLine: "1" }, "minLine", "not an integer");
assertBPError({ minColumn: 2 }, "minColumn", "not allowed without 'line' or 'minLine'");
assertBPError({ minLine: 1, minColumn: "2" }, "minColumn", "not a positive integer");
assertBPError({ minLine: 1, minColumn: 0 }, "minColumn", "not a positive integer");
assertBPError({ minLine: 1, minColumn: -1 }, "minColumn", "not a positive integer");
assertBPCount({ maxLine: 7 }, 5);
assertBPCount({ maxLine: 7, maxColumn: 1 }, 5);
assertBPCount({ maxLine: 7, maxColumn: 9 }, 6);
assertBPError({ maxLine: "1" }, "maxLine", "not an integer");
assertBPError({ maxColumn: 2 }, "maxColumn", "not allowed without 'line' or 'maxLine'");
assertBPError({ maxLine: 1, maxColumn: "2" }, "maxColumn", "not a positive integer");
assertBPError({ maxLine: 1, maxColumn: 0 }, "maxColumn", "not a positive integer");
assertBPError({ maxLine: 1, maxColumn: -1 }, "maxColumn", "not a positive integer");
assertBPCount({ minLine: 6, maxLine: 8 }, 6);
assertBPCount({ minLine: 6, minColumn: 9, maxLine: 8 }, 5);
assertBPCount({ minLine: 6, maxLine: 8, maxColumn: 9 }, 7);
assertBPCount({ minLine: 6, minColumn: 9, maxLine: 8, maxColumn: 9 }, 6);
assertBPCount({
minOffset: fScript.getPossibleBreakpoints({ line: 6 })[3].offset,
}, 8);
assertBPError({ minOffset: "1" }, "minOffset", "not an integer");
assertBPCount({
maxOffset: fScript.getPossibleBreakpoints({ line: 6 })[3].offset,
}, 4);
assertBPError({ maxOffset: "1" }, "maxOffset", "not an integer");
assertBPCount({
minOffset: fScript.getPossibleBreakpoints({ line: 6 })[2].offset,
maxOffset: fScript.getPossibleBreakpoints({ line: 7 })[1].offset,
}, 3);
function assertBPError(query, field, message) {
try {
fScript.getPossibleBreakpoints(query);
assertEq(false, true);
} catch (err) {
assertEq(err.message, `getPossibleBreakpoints' '${field}' is ${message}`);
}
}
function assertBPCount(query, count) {
assertEq(fScript.getPossibleBreakpoints(query).length, count);
}
};