Wed, 31 Dec 2014 06:09:35 +0100
Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.
1 /* Any copyright is dedicated to the Public Domain.
2 http://creativecommons.org/publicdomain/zero/1.0/ */
5 function test() {
7 waitForExplicitFinish();
9 let doc;
10 let inspector;
12 gBrowser.selectedTab = gBrowser.addTab();
13 gBrowser.selectedBrowser.addEventListener("load", function onload() {
14 gBrowser.selectedBrowser.removeEventListener("load", onload, true);
15 doc = content.document;
16 waitForFocus(setupTest, content);
17 }, true);
19 content.location = "http://mochi.test:8888/browser/browser/devtools/" +
20 "inspector/test/browser_inspector_menu.html";
22 function setupTest() {
23 openInspector(runTests);
24 }
26 function runTests(aInspector) {
27 inspector = aInspector;
28 checkDocTypeMenuItems();
29 }
31 function checkDocTypeMenuItems() {
32 info("Checking context menu entries for doctype node");
33 inspector.selection.setNode(doc.doctype);
34 inspector.once("inspector-updated", () => {
35 let docTypeNode = getMarkupTagNodeContaining("<!DOCTYPE html>");
37 // Right-click doctype tag
38 contextMenuClick(docTypeNode);
40 checkDisabled("node-menu-copyinner");
41 checkDisabled("node-menu-copyouter");
42 checkDisabled("node-menu-copyuniqueselector");
43 checkDisabled("node-menu-delete");
45 for (let name of ["hover", "active", "focus"]) {
46 checkDisabled("node-menu-pseudo-" + name);
47 }
49 checkElementMenuItems();
50 });
51 }
53 function checkElementMenuItems() {
54 info("Checking context menu entries for p tag");
55 inspector.selection.setNode(doc.querySelector("p"));
56 inspector.once("inspector-updated", () => {
57 let tag = getMarkupTagNodeContaining("p");
59 // Right-click p tag
60 contextMenuClick(tag);
62 checkEnabled("node-menu-copyinner");
63 checkEnabled("node-menu-copyouter");
64 checkEnabled("node-menu-copyuniqueselector");
65 checkEnabled("node-menu-delete");
67 for (let name of ["hover", "active", "focus"]) {
68 checkEnabled("node-menu-pseudo-" + name);
69 }
71 testCopyInnerMenu();
72 });
73 }
75 function testCopyInnerMenu() {
76 let copyInner = inspector.panelDoc.getElementById("node-menu-copyinner");
77 ok(copyInner, "the popup menu has a copy inner html menu item");
79 waitForClipboard("This is some example text",
80 function() { copyInner.doCommand(); },
81 testCopyOuterMenu, testCopyOuterMenu);
82 }
84 function testCopyOuterMenu() {
85 let copyOuter = inspector.panelDoc.getElementById("node-menu-copyouter");
86 ok(copyOuter, "the popup menu has a copy outer html menu item");
88 waitForClipboard("<p>This is some example text</p>",
89 function() { copyOuter.doCommand(); },
90 testCopyUniqueSelectorMenu, testCopyUniqueSelectorMenu);
91 }
93 function testCopyUniqueSelectorMenu() {
94 let copyUniqueSelector = inspector.panelDoc.getElementById("node-menu-copyuniqueselector");
95 ok(copyUniqueSelector, "the popup menu has a copy unique selector menu item");
97 waitForClipboard("body > div:nth-child(1) > p:nth-child(2)",
98 function() { copyUniqueSelector.doCommand(); },
99 testDeleteNode, testDeleteNode);
100 }
102 function testDeleteNode() {
103 let deleteNode = inspector.panelDoc.getElementById("node-menu-delete");
104 ok(deleteNode, "the popup menu has a delete menu item");
106 inspector.once("inspector-updated", deleteTest);
108 let commandEvent = document.createEvent("XULCommandEvent");
109 commandEvent.initCommandEvent("command", true, true, window, 0, false, false,
110 false, false, null);
111 deleteNode.dispatchEvent(commandEvent);
112 }
114 function deleteTest() {
115 let p = doc.querySelector("P");
116 is(p, null, "node deleted");
118 deleteRootNode();
119 }
121 function deleteRootNode() {
122 inspector.selection.setNode(doc.documentElement);
124 inspector.once("inspector-updated", () => {
125 let deleteNode = inspector.panelDoc.getElementById("node-menu-delete");
126 let commandEvent = inspector.panelDoc.createEvent("XULCommandEvent");
127 commandEvent.initCommandEvent("command", true, true, window, 0, false, false,
128 false, false, null);
129 deleteNode.dispatchEvent(commandEvent);
130 executeSoon(isRootStillAlive);
131 });
132 }
134 function isRootStillAlive() {
135 ok(doc.documentElement, "Document element still alive.");
136 gBrowser.removeCurrentTab();
137 finish();
138 }
140 function getMarkupTagNodeContaining(text) {
141 let tags = inspector._markupFrame.contentDocument.querySelectorAll("span");
142 for (let tag of tags) {
143 if (tag.textContent == text) {
144 return tag;
145 }
146 }
147 }
149 function checkEnabled(elementId) {
150 let elt = inspector.panelDoc.getElementById(elementId);
151 ok(!elt.hasAttribute("disabled"),
152 '"' + elt.label + '" context menu option is not disabled');
153 }
155 function checkDisabled(elementId) {
156 let elt = inspector.panelDoc.getElementById(elementId);
157 ok(elt.hasAttribute("disabled"),
158 '"' + elt.label + '" context menu option is disabled');
159 }
161 function contextMenuClick(element) {
162 let evt = element.ownerDocument.createEvent('MouseEvents');
163 let button = 2; // right click
165 evt.initMouseEvent('contextmenu', true, true,
166 element.ownerDocument.defaultView, 1, 0, 0, 0, 0, false,
167 false, false, false, button, null);
169 element.dispatchEvent(evt);
170 }
171 }