diff -r 000000000000 -r 6474c204b198 browser/devtools/debugger/test/browser_dbg_breakpoints-disabled-reload.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/browser/devtools/debugger/test/browser_dbg_breakpoints-disabled-reload.js Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,115 @@ +/* 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 }); + }); + } + }); +}