Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

/* Any copyright is dedicated to the Public Domain.
"use strict";
/* import-globals-from helper-backward-compat.js */
Services.scriptloader.loadSubScript(
CHROME_URL_ROOT + "helper-backward-compat.js",
this
);
Services.scriptloader.loadSubScript(
this
);
const SCRIPT_FILE = "debugger.js";
// Marker on the line where the breakpoint should be set, in
// backward_compat_test_server/fixtures/debugger.js.
const BREAKPOINT_MARKER = "// BREAKPOINT";
// Check the Debugger against a remote target: the source of the remote page is
// listed, and a breakpoint is hit when the page is interacted with on the
// server. This mirrors the Debugger part of the "Inspect a remote target" step
// of the manual smoke test, see devtools/docs/contributor/release.md.
addCompatTask(async function (config) {
const setup = await openCompatToolbox(config, "debugger.html");
const { toolbox, serverHandle } = setup;
info("Select the debugger");
await toolbox.selectTool("jsdebugger");
const dbg = createDebuggerContext(toolbox);
info(`Wait for ${SCRIPT_FILE} to be listed`);
await waitForSource(dbg, SCRIPT_FILE);
info(`Select ${SCRIPT_FILE}`);
await selectSource(dbg, SCRIPT_FILE);
// selectSource only waits for the source to be selected, the breakpoint
// cannot be set until its content has been fetched from the server.
await waitForLoadedSource(dbg, SCRIPT_FILE);
const breakpointLine = getMarkedLine(dbg);
ok(breakpointLine, `Found the breakpoint marker on line ${breakpointLine}`);
info(`Add a breakpoint on line ${breakpointLine}`);
await addBreakpoint(dbg, SCRIPT_FILE, breakpointLine);
info("Click on the button in the page on the server");
const onClickDone = runDevToolsServerCommand(config, "click", {
selector: "#click-me",
handle: serverHandle,
});
info("Wait for the debugger to pause");
await waitForPaused(dbg);
const source = findSource(dbg, SCRIPT_FILE);
await assertPausedAtSourceAndLine(dbg, source.id, breakpointLine);
info("Resume");
await resume(dbg);
info("Wait for the click command to resolve");
await onClickDone;
await removeBreakpoint(dbg, source.id, breakpointLine);
await closeCompatToolbox(config, setup);
});
/**
* Retrieve the line number for the `// BREAKPOINT` comment in the source.
*
* @param {Debugger} dbg
* The debugger frontend instance.
* @returns {number|null} Returns the 1-based line number of BREAKPOINT_MARKER
* in the selected source, or null if the marker was not found.
*/
function getMarkedLine(dbg) {
const content = findSourceContent(dbg, SCRIPT_FILE);
const lines = content.value.split("\n");
const markerIndex = lines.findIndex(line => line.includes(BREAKPOINT_MARKER));
if (markerIndex === -1) {
return null;
}
return markerIndex + 1;
}