diff options
Diffstat (limited to 'devtools/client/debugger/test/mochitest/browser_dbg-editor-gutter.js')
-rw-r--r-- | devtools/client/debugger/test/mochitest/browser_dbg-editor-gutter.js | 144 |
1 files changed, 144 insertions, 0 deletions
diff --git a/devtools/client/debugger/test/mochitest/browser_dbg-editor-gutter.js b/devtools/client/debugger/test/mochitest/browser_dbg-editor-gutter.js new file mode 100644 index 0000000000..1653d9195b --- /dev/null +++ b/devtools/client/debugger/test/mochitest/browser_dbg-editor-gutter.js @@ -0,0 +1,144 @@ +/* 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 <http://mozilla.org/MPL/2.0/>. */ + +// Tests the breakpoint gutter and making sure breakpoint icons exist +// correctly + +"use strict"; + +// FIXME bug 1524374 removing breakpoints in this test can cause uncaught +// rejections and make bug 1512742 permafail. +PromiseTestUtils.allowMatchingRejectionsGlobally(/NS_ERROR_NOT_INITIALIZED/); + +add_task(async function testGutterBreakpoints() { + const dbg = await initDebugger("doc-scripts.html", "simple1.js"); + const source = findSource(dbg, "simple1.js"); + + await selectSource(dbg, source); + + // Make sure that clicking the gutter creates a breakpoint icon. + await clickGutter(dbg, 4); + await waitForDispatch(dbg.store, "SET_BREAKPOINT"); + is(dbg.selectors.getBreakpointCount(), 1, "One breakpoint exists"); + await assertBreakpoint(dbg, 4); + + // Make sure clicking at the same place removes the icon. + await clickGutter(dbg, 4); + await waitForDispatch(dbg.store, "REMOVE_BREAKPOINT"); + is(dbg.selectors.getBreakpointCount(), 0, "No breakpoints exist"); + await assertNoBreakpoint(dbg, 4); +}); + +add_task(async function testGutterBreakpointsInIgnoredSource() { + info( + "Ensure clicking on gutter to add breakpoint should not un-ignore source" + ); + const dbg = await initDebugger("doc-sourcemaps3.html"); + dbg.actions.toggleMapScopes(); + await waitForSources(dbg, "bundle.js", "sorted.js", "test.js"); + + info("Ignore the source"); + await selectSource(dbg, findSource(dbg, "sorted.js")); + await clickElement(dbg, "blackbox"); + await waitForDispatch(dbg.store, "BLACKBOX_WHOLE_SOURCES"); + + // invoke test + invokeInTab("test"); + + // wait to make sure no pause has occured + await wait(1000); + assertNotPaused(dbg); + + info("Ensure gutter breakpoint gets set with click"); + await clickGutter(dbg, 4); + await waitForDispatch(dbg.store, "SET_BREAKPOINT"); + + info("Assert that the `Enable breakpoint` context menu item is disabled"); + const popup = await openContextMenuInDebugger(dbg, "gutter", 4); + await assertContextMenuItemDisabled( + dbg, + "#node-menu-enable-breakpoint", + true + ); + await closeContextMenu(dbg, popup); + + is(dbg.selectors.getBreakpointCount(), 1, "One breakpoint exists"); + await assertBreakpoint(dbg, 4); + is( + findBreakpoint(dbg, "sorted.js", 4).disabled, + true, + "The breakpoint in the ignored source looks disabled" + ); + + invokeInTab("test"); + + await wait(1000); + assertNotPaused(dbg); + + ok(true, "source is still blackboxed"); +}); + +add_task(async function testGutterBreakpointsForSourceWithIgnoredLines() { + info( + "Asserts that adding a breakpoint to the gutter of an un-ignored line does not un-ignore other ranges in the source" + ); + const dbg = await initDebugger("doc-sourcemaps3.html"); + await waitForSources(dbg, "bundle.js", "sorted.js", "test.js"); + + await selectSource(dbg, findSource(dbg, "sorted.js")); + + info("Ignoring line 17 to 21 using the editor context menu"); + await selectEditorLinesAndOpenContextMenu(dbg, { + startLine: 17, + endLine: 21, + }); + await selectBlackBoxContextMenuItem(dbg, "blackbox-lines"); + + info("Set breakpoint on an un-ignored line"); + await clickGutter(dbg, 4); + await waitForDispatch(dbg.store, "SET_BREAKPOINT"); + + info("Assert that the `Disable breakpoint` context menu item is enabled"); + const popup = await openContextMenuInDebugger(dbg, "gutter", 4); + await assertContextMenuItemDisabled( + dbg, + "#node-menu-disable-breakpoint", + false + ); + await closeContextMenu(dbg, popup); + + info("Assert that the lines 17 to 21 are still ignored"); + assertIgnoredStyleInSourceLines(dbg, { + lines: [17, 21], + hasBlackboxedLinesClass: true, + }); + + info( + "Asserts that adding a breakpoint to the gutter of an ignored line creates a disabled breakpoint" + ); + info("Set breakpoint on an ignored line"); + await clickGutter(dbg, 19); + await waitForDispatch(dbg.store, "SET_BREAKPOINT"); + + info("Assert that the `Enable breakpoint` context menu item is disabled"); + const popup2 = await openContextMenuInDebugger(dbg, "gutter", 19); + await assertContextMenuItemDisabled( + dbg, + "#node-menu-enable-breakpoint", + true + ); + await closeContextMenu(dbg, popup2); + + info("Assert that the breakpoint on the line 19 is visually disabled"); + is( + findBreakpoint(dbg, "sorted.js", 19).disabled, + true, + "The breakpoint on an ignored line is disabled" + ); +}); + +async function assertContextMenuItemDisabled(dbg, selector, expectedState) { + const item = await waitFor(() => findContextMenu(dbg, selector)); + is(item.disabled, expectedState, "The context menu item is disabled"); +} |