browser/base/content/test/general/test_contextmenu_input.html

changeset 0
6474c204b198
equal deleted inserted replaced
-1:000000000000 0:85f88a9f7b41
1 <!DOCTYPE HTML>
2 <html>
3 <head>
4 <title>Tests for browser context menu</title>
5 <script type="text/javascript" src="/MochiKit/packed.js"></script>
6 <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
7 <script type="text/javascript" src="/tests/SimpleTest/EventUtils.js"></script>
8 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
9 </head>
10 <body>
11 Browser context menu tests for input.
12 <p id="display"></p>
13
14 <div id="content">
15 </div>
16
17 <pre id="test">
18 <script type="text/javascript" src="contextmenu_common.js"></script>
19 <script class="testbody" type="text/javascript">
20
21 const Ci = SpecialPowers.Ci;
22
23 /*
24 * runTest
25 *
26 * Called by a popupshowing event handler. Each test checks for expected menu
27 * contents, closes the popup, and finally triggers the popup on a new element
28 * (thus kicking off another cycle).
29 *
30 */
31 function runTest(testNum) {
32 ok(true, "Starting test #" + testNum);
33
34 switch (testNum) {
35 case 1:
36 openContextMenuFor(input); // Invoke context menu for next test.
37 break;
38
39 case 2:
40 // Context menu for text input field.
41 checkContextMenu(["context-undo", false,
42 "---", null,
43 "context-cut", false,
44 "context-copy", false,
45 "context-paste", null, // ignore clipboard state
46 "context-delete", false,
47 "---", null,
48 "context-selectall", false,
49 "---", null,
50 "spell-check-enabled", true,
51 "---", null,
52 "context-inspect", true]);
53 closeContextMenu();
54 input.setAttribute('spellcheck', 'true');
55 openContextMenuFor(input); // Invoke context menu for next test.
56 break;
57
58 case 3:
59 var value = SpecialPowers.Services.appinfo.OS != "Darwin";
60 // Context menu for spell-check input.
61 checkContextMenu(["context-undo", value,
62 "---", null,
63 "context-cut", value,
64 "context-copy", value,
65 "context-paste", null, // ignore clipboard state
66 "context-delete", value,
67 "---", null,
68 "context-selectall", value,
69 "---", null,
70 "spell-check-enabled", true,
71 "spell-dictionaries", true,
72 [/*"spell-check-dictionary-en-US", true,*/
73 "---", null,
74 "spell-add-dictionaries", true], null,
75 "---", null,
76 "context-inspect", true]);
77
78 closeContextMenu();
79 input.removeAttribute('spellcheck');
80 openContextMenuFor(inputspellwrong); // Invoke context menu for next test.
81 break;
82
83 case 4:
84 var value = SpecialPowers.Services.appinfo.OS != "Darwin";
85 // Context menu for spell-check input with a unknwon word.
86 checkContextMenu([/*"*prodigality", true,*/ // spelling suggestion
87 /*"spell-add-to-dictionary", true,*/
88 /*"---", null,*/
89 "context-undo", value,
90 "---", null,
91 "context-cut", value,
92 "context-copy", value,
93 "context-paste", null, // ignore clipboard state
94 "context-delete", value,
95 "---", null,
96 "context-selectall", true,
97 "---", null,
98 "spell-check-enabled", true,
99 "spell-dictionaries", true,
100 [/*"spell-check-dictionary-en-US", true,*/
101 "---", null,
102 "spell-add-dictionaries", true], null,
103 "---", null,
104 "context-inspect", true]);
105
106 closeContextMenu();
107 openContextMenuFor(inputspellcorrect); // Invoke context menu for next test.
108 break;
109
110 case 5:
111 var value = SpecialPowers.Services.appinfo.OS != "Darwin";
112 // Context menu for spell-check input with a known word.
113 checkContextMenu(["context-undo", value,
114 "---", null,
115 "context-cut", value,
116 "context-copy", value,
117 "context-paste", null, // ignore clipboard state
118 "context-delete", value,
119 "---", null,
120 "context-selectall", true,
121 "---", null,
122 "spell-check-enabled", true,
123 "spell-dictionaries", true,
124 [/*"spell-check-dictionary-en-US", true,*/
125 "---", null,
126 "spell-add-dictionaries", true], null,
127 "---", null,
128 "context-inspect", true]);
129
130 closeContextMenu();
131 input.disabled = true;
132 openContextMenuFor(input); // Invoke context menu for next test.
133 break;
134
135 case 6:
136 // Context menu for disabled input.
137 checkContextMenu(["context-undo", false,
138 "---", null,
139 "context-cut", false,
140 "context-copy", false,
141 "context-paste", null, // ignore clipboard state
142 "context-delete", false,
143 "---", null,
144 "context-selectall", true,
145 "---", null,
146 "spell-check-enabled", true,
147 "---", null,
148 "context-inspect", true]);
149
150 closeContextMenu();
151 input.disabled = false;
152 input.type = 'password';
153 openContextMenuFor(input); // Invoke context menu for next test.
154 break;
155
156 case 7: // password
157 case 8: // email
158 case 9: // url
159 case 10: // tel
160 // Context menu for tel, password, email and url input fields.
161 checkContextMenu(["context-undo", false,
162 "---", null,
163 "context-cut", false,
164 "context-copy", false,
165 "context-paste", null, // ignore clipboard state
166 "context-delete", false,
167 "---", null,
168 "context-selectall", false,
169 "---", null,
170 "context-inspect", true]);
171
172 closeContextMenu();
173
174 if (testNum == 7) {
175 input.type = 'email';
176 } else if (testNum == 8) {
177 input.type = 'url';
178 } else if (testNum == 9) {
179 input.type = 'tel';
180 } else if (testNum == 10) {
181 input.type = 'date';
182 }
183
184 openContextMenuFor(input); // Invoke context menu for next test.
185 break;
186
187 case 11: // type='date'
188 case 12: // type='time'
189 case 13: // type='number'
190 case 14: // type='color'
191 case 15: // type='range'
192 checkContextMenu(["context-back", false,
193 "context-forward", false,
194 "context-reload", true,
195 "---", null,
196 "context-bookmarkpage", true,
197 "context-savepage", true,
198 "---", null,
199 "context-viewbgimage", false,
200 "context-selectall", null,
201 "---", null,
202 "context-viewsource", true,
203 "context-viewinfo", true,
204 "---", null,
205 "context-inspect", true]);
206 closeContextMenu();
207
208 if (testNum == 11) {
209 input.type = 'time';
210 } else if (testNum == 12) {
211 input.type = 'number';
212 } else if (testNum == 13) {
213 input.type = 'color';
214 } else if (testNum == 14) {
215 input.type = 'range';
216 } else {
217 input.type = 'search';
218 }
219
220 openContextMenuFor(input);
221 break;
222
223 case 16: // type='search'
224 // Context menu for search input fields.
225 checkContextMenu(["context-undo", false,
226 "---", null,
227 "context-cut", false,
228 "context-copy", false,
229 "context-paste", null, // ignore clipboard state
230 "context-delete", false,
231 "---", null,
232 "context-selectall", false,
233 "---", null,
234 "spell-check-enabled", true,
235 "---", null,
236 "context-inspect", true]);
237
238 closeContextMenu();
239
240 // Add some todos to make sure all input fields got a test.
241 var todos = [ "datetime", "month", "week", "datetime-local" ];
242 todos.forEach(function(type) {
243 input.type = type;
244 todo_is(input.type, type, "TODO: add test for " + type + " input fields");
245 });
246
247 input.type = 'text';
248 input.readOnly = true;
249 openContextMenuFor(input);
250 break;
251
252 case 17:
253 // Context menu for a read-only input.
254 checkContextMenu(["context-undo", false,
255 "---", null,
256 "context-cut", false,
257 "context-copy", false,
258 "context-paste", null, // ignore clipboard state
259 "context-delete", false,
260 "---", null,
261 "context-selectall", false,
262 "---", null,
263 "context-inspect", true]);
264 closeContextMenu();
265
266 // Clean-up.
267 subwindow.close();
268 SimpleTest.finish();
269 return;
270
271 default:
272 ok(false, "Unexpected invocation of test #" + testNum);
273 subwindow.close();
274 SimpleTest.finish();
275 return;
276 }
277
278 }
279
280
281 var gTestNum = 1;
282 var subwindow, chromeWin, contextMenu;
283 var input, inputspellwrong, inputspellcorrect;
284
285 function startTest() {
286 chromeWin = SpecialPowers.wrap(subwindow)
287 .QueryInterface(Ci.nsIInterfaceRequestor)
288 .getInterface(Ci.nsIWebNavigation)
289 .QueryInterface(Ci.nsIDocShellTreeItem)
290 .rootTreeItem
291 .QueryInterface(Ci.nsIInterfaceRequestor)
292 .getInterface(Ci.nsIDOMWindow)
293 .QueryInterface(Ci.nsIDOMChromeWindow);
294 contextMenu = chromeWin.document.getElementById("contentAreaContextMenu");
295 ok(contextMenu, "Got context menu XUL");
296
297 if (chromeWin.document.getElementById("Browser:Stop").getAttribute("disabled") != "true") {
298 SimpleTest.executeSoon(startTest);
299 return;
300 }
301
302 var inputs = subwindow.document.getElementsByTagName('input');
303 input = inputs[0];
304 inputspellwrong = inputs[1];
305 inputspellcorrect = inputs[2];
306
307 contextMenu.addEventListener("popupshown", function() { runTest(++gTestNum); }, false);
308 runTest(1);
309 }
310
311 // We open this in a separate window, because the Mochitests run inside a frame.
312 // The frame causes an extra menu item, and prevents running the test
313 // standalone (ie, clicking the test name in the Mochitest window) to see
314 // success/failure messages.
315 var painted = false, loaded = false;
316
317 function waitForEvents(event)
318 {
319 if (event.type == "MozAfterPaint")
320 painted = true;
321 else if (event.type == "load")
322 loaded = true;
323 if (painted && loaded) {
324 subwindow.removeEventListener("MozAfterPaint", waitForEvents, false);
325 subwindow.onload = null;
326 startTest();
327 }
328 }
329
330 var subwindow = window.open("data:text/html,<!DOCTYPE html><input><input spellcheck='true' value='prodkjfgigrty'><input spellcheck='true' value='foo'><input readonly spellcheck='false'>", "contextmenu-subtext", "width=600,height=700");
331 subwindow.addEventListener("MozAfterPaint", waitForEvents, false);
332 subwindow.onload = waitForEvents;
333
334 SimpleTest.waitForExplicitFinish();
335 </script>
336 </pre>
337 </body>
338 </html>

mercurial