summaryrefslogtreecommitdiffstats
path: root/devtools/client/inspector/test/browser_inspector_menu-06-other.js
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--devtools/client/inspector/test/browser_inspector_menu-06-other.js160
1 files changed, 160 insertions, 0 deletions
diff --git a/devtools/client/inspector/test/browser_inspector_menu-06-other.js b/devtools/client/inspector/test/browser_inspector_menu-06-other.js
new file mode 100644
index 0000000000..34572cb934
--- /dev/null
+++ b/devtools/client/inspector/test/browser_inspector_menu-06-other.js
@@ -0,0 +1,160 @@
+/* Any copyright is dedicated to the Public Domain.
+http://creativecommons.org/publicdomain/zero/1.0/ */
+"use strict";
+
+// Tests for menuitem functionality that doesn't fit into any specific category
+const TEST_URL = URL_ROOT + "doc_inspector_menu.html";
+add_task(async function () {
+ const { inspector, toolbox } = await openInspectorForURL(TEST_URL);
+ await testShowDOMProperties();
+ await testDuplicateNode();
+ await testDeleteNode();
+ await testDeleteTextNode();
+ await testDeleteRootNode();
+ await testScrollIntoView();
+
+ async function testDuplicateNode() {
+ info("Testing 'Duplicate Node' menu item for normal elements.");
+
+ await selectNode(".duplicate", inspector);
+ is(
+ await getNumberOfMatchingElementsInContentPage(".duplicate"),
+ 1,
+ "There should initially be 1 .duplicate node"
+ );
+
+ const allMenuItems = openContextMenuAndGetAllItems(inspector);
+ const menuItem = allMenuItems.find(
+ item => item.id === "node-menu-duplicatenode"
+ );
+ ok(menuItem, "'Duplicate node' menu item should exist");
+
+ info("Triggering 'Duplicate Node' and waiting for inspector to update");
+ const updated = inspector.once("markupmutation");
+ menuItem.click();
+ await updated;
+
+ is(
+ await getNumberOfMatchingElementsInContentPage(".duplicate"),
+ 2,
+ "The duplicated node should be in the markup."
+ );
+
+ const container = await getContainerForSelector(
+ ".duplicate + .duplicate",
+ inspector
+ );
+ ok(container, "A MarkupContainer should be created for the new node");
+ }
+
+ async function testDeleteNode() {
+ info("Testing 'Delete Node' menu item for normal elements.");
+ await selectNode("#delete", inspector);
+ const allMenuItems = openContextMenuAndGetAllItems(inspector);
+ const deleteNode = allMenuItems.find(
+ item => item.id === "node-menu-delete"
+ );
+ ok(deleteNode, "the popup menu has a delete menu item");
+ const updated = inspector.once("inspector-updated");
+
+ info("Triggering 'Delete Node' and waiting for inspector to update");
+ deleteNode.click();
+ await updated;
+
+ ok(!(await hasMatchingElementInContentPage("#delete")), "Node deleted");
+ }
+
+ async function testDeleteTextNode() {
+ info("Testing 'Delete Node' menu item for text elements.");
+ const { walker } = inspector;
+ const divBefore = await walker.querySelector(
+ walker.rootNode,
+ "#nestedHiddenElement"
+ );
+ const { nodes } = await walker.children(divBefore);
+ await selectNode(nodes[0], inspector, "test-highlight");
+
+ const allMenuItems = openContextMenuAndGetAllItems(inspector);
+ const deleteNode = allMenuItems.find(
+ item => item.id === "node-menu-delete"
+ );
+ ok(deleteNode, "the popup menu has a delete menu item");
+ ok(!deleteNode.disabled, "the delete menu item is not disabled");
+ const updated = inspector.once("inspector-updated");
+
+ info("Triggering 'Delete Node' and waiting for inspector to update");
+ deleteNode.click();
+ await updated;
+
+ const divAfter = await walker.querySelector(
+ walker.rootNode,
+ "#nestedHiddenElement"
+ );
+ const nodesAfter = (await walker.children(divAfter)).nodes;
+ ok(!nodesAfter.length, "the node still had children");
+ }
+
+ async function testDeleteRootNode() {
+ info("Testing 'Delete Node' menu item does not delete root node.");
+ await selectNode("html", inspector);
+
+ const allMenuItems = openContextMenuAndGetAllItems(inspector);
+ const deleteNode = allMenuItems.find(
+ item => item.id === "node-menu-delete"
+ );
+ deleteNode.click();
+
+ await new Promise(resolve => {
+ executeSoon(resolve);
+ });
+
+ const hasDocumentElement = await SpecialPowers.spawn(
+ gBrowser.selectedBrowser,
+ [],
+ () => !!content.document.documentElement
+ );
+ ok(hasDocumentElement, "Document element still alive.");
+ }
+
+ async function testShowDOMProperties() {
+ info("Testing 'Show DOM Properties' menu item.");
+ const allMenuItems = openContextMenuAndGetAllItems(inspector);
+ const showDOMPropertiesNode = allMenuItems.find(
+ item => item.id === "node-menu-showdomproperties"
+ );
+ ok(showDOMPropertiesNode, "the popup menu has a show dom properties item");
+
+ const consoleOpened = toolbox.once("webconsole-ready");
+
+ info("Triggering 'Show DOM Properties' and waiting for inspector open");
+ showDOMPropertiesNode.click();
+ await consoleOpened;
+
+ const webconsoleUI = toolbox.getPanel("webconsole").hud.ui;
+
+ await poll(
+ () => {
+ const messages = [
+ ...webconsoleUI.outputNode.querySelectorAll(".message"),
+ ];
+ const nodeMessage = messages.find(m => m.textContent.includes("body"));
+ // wait for the object to be expanded
+ return (
+ nodeMessage &&
+ nodeMessage.querySelectorAll(".object-inspector .node").length > 10
+ );
+ },
+ "Waiting for the element node to be expanded",
+ 10,
+ 1000
+ );
+
+ info("Close split console");
+ await toolbox.toggleSplitConsole();
+ }
+
+ function testScrollIntoView() {
+ // Follow up bug to add this test - https://bugzilla.mozilla.org/show_bug.cgi?id=1154107
+ todo(false, "Verify that node is scrolled into the viewport.");
+ }
+});