70 lines
1.8 KiB
JavaScript
70 lines
1.8 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
/* eslint-disable no-shadow, max-nested-callbacks */
|
|
|
|
"use strict";
|
|
|
|
/**
|
|
* Check that we can set breakpoints in columns, not just lines.
|
|
*/
|
|
|
|
add_task(
|
|
threadFrontTest(async ({ threadFront, debuggee }) => {
|
|
const packet = await executeOnNextTickAndWaitForPause(
|
|
() => evaluateTestCode(debuggee),
|
|
threadFront
|
|
);
|
|
const source = await getSourceById(threadFront, packet.frame.where.actor);
|
|
const location = {
|
|
sourceUrl: source.url,
|
|
line: debuggee.line0 + 1,
|
|
column: 55,
|
|
};
|
|
|
|
let timesBreakpointHit = 0;
|
|
threadFront.setBreakpoint(location, {});
|
|
|
|
while (timesBreakpointHit < 3) {
|
|
await resume(threadFront);
|
|
const packet = await waitForPause(threadFront);
|
|
await testAssertions(
|
|
packet,
|
|
debuggee,
|
|
source,
|
|
location,
|
|
timesBreakpointHit
|
|
);
|
|
|
|
timesBreakpointHit++;
|
|
}
|
|
|
|
threadFront.removeBreakpoint(location);
|
|
await threadFront.resume();
|
|
})
|
|
);
|
|
|
|
function evaluateTestCode(debuggee) {
|
|
// prettier-ignore
|
|
Cu.evalInSandbox(
|
|
"var line0 = Error().lineNumber;\n" +
|
|
"(function () { debugger; this.acc = 0; for (var i = 0; i < 3; i++) this.acc++; }());",
|
|
debuggee
|
|
);
|
|
}
|
|
|
|
async function testAssertions(
|
|
packet,
|
|
debuggee,
|
|
source,
|
|
location,
|
|
timesBreakpointHit
|
|
) {
|
|
Assert.equal(packet.why.type, "breakpoint");
|
|
Assert.equal(packet.frame.where.actor, source.actor);
|
|
Assert.equal(packet.frame.where.line, location.line);
|
|
Assert.equal(packet.frame.where.column, location.column);
|
|
|
|
Assert.equal(debuggee.acc, timesBreakpointHit);
|
|
const environment = await packet.frame.getEnvironment();
|
|
Assert.equal(environment.bindings.variables.i.value, timesBreakpointHit);
|
|
}
|