summaryrefslogtreecommitdiffstats
path: root/devtools/client/debugger/test/mochitest/browser_dbg-blackbox-all.js
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/client/debugger/test/mochitest/browser_dbg-blackbox-all.js')
-rw-r--r--devtools/client/debugger/test/mochitest/browser_dbg-blackbox-all.js215
1 files changed, 215 insertions, 0 deletions
diff --git a/devtools/client/debugger/test/mochitest/browser_dbg-blackbox-all.js b/devtools/client/debugger/test/mochitest/browser_dbg-blackbox-all.js
new file mode 100644
index 0000000000..8080d3c145
--- /dev/null
+++ b/devtools/client/debugger/test/mochitest/browser_dbg-blackbox-all.js
@@ -0,0 +1,215 @@
+/* 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,
+ state => 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`
+ );
+}