Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Errors

/* 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/>. */
// This contains tests for
// 1) The context menu items that blackboxes multiple files in the Sources Panel.
// Checks if submenu works correctly for options:
// - 'Un/Blackbox files in this group'
// - 'Un/Blackbox files outside this group'
// - 'Un/Blackbox files in this directory'
// - 'Un/Blackbox files outside this directory'
// 2) The context menu item to hide/show the blackboxed files.
"use strict";
const SOURCE_FILES = {
nestedSource: "nested-source.js",
codeReload1: "code_reload_1.js",
};
const NODE_SELECTORS = {
nodeBlackBoxAll: "#node-blackbox-all",
nodeBlackBoxAllInside: "#node-blackbox-all-inside",
nodeUnBlackBoxAllInside: "#node-unblackbox-all-inside",
nodeBlackBoxAllOutside: "#node-blackbox-all-outside",
nodeUnBlackBoxAllOutside: "#node-unblackbox-all-outside",
};
add_task(async function testBlackBoxOnMultipleFiles() {
const dbg = await initDebugger(
"doc-blackbox-all.html",
SOURCE_FILES.nestedSource,
SOURCE_FILES.codeReload1
);
// Expand the SourceTree and wait for all sources to be visible,
// so that we can assert the visible state of blackboxing in the source tree.
await waitForSourcesInSourceTree(dbg, Object.values(SOURCE_FILES));
info("Loads the source file and sets a breakpoint at line 2.");
await selectSource(dbg, SOURCE_FILES.nestedSource);
await addBreakpoint(dbg, SOURCE_FILES.nestedSource, 2);
info("Selecting the source will highlight it and expand the tree down to it");
await waitForAllElements(dbg, "sourceTreeFolderNode", 3);
const sourceTreeFolderNodeEls = findAllElements(dbg, "sourceTreeFolderNode");
const sourceTreeRootNodeEl = findElement(dbg, "sourceTreeRootNode");
info("Blackbox files in this directory.");
rightClickEl(dbg, sourceTreeFolderNodeEls[1]);
await waitForContextMenu(dbg);
await openContextMenuSubmenu(dbg, NODE_SELECTORS.nodeBlackBoxAll);
await assertContextMenuLabel(
dbg,
NODE_SELECTORS.nodeBlackBoxAllInside,
"Ignore files in this directory"
);
await assertContextMenuLabel(
dbg,
NODE_SELECTORS.nodeBlackBoxAllOutside,
"Ignore files outside this directory"
);
selectContextMenuItem(dbg, NODE_SELECTORS.nodeBlackBoxAllInside);
await waitForDispatch(dbg.store, "BLACKBOX_WHOLE_SOURCES");
await waitForBlackboxCount(dbg, 1);
await waitForRequestsToSettle(dbg);
assertSourceNodeIsBlackBoxed(dbg, SOURCE_FILES.nestedSource, true);
assertSourceNodeIsBlackBoxed(dbg, SOURCE_FILES.codeReload1, false);
info("The invoked function is blackboxed and the debugger does not pause.");
invokeInTab("computeSomething");
assertNotPaused(dbg);
info("Unblackbox files outside this directory.");
rightClickEl(dbg, sourceTreeFolderNodeEls[2]);
await waitForContextMenu(dbg);
await openContextMenuSubmenu(dbg, NODE_SELECTORS.nodeBlackBoxAll);
await assertContextMenuLabel(
dbg,
NODE_SELECTORS.nodeBlackBoxAllInside,
"Ignore files in this directory"
);
await assertContextMenuLabel(
dbg,
NODE_SELECTORS.nodeUnBlackBoxAllOutside,
"Unignore files outside this directory"
);
selectContextMenuItem(dbg, NODE_SELECTORS.nodeUnBlackBoxAllOutside);
await waitForDispatch(dbg.store, "UNBLACKBOX_WHOLE_SOURCES");
await waitForBlackboxCount(dbg, 0);
await waitForRequestsToSettle(dbg);
info("Wait for any breakpoints in the source to get enabled");
await waitForDispatch(dbg.store, "SET_BREAKPOINT");
assertSourceNodeIsBlackBoxed(dbg, SOURCE_FILES.nestedSource, false);
assertSourceNodeIsBlackBoxed(dbg, SOURCE_FILES.codeReload1, false);
info("All sources are unblackboxed and the debugger pauses on line 2.");
invokeInTab("computeSomething");
await waitForPaused(dbg);
await resume(dbg);
info("Blackbox files in this group.");
rightClickEl(dbg, sourceTreeRootNodeEl);
await waitForContextMenu(dbg);
await assertContextMenuLabel(
dbg,
NODE_SELECTORS.nodeBlackBoxAllInside,
"Ignore files in this group"
);
selectContextMenuItem(dbg, NODE_SELECTORS.nodeBlackBoxAllInside);
await waitForBlackboxCount(dbg, 2);
await waitForRequestsToSettle(dbg);
assertSourceNodeIsBlackBoxed(dbg, SOURCE_FILES.nestedSource, true);
assertSourceNodeIsBlackBoxed(dbg, SOURCE_FILES.codeReload1, true);
info("Unblackbox files in this group.");
rightClickEl(dbg, sourceTreeRootNodeEl);
await waitForContextMenu(dbg);
await assertContextMenuLabel(
dbg,
NODE_SELECTORS.nodeUnBlackBoxAllInside,
"Unignore files in this group"
);
selectContextMenuItem(dbg, NODE_SELECTORS.nodeUnBlackBoxAllInside);
await waitForBlackboxCount(dbg, 0);
await waitForRequestsToSettle(dbg);
assertSourceNodeIsBlackBoxed(dbg, SOURCE_FILES.nestedSource, false);
assertSourceNodeIsBlackBoxed(dbg, SOURCE_FILES.codeReload1, false);
});
add_task(async function testHideAndShowBlackBoxedFiles() {
Services.prefs.setBoolPref("devtools.debugger.hide-ignored-sources", false);
const dbg = await initDebugger(
"doc-blackbox-all.html",
SOURCE_FILES.nestedSource,
SOURCE_FILES.codeReload1
);
await waitForSourcesInSourceTree(dbg, Object.values(SOURCE_FILES));
await selectSource(dbg, SOURCE_FILES.nestedSource);
clickElement(dbg, "blackbox");
await waitForDispatch(dbg.store, "BLACKBOX_WHOLE_SOURCES");
info("Assert and click the hide ignored files button in the settings menu");
await toggleDebbuggerSettingsMenuItem(dbg, {
className: ".debugger-settings-menu-item-hide-ignored-sources",
isChecked: false,
});
info("Wait until ignored sources are no longer visible");
await waitUntil(
() => !findSourceNodeWithText(dbg, SOURCE_FILES.nestedSource)
);
is(
Services.prefs.getBoolPref("devtools.debugger.hide-ignored-sources"),
true,
"Hide ignored files is enabled"
);
is(
dbg.win.document.querySelector(".source-list-footer").innerText,
"Ignored sources are hidden.\nShow all sources",
"Notification is visible with the correct message"
);
info("Assert that newly ignored files are automatically hidden");
await selectSource(dbg, SOURCE_FILES.codeReload1);
await triggerSourceTreeContextMenu(
dbg,
findSourceNodeWithText(dbg, SOURCE_FILES.codeReload1),
"#node-menu-blackbox"
);
await waitForDispatch(dbg.store, "BLACKBOX_WHOLE_SOURCES");
await waitUntil(() => !findSourceNodeWithText(dbg, SOURCE_FILES.codeReload1));
info("Show the hidden ignored files using the button in the notification");
clickElementWithSelector(dbg, ".source-list-footer button");
info("Wait until ignored sources are visible");
await waitUntil(() => findSourceNodeWithText(dbg, SOURCE_FILES.nestedSource));
is(
Services.prefs.getBoolPref("devtools.debugger.hide-ignored-sources"),
false,
"Hide ignored files is disabled"
);
ok(
!document.querySelector(".source-list-footer"),
"Notification is no longer visible"
);
});
function waitForBlackboxCount(dbg, count) {
return waitForState(
dbg,
() => Object.keys(dbg.selectors.getBlackBoxRanges()).length === count
);
}
function assertSourceNodeIsBlackBoxed(dbg, sourceFilename, shouldBeBlackBoxed) {
const treeItem = findSourceNodeWithText(dbg, sourceFilename);
ok(treeItem, `Found tree item for ${sourceFilename}`);
is(
!!treeItem.querySelector(".img.blackBox"),
shouldBeBlackBoxed,
`${sourceFilename} is ${shouldBeBlackBoxed ? "" : "not"} blackboxed`
);
}