Source code
Revision control
Copy as Markdown
Other Tools
// Test that collectCoverageInfo cannot be changed when debuggee frames are on the stack.
var g = newGlobal({ newCompartment: true });
var dbg = new Debugger(g);
// Test 1: Cannot enable collectCoverageInfo while debuggee frame is on stack
g.evaluate(`
function testFunc() {
return 42;
}
`);
var enableAttempted = false;
dbg.onDebuggerStatement = function(frame) {
var caught = false;
try {
dbg.collectCoverageInfo = true;
enableAttempted = true;
} catch (e) {
caught = true;
assertEq(e.message, "can't start debugging: a debuggee script is on the stack");
}
assertEq(caught, true);
assertEq(enableAttempted, false);
};
g.evaluate(`
function enableTest() {
debugger;
}
enableTest();
`);
dbg.onDebuggerStatement = undefined;
// Test 2: Cannot disable collectCoverageInfo while debuggee frame is on stack
dbg.collectCoverageInfo = true;
var disableAttempted = false;
dbg.onDebuggerStatement = function(frame) {
var caught = false;
try {
dbg.collectCoverageInfo = false;
disableAttempted = true;
} catch (e) {
caught = true;
assertEq(e.message, "can't start debugging: a debuggee script is on the stack");
}
assertEq(caught, true);
assertEq(disableAttempted, false);
};
g.evaluate(`
function disableTest() {
debugger;
}
disableTest();
`);
dbg.onDebuggerStatement = undefined;
// Test 3: Can disable collectCoverageInfo when no debuggee frames are on stack
dbg.collectCoverageInfo = false;
// Test 4: Can enable collectCoverageInfo when no debuggee frames are on stack
dbg.collectCoverageInfo = true;
dbg.collectCoverageInfo = false;