diff -r 000000000000 -r 6474c204b198 browser/devtools/inspector/test/browser_inspector_menu.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/browser/devtools/inspector/test/browser_inspector_menu.js Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,171 @@ +/* Any copyright is dedicated to the Public Domain. +http://creativecommons.org/publicdomain/zero/1.0/ */ + + +function test() { + + waitForExplicitFinish(); + + let doc; + let inspector; + + gBrowser.selectedTab = gBrowser.addTab(); + gBrowser.selectedBrowser.addEventListener("load", function onload() { + gBrowser.selectedBrowser.removeEventListener("load", onload, true); + doc = content.document; + waitForFocus(setupTest, content); + }, true); + + content.location = "http://mochi.test:8888/browser/browser/devtools/" + + "inspector/test/browser_inspector_menu.html"; + + function setupTest() { + openInspector(runTests); + } + + function runTests(aInspector) { + inspector = aInspector; + checkDocTypeMenuItems(); + } + + function checkDocTypeMenuItems() { + info("Checking context menu entries for doctype node"); + inspector.selection.setNode(doc.doctype); + inspector.once("inspector-updated", () => { + let docTypeNode = getMarkupTagNodeContaining(""); + + // Right-click doctype tag + contextMenuClick(docTypeNode); + + checkDisabled("node-menu-copyinner"); + checkDisabled("node-menu-copyouter"); + checkDisabled("node-menu-copyuniqueselector"); + checkDisabled("node-menu-delete"); + + for (let name of ["hover", "active", "focus"]) { + checkDisabled("node-menu-pseudo-" + name); + } + + checkElementMenuItems(); + }); + } + + function checkElementMenuItems() { + info("Checking context menu entries for p tag"); + inspector.selection.setNode(doc.querySelector("p")); + inspector.once("inspector-updated", () => { + let tag = getMarkupTagNodeContaining("p"); + + // Right-click p tag + contextMenuClick(tag); + + checkEnabled("node-menu-copyinner"); + checkEnabled("node-menu-copyouter"); + checkEnabled("node-menu-copyuniqueselector"); + checkEnabled("node-menu-delete"); + + for (let name of ["hover", "active", "focus"]) { + checkEnabled("node-menu-pseudo-" + name); + } + + testCopyInnerMenu(); + }); + } + + function testCopyInnerMenu() { + let copyInner = inspector.panelDoc.getElementById("node-menu-copyinner"); + ok(copyInner, "the popup menu has a copy inner html menu item"); + + waitForClipboard("This is some example text", + function() { copyInner.doCommand(); }, + testCopyOuterMenu, testCopyOuterMenu); + } + + function testCopyOuterMenu() { + let copyOuter = inspector.panelDoc.getElementById("node-menu-copyouter"); + ok(copyOuter, "the popup menu has a copy outer html menu item"); + + waitForClipboard("
This is some example text
", + function() { copyOuter.doCommand(); }, + testCopyUniqueSelectorMenu, testCopyUniqueSelectorMenu); + } + + function testCopyUniqueSelectorMenu() { + let copyUniqueSelector = inspector.panelDoc.getElementById("node-menu-copyuniqueselector"); + ok(copyUniqueSelector, "the popup menu has a copy unique selector menu item"); + + waitForClipboard("body > div:nth-child(1) > p:nth-child(2)", + function() { copyUniqueSelector.doCommand(); }, + testDeleteNode, testDeleteNode); + } + + function testDeleteNode() { + let deleteNode = inspector.panelDoc.getElementById("node-menu-delete"); + ok(deleteNode, "the popup menu has a delete menu item"); + + inspector.once("inspector-updated", deleteTest); + + let commandEvent = document.createEvent("XULCommandEvent"); + commandEvent.initCommandEvent("command", true, true, window, 0, false, false, + false, false, null); + deleteNode.dispatchEvent(commandEvent); + } + + function deleteTest() { + let p = doc.querySelector("P"); + is(p, null, "node deleted"); + + deleteRootNode(); + } + + function deleteRootNode() { + inspector.selection.setNode(doc.documentElement); + + inspector.once("inspector-updated", () => { + let deleteNode = inspector.panelDoc.getElementById("node-menu-delete"); + let commandEvent = inspector.panelDoc.createEvent("XULCommandEvent"); + commandEvent.initCommandEvent("command", true, true, window, 0, false, false, + false, false, null); + deleteNode.dispatchEvent(commandEvent); + executeSoon(isRootStillAlive); + }); + } + + function isRootStillAlive() { + ok(doc.documentElement, "Document element still alive."); + gBrowser.removeCurrentTab(); + finish(); + } + + function getMarkupTagNodeContaining(text) { + let tags = inspector._markupFrame.contentDocument.querySelectorAll("span"); + for (let tag of tags) { + if (tag.textContent == text) { + return tag; + } + } + } + + function checkEnabled(elementId) { + let elt = inspector.panelDoc.getElementById(elementId); + ok(!elt.hasAttribute("disabled"), + '"' + elt.label + '" context menu option is not disabled'); + } + + function checkDisabled(elementId) { + let elt = inspector.panelDoc.getElementById(elementId); + ok(elt.hasAttribute("disabled"), + '"' + elt.label + '" context menu option is disabled'); + } + + function contextMenuClick(element) { + let evt = element.ownerDocument.createEvent('MouseEvents'); + let button = 2; // right click + + evt.initMouseEvent('contextmenu', true, true, + element.ownerDocument.defaultView, 1, 0, 0, 0, 0, false, + false, false, false, button, null); + + element.dispatchEvent(evt); + } +}