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 /* vim: set ts=2 et sw=2 tw=80: */
2 /* Any copyright is dedicated to the Public Domain.
3 http://creativecommons.org/publicdomain/zero/1.0/ */
4 /* Bug 699130 */
6 "use strict";
8 function test()
9 {
10 waitForExplicitFinish();
12 gBrowser.selectedTab = gBrowser.addTab();
13 gBrowser.selectedBrowser.addEventListener("load", function onLoad() {
14 gBrowser.selectedBrowser.removeEventListener("load", onLoad, true);
15 openScratchpad(runTests);
16 }, true);
18 content.location = "data:text/html,test Edit menu updates Scratchpad - bug 699130";
19 }
21 function runTests()
22 {
23 let sp = gScratchpadWindow.Scratchpad;
24 let doc = gScratchpadWindow.document;
25 let winUtils = gScratchpadWindow.QueryInterface(Ci.nsIInterfaceRequestor).
26 getInterface(Ci.nsIDOMWindowUtils);
27 let OS = Services.appinfo.OS;
29 info("will test the Edit menu");
31 let pass = 0;
33 sp.setText("bug 699130: hello world! (edit menu)");
35 let editMenu = doc.getElementById("sp-edit-menu");
36 ok(editMenu, "the Edit menu");
37 let menubar = editMenu.parentNode;
38 ok(menubar, "menubar found");
40 let editMenuIndex = -1;
41 for (let i = 0; i < menubar.children.length; i++) {
42 if (menubar.children[i] === editMenu) {
43 editMenuIndex = i;
44 break;
45 }
46 }
47 isnot(editMenuIndex, -1, "Edit menu index is correct");
49 let menuPopup = editMenu.menupopup;
50 ok(menuPopup, "the Edit menupopup");
51 let cutItem = doc.getElementById("menu_cut");
52 ok(cutItem, "the Cut menuitem");
53 let pasteItem = doc.getElementById("menu_paste");
54 ok(pasteItem, "the Paste menuitem");
56 let anchor = doc.documentElement;
57 let isContextMenu = false;
59 let openMenu = function(aX, aY, aCallback) {
60 if (!editMenu || OS != "Darwin") {
61 menuPopup.addEventListener("popupshown", function onPopupShown() {
62 menuPopup.removeEventListener("popupshown", onPopupShown, false);
63 executeSoon(aCallback);
64 }, false);
65 }
67 executeSoon(function() {
68 if (editMenu) {
69 if (OS == "Darwin") {
70 winUtils.forceUpdateNativeMenuAt(editMenuIndex);
71 executeSoon(aCallback);
72 } else {
73 editMenu.open = true;
74 }
75 } else {
76 menuPopup.openPopup(anchor, "overlap", aX, aY, isContextMenu, false);
77 }
78 });
79 };
81 let closeMenu = function(aCallback) {
82 if (!editMenu || OS != "Darwin") {
83 menuPopup.addEventListener("popuphidden", function onPopupHidden() {
84 menuPopup.removeEventListener("popuphidden", onPopupHidden, false);
85 executeSoon(aCallback);
86 }, false);
87 }
89 executeSoon(function() {
90 if (editMenu) {
91 if (OS == "Darwin") {
92 winUtils.forceUpdateNativeMenuAt(editMenuIndex);
93 executeSoon(aCallback);
94 } else {
95 editMenu.open = false;
96 }
97 } else {
98 menuPopup.hidePopup();
99 }
100 });
101 };
103 let firstShow = function() {
104 ok(cutItem.hasAttribute("disabled"), "cut menuitem is disabled");
105 closeMenu(firstHide);
106 };
108 let firstHide = function() {
109 sp.editor.setSelection({ line: 0, ch: 0 }, { line: 0, ch: 10 });
110 openMenu(11, 11, showAfterSelect);
111 };
113 let showAfterSelect = function() {
114 ok(!cutItem.hasAttribute("disabled"), "cut menuitem is enabled after select");
115 closeMenu(hideAfterSelect);
116 };
118 let hideAfterSelect = function() {
119 sp.editor.on("change", onCut);
120 waitForFocus(function () {
121 let selectedText = sp.editor.getSelection();
122 ok(selectedText.length > 0, "non-empty selected text will be cut");
124 EventUtils.synthesizeKey("x", {accelKey: true}, gScratchpadWindow);
125 }, gScratchpadWindow);
126 };
128 let onCut = function() {
129 sp.editor.off("change", onCut);
130 openMenu(12, 12, showAfterCut);
131 };
133 let showAfterCut = function() {
134 ok(cutItem.hasAttribute("disabled"), "cut menuitem is disabled after cut");
135 ok(!pasteItem.hasAttribute("disabled"), "paste menuitem is enabled after cut");
136 closeMenu(hideAfterCut);
137 };
139 let hideAfterCut = function() {
140 sp.editor.on("change", onPaste);
141 waitForFocus(function () {
142 EventUtils.synthesizeKey("v", {accelKey: true}, gScratchpadWindow);
143 }, gScratchpadWindow);
144 };
146 let onPaste = function() {
147 sp.editor.off("change", onPaste);
148 openMenu(13, 13, showAfterPaste);
149 };
151 let showAfterPaste = function() {
152 ok(cutItem.hasAttribute("disabled"), "cut menuitem is disabled after paste");
153 ok(!pasteItem.hasAttribute("disabled"), "paste menuitem is enabled after paste");
154 closeMenu(hideAfterPaste);
155 };
157 let hideAfterPaste = function() {
158 if (pass == 0) {
159 pass++;
160 testContextMenu();
161 } else {
162 finish();
163 }
164 };
166 let testContextMenu = function() {
167 info("will test the context menu");
169 editMenu = null;
170 isContextMenu = true;
172 menuPopup = doc.getElementById("scratchpad-text-popup");
173 ok(menuPopup, "the context menupopup");
174 cutItem = doc.getElementById("cMenu_cut");
175 ok(cutItem, "the Cut menuitem");
176 pasteItem = doc.getElementById("cMenu_paste");
177 ok(pasteItem, "the Paste menuitem");
179 sp.setText("bug 699130: hello world! (context menu)");
180 openMenu(10, 10, firstShow);
181 };
183 openMenu(10, 10, firstShow);
184 }