/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at . */
// Tests that breakpoints set in the pretty printed files display and paused
// correctly.
"use strict";
add_task(async function () {
const dbg = await initDebugger("doc-pretty.html", "pretty.js");
await selectSource(dbg, "pretty.js");
await prettyPrint(dbg);
info(
"Add breakpoint in funcWithMultipleBreakableColumns, on the for-loop line"
);
const LINE_INDEX_TO_BREAK_ON = 15;
const prettySourceFileName = "pretty.js:formatted";
await addBreakpoint(dbg, prettySourceFileName, LINE_INDEX_TO_BREAK_ON);
const prettySource = findSource(dbg, prettySourceFileName);
info("Check that multiple column breakpoints can be set");
const columnBreakpointMarkers = await waitForAllElements(
dbg,
"columnBreakpoints"
);
/*
* We're pausing on the following line, which should have those breakpoints (marked with ➤)
*
* for( ➤let i=0; ➤i < items.length; ➤i++ ) {
*
*/
is(
columnBreakpointMarkers.length,
3,
"We have the expected numbers of possible column breakpoints"
);
info("Enable the second column breakpoint");
columnBreakpointMarkers[1].click();
await waitForBreakpointCount(dbg, 2);
await waitForAllElements(dbg, "breakpointItems", 2);
info("Check that we do pause at expected locations");
invokeInTab("funcWithMultipleBreakableColumns");
info("We pause on the first column breakpoint (before `i` init)");
await waitForPaused(dbg);
await waitForInlinePreviews(dbg);
await assertPausedAtSourceAndLine(
dbg,
prettySource.id,
LINE_INDEX_TO_BREAK_ON,
16
);
await resume(dbg);
info(
"We pause at the second column breakpoint, before the first loop iteration"
);
await waitForPaused(dbg);
await waitForInlinePreviews(dbg);
await assertPausedAtSourceAndLine(
dbg,
prettySource.id,
LINE_INDEX_TO_BREAK_ON,
19
);
const assertScopesForSecondColumnBreakpoint = topBlockItems =>
assertScopes(dbg, [
"Block",
["", "Window"],
...topBlockItems,
"funcWithMultipleBreakableColumns",
["arguments", "Arguments"],
["items", "(2) […]"],
]);
await assertScopesForSecondColumnBreakpoint([["i", "0"]]);
await resume(dbg);
info(
"We pause at the second column breakpoint, before the second loop iteration"
);
await waitForPaused(dbg);
await waitForInlinePreviews(dbg);
await assertPausedAtSourceAndLine(
dbg,
prettySource.id,
LINE_INDEX_TO_BREAK_ON,
19
);
await assertScopesForSecondColumnBreakpoint([["i", "1"]]);
await resume(dbg);
info(
"We pause at the second column breakpoint, before we exit the loop (`items.length` is 2, so the condition will fail)"
);
await waitForPaused(dbg);
await waitForInlinePreviews(dbg);
await assertPausedAtSourceAndLine(
dbg,
prettySource.id,
LINE_INDEX_TO_BREAK_ON,
19
);
await assertScopesForSecondColumnBreakpoint([["i", "2"]]);
await resume(dbg);
info("Remove all breakpoints");
await clickGutter(dbg, LINE_INDEX_TO_BREAK_ON);
await waitForBreakpointCount(dbg, 0);
ok(
!findAllElements(dbg, "columnBreakpoints").length,
"There is no column breakpoints anymore after clicking on the gutter"
);
});