gecko/browser/devtools/debugger/test/browser_dbg_breakpoints-disabled-reload.js

116 lines
4.6 KiB
JavaScript

/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
/**
* Test that disabled breakpoints survive target navigation.
*/
const TAB_URL = EXAMPLE_URL + "doc_script-switching-01.html";
function test() {
initDebugger(TAB_URL).then(([aTab, aDebuggee, aPanel]) => {
let gDebugger = aPanel.panelWin;
let gEvents = gDebugger.EVENTS;
let gEditor = gDebugger.DebuggerView.editor;
let gSources = gDebugger.DebuggerView.Sources;
let gBreakpoints = gDebugger.DebuggerController.Breakpoints;
let gBreakpointLocation = { url: EXAMPLE_URL + "code_script-switching-01.js", line: 5 };
Task.spawn(function() {
yield waitForSourceShown(aPanel, "-01.js");
yield aPanel.addBreakpoint(gBreakpointLocation);
yield ensureThreadClientState(aPanel, "resumed");
yield testWhenBreakpointEnabledAndFirstSourceShown();
yield reloadActiveTab(aPanel, gEvents.SOURCE_SHOWN);
yield testWhenBreakpointEnabledAndSecondSourceShown();
yield gSources.disableBreakpoint(gBreakpointLocation);
yield reloadActiveTab(aPanel, gEvents.SOURCE_SHOWN);
yield testWhenBreakpointDisabledAndSecondSourceShown();
yield gSources.enableBreakpoint(gBreakpointLocation);
yield reloadActiveTab(aPanel, gEvents.SOURCE_SHOWN);
yield testWhenBreakpointEnabledAndSecondSourceShown();
yield resumeDebuggerThenCloseAndFinish(aPanel);
});
function verifyView({ disabled, visible }) {
return Task.spawn(function() {
// It takes a tick for the checkbox in the SideMenuWidget and the
// gutter in the editor to get updated.
yield waitForTick();
let breakpointItem = gSources.getBreakpoint(gBreakpointLocation);
let visibleBreakpoints = gEditor.getBreakpoints();
is(!!breakpointItem.attachment.disabled, disabled,
"The selected brekapoint state was correct.");
is(breakpointItem.attachment.view.checkbox.hasAttribute("checked"), !disabled,
"The selected brekapoint's checkbox state was correct.");
// Source editor starts counting line and column numbers from 0.
let breakpointLine = breakpointItem.attachment.line - 1;
let matchedBreakpoints = visibleBreakpoints.filter(e => e.line == breakpointLine);
is(!!matchedBreakpoints.length, visible,
"The selected breakpoint's visibility in the editor was correct.");
});
}
// All the following executeSoon()'s are required to spin the event loop
// before causing the debuggee to pause, to allow functions to yield first.
function testWhenBreakpointEnabledAndFirstSourceShown() {
return Task.spawn(function() {
yield ensureSourceIs(aPanel, "-01.js");
yield verifyView({ disabled: false, visible: true });
executeSoon(() => aDebuggee.firstCall());
yield waitForDebuggerEvents(aPanel, gEvents.FETCHED_SCOPES);
yield ensureSourceIs(aPanel, "-01.js");
yield ensureCaretAt(aPanel, 5);
yield verifyView({ disabled: false, visible: true });
executeSoon(() => gDebugger.gThreadClient.resume());
yield waitForSourceAndCaretAndScopes(aPanel, "-02.js", 1);
yield verifyView({ disabled: false, visible: false });
});
}
function testWhenBreakpointEnabledAndSecondSourceShown() {
return Task.spawn(function() {
yield ensureSourceIs(aPanel, "-02.js", true);
yield verifyView({ disabled: false, visible: false });
executeSoon(() => aDebuggee.firstCall());
yield waitForSourceAndCaretAndScopes(aPanel, "-01.js", 1);
yield verifyView({ disabled: false, visible: true });
executeSoon(() => gDebugger.gThreadClient.resume());
yield waitForSourceAndCaretAndScopes(aPanel, "-02.js", 1);
yield verifyView({ disabled: false, visible: false });
});
}
function testWhenBreakpointDisabledAndSecondSourceShown() {
return Task.spawn(function() {
yield ensureSourceIs(aPanel, "-02.js", true);
yield verifyView({ disabled: true, visible: false });
executeSoon(() => aDebuggee.firstCall());
yield waitForDebuggerEvents(aPanel, gEvents.FETCHED_SCOPES);
yield ensureSourceIs(aPanel, "-02.js");
yield ensureCaretAt(aPanel, 1);
yield verifyView({ disabled: true, visible: false });
executeSoon(() => gDebugger.gThreadClient.resume());
yield waitForDebuggerEvents(aPanel, gEvents.AFTER_FRAMES_CLEARED);
yield ensureSourceIs(aPanel, "-02.js");
yield ensureCaretAt(aPanel, 1);
yield verifyView({ disabled: true, visible: false });
});
}
});
}