1 |
(function( $ ) { |
2 |
|
3 |
var log = TestHelpers.menu.log, |
4 |
logOutput = TestHelpers.menu.logOutput, |
5 |
click = TestHelpers.menu.click; |
6 |
|
7 |
module( "menu: events", { |
8 |
setup: function() { |
9 |
TestHelpers.menu.clearLog(); |
10 |
} |
11 |
}); |
12 |
|
13 |
test( "handle click on menu", function() { |
14 |
expect( 1 ); |
15 |
var element = $( "#menu1" ).menu({ |
16 |
select: function() { |
17 |
log(); |
18 |
} |
19 |
}); |
20 |
log( "click", true ); |
21 |
click( $( "#menu1" ), "1" ); |
22 |
log( "afterclick" ); |
23 |
click( element, "2" ); |
24 |
click( $( "#menu1" ), "3" ); |
25 |
click( element, "1" ); |
26 |
equal( logOutput(), "click,1,afterclick,2,3,1", "Click order not valid." ); |
27 |
}); |
28 |
|
29 |
test( "handle click on custom item menu", function() { |
30 |
expect( 1 ); |
31 |
var element = $( "#menu5" ).menu({ |
32 |
select: function() { |
33 |
log(); |
34 |
}, |
35 |
menus: "div" |
36 |
}); |
37 |
log( "click", true ); |
38 |
click( $( "#menu5" ), "1" ); |
39 |
log( "afterclick" ); |
40 |
click( element, "2" ); |
41 |
click( $( "#menu5" ), "3" ); |
42 |
click( element, "1" ); |
43 |
equal( logOutput(), "click,1,afterclick,2,3,1", "Click order not valid." ); |
44 |
}); |
45 |
|
46 |
asyncTest( "handle blur", function() { |
47 |
expect( 1 ); |
48 |
var blurHandled = false, |
49 |
element = $( "#menu1" ).menu({ |
50 |
blur: function( event ) { |
51 |
// Ignore duplicate blur event fired by IE |
52 |
if ( !blurHandled ) { |
53 |
blurHandled = true; |
54 |
equal( event.type, "menublur", "blur event.type is 'menublur'" ); |
55 |
} |
56 |
} |
57 |
}); |
58 |
|
59 |
click( element, "1" ); |
60 |
setTimeout(function() { |
61 |
element.blur(); |
62 |
setTimeout(function() { |
63 |
start(); |
64 |
}, 350 ); |
65 |
}); |
66 |
}); |
67 |
|
68 |
asyncTest( "handle blur via click outside", function() { |
69 |
expect( 1 ); |
70 |
var blurHandled = false, |
71 |
element = $( "#menu1" ).menu({ |
72 |
blur: function( event ) { |
73 |
// Ignore duplicate blur event fired by IE |
74 |
if ( !blurHandled ) { |
75 |
blurHandled = true; |
76 |
equal( event.type, "menublur", "blur event.type is 'menublur'" ); |
77 |
} |
78 |
} |
79 |
}); |
80 |
|
81 |
click( element, "1" ); |
82 |
setTimeout(function() { |
83 |
$( "<a>", { id: "remove"} ).appendTo( "body" ).trigger( "click" ); |
84 |
setTimeout(function() { |
85 |
start(); |
86 |
}, 350 ); |
87 |
}); |
88 |
}); |
89 |
|
90 |
asyncTest( "handle focus of menu with active item", function() { |
91 |
expect( 1 ); |
92 |
var element = $( "#menu1" ).menu({ |
93 |
focus: function( event ) { |
94 |
log( $( event.target ).find( ".ui-state-focus" ).parent().index() ); |
95 |
} |
96 |
}); |
97 |
|
98 |
log( "focus", true ); |
99 |
element[0].focus(); |
100 |
setTimeout(function() { |
101 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } ); |
102 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } ); |
103 |
element[0].blur(); |
104 |
setTimeout(function() { |
105 |
element[0].focus(); |
106 |
setTimeout(function() { |
107 |
equal( logOutput(), "focus,0,1,2,2", "current active item remains active" ); |
108 |
start(); |
109 |
}); |
110 |
}); |
111 |
}); |
112 |
}); |
113 |
|
114 |
asyncTest( "handle submenu auto collapse: mouseleave", function() { |
115 |
expect( 4 ); |
116 |
var element = $( "#menu2" ).menu(), |
117 |
event = $.Event( "mouseenter" ); |
118 |
|
119 |
function menumouseleave1() { |
120 |
equal( element.find( "ul[aria-expanded='true']" ).length, 1, "first submenu expanded" ); |
121 |
element.menu( "focus", event, element.find( "li:nth-child(7) li:first" ) ); |
122 |
setTimeout( menumouseleave2, 350 ); |
123 |
} |
124 |
function menumouseleave2() { |
125 |
equal( element.find( "ul[aria-expanded='true']" ).length, 2, "second submenu expanded" ); |
126 |
element.find( "ul[aria-expanded='true']:first" ).trigger( "mouseleave" ); |
127 |
setTimeout( menumouseleave3, 350 ); |
128 |
} |
129 |
function menumouseleave3() { |
130 |
equal( element.find( "ul[aria-expanded='true']" ).length, 1, "second submenu collapsed" ); |
131 |
element.trigger( "mouseleave" ); |
132 |
setTimeout( menumouseleave4, 350 ); |
133 |
} |
134 |
function menumouseleave4() { |
135 |
equal( element.find( "ul[aria-expanded='true']" ).length, 0, "first submenu collapsed" ); |
136 |
start(); |
137 |
} |
138 |
|
139 |
element.find( "li:nth-child(7)" ).trigger( "mouseenter" ); |
140 |
setTimeout( menumouseleave1, 350 ); |
141 |
}); |
142 |
|
143 |
asyncTest( "handle submenu auto collapse: mouseleave", function() { |
144 |
expect( 4 ); |
145 |
var element = $( "#menu5" ).menu({ menus: "div" }), |
146 |
event = $.Event( "mouseenter" ); |
147 |
|
148 |
function menumouseleave1() { |
149 |
equal( element.find( "div[aria-expanded='true']" ).length, 1, "first submenu expanded" ); |
150 |
element.menu( "focus", event, element.find( ":nth-child(7)" ).find( "div" ).eq( 0 ).children().eq( 0 ) ); |
151 |
setTimeout( menumouseleave2, 350 ); |
152 |
} |
153 |
function menumouseleave2() { |
154 |
equal( element.find( "div[aria-expanded='true']" ).length, 2, "second submenu expanded" ); |
155 |
element.find( "div[aria-expanded='true']:first" ).trigger( "mouseleave" ); |
156 |
setTimeout( menumouseleave3, 350 ); |
157 |
} |
158 |
function menumouseleave3() { |
159 |
equal( element.find( "div[aria-expanded='true']" ).length, 1, "second submenu collapsed" ); |
160 |
element.trigger( "mouseleave" ); |
161 |
setTimeout( menumouseleave4, 350 ); |
162 |
} |
163 |
function menumouseleave4() { |
164 |
equal( element.find( "div[aria-expanded='true']" ).length, 0, "first submenu collapsed" ); |
165 |
start(); |
166 |
} |
167 |
|
168 |
element.find( ":nth-child(7)" ).trigger( "mouseenter" ); |
169 |
setTimeout( menumouseleave1, 350 ); |
170 |
}); |
171 |
|
172 |
|
173 |
asyncTest( "handle keyboard navigation on menu without scroll and without submenus", function() { |
174 |
expect( 12 ); |
175 |
var element = $( "#menu1" ).menu({ |
176 |
select: function( event, ui ) { |
177 |
log( $( ui.item[0] ).text() ); |
178 |
}, |
179 |
focus: function( event ) { |
180 |
log( $( event.target ).find( ".ui-state-focus" ).parent().index() ); |
181 |
} |
182 |
}); |
183 |
|
184 |
log( "keydown", true ); |
185 |
element[0].focus(); |
186 |
setTimeout(function() { |
187 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } ); |
188 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } ); |
189 |
equal( logOutput(), "keydown,0,1,2", "Keydown DOWN" ); |
190 |
|
191 |
log( "keydown", true ); |
192 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.UP } ); |
193 |
equal( logOutput(), "keydown,1", "Keydown UP" ); |
194 |
|
195 |
log( "keydown", true ); |
196 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.LEFT } ); |
197 |
equal( logOutput(), "keydown", "Keydown LEFT (no effect)" ); |
198 |
|
199 |
log( "keydown", true ); |
200 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.RIGHT } ); |
201 |
equal( logOutput(), "keydown", "Keydown RIGHT (no effect)" ); |
202 |
|
203 |
log( "keydown", true ); |
204 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.PAGE_DOWN } ); |
205 |
equal( logOutput(), "keydown,4", "Keydown PAGE_DOWN" ); |
206 |
|
207 |
log( "keydown", true ); |
208 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.PAGE_DOWN } ); |
209 |
equal( logOutput(), "keydown", "Keydown PAGE_DOWN (no effect)" ); |
210 |
|
211 |
log( "keydown", true ); |
212 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.PAGE_UP } ); |
213 |
equal( logOutput(), "keydown,0", "Keydown PAGE_UP" ); |
214 |
|
215 |
log( "keydown", true ); |
216 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.PAGE_UP } ); |
217 |
equal( logOutput(), "keydown", "Keydown PAGE_UP (no effect)" ); |
218 |
|
219 |
log( "keydown", true ); |
220 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.END } ); |
221 |
equal( logOutput(), "keydown,4", "Keydown END" ); |
222 |
|
223 |
log( "keydown", true ); |
224 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.HOME } ); |
225 |
equal( logOutput(), "keydown,0", "Keydown HOME" ); |
226 |
|
227 |
log( "keydown", true ); |
228 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.ESCAPE } ); |
229 |
equal( logOutput(), "keydown", "Keydown ESCAPE (no effect)" ); |
230 |
|
231 |
log( "keydown", true ); |
232 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.ENTER } ); |
233 |
equal( logOutput(), "keydown,Aberdeen", "Keydown ENTER" ); |
234 |
|
235 |
start(); |
236 |
}); |
237 |
}); |
238 |
|
239 |
asyncTest( "handle keyboard navigation on menu without scroll and with submenus", function() { |
240 |
expect( 16 ); |
241 |
var element = $( "#menu2" ).menu({ |
242 |
select: function( event, ui ) { |
243 |
log( $( ui.item[0] ).text() ); |
244 |
}, |
245 |
focus: function( event ) { |
246 |
log( $( event.target ).find( ".ui-state-focus" ).parent().index() ); |
247 |
} |
248 |
}); |
249 |
|
250 |
log( "keydown", true ); |
251 |
element.one( "menufocus", function() { |
252 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } ); |
253 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } ); |
254 |
equal( logOutput(), "keydown,1,2", "Keydown DOWN" ); |
255 |
setTimeout( menukeyboard1, 50 ); |
256 |
}); |
257 |
element.focus(); |
258 |
|
259 |
function menukeyboard1() { |
260 |
log( "keydown", true ); |
261 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.UP } ); |
262 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.UP } ); |
263 |
equal( logOutput(), "keydown,1,0", "Keydown UP" ); |
264 |
|
265 |
log( "keydown", true ); |
266 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.LEFT } ); |
267 |
equal( logOutput(), "keydown", "Keydown LEFT (no effect)" ); |
268 |
|
269 |
log( "keydown", true ); |
270 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } ); |
271 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } ); |
272 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } ); |
273 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } ); |
274 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.RIGHT } ); |
275 |
|
276 |
setTimeout(function() { |
277 |
equal( logOutput(), "keydown,1,2,3,4,0", "Keydown RIGHT (open submenu)" ); |
278 |
setTimeout( menukeyboard2, 50 ); |
279 |
}, 50 ); |
280 |
} |
281 |
|
282 |
function menukeyboard2() { |
283 |
log( "keydown", true ); |
284 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.LEFT } ); |
285 |
equal( logOutput(), "keydown,4", "Keydown LEFT (close submenu)" ); |
286 |
|
287 |
// re-open submenu |
288 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.RIGHT } ); |
289 |
setTimeout( menukeyboard3, 50 ); |
290 |
} |
291 |
|
292 |
function menukeyboard3() { |
293 |
log( "keydown", true ); |
294 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.PAGE_DOWN } ); |
295 |
equal( logOutput(), "keydown,2", "Keydown PAGE_DOWN" ); |
296 |
|
297 |
log( "keydown", true ); |
298 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.PAGE_DOWN } ); |
299 |
equal( logOutput(), "keydown", "Keydown PAGE_DOWN (no effect)" ); |
300 |
|
301 |
log( "keydown", true ); |
302 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.PAGE_UP } ); |
303 |
equal( logOutput(), "keydown,0", "Keydown PAGE_UP" ); |
304 |
|
305 |
log( "keydown", true ); |
306 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.PAGE_UP } ); |
307 |
equal( logOutput(), "keydown", "Keydown PAGE_UP (no effect)" ); |
308 |
|
309 |
log( "keydown", true ); |
310 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.END } ); |
311 |
equal( logOutput(), "keydown,2", "Keydown END" ); |
312 |
|
313 |
log( "keydown", true ); |
314 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.HOME } ); |
315 |
equal( logOutput(), "keydown,0", "Keydown HOME" ); |
316 |
|
317 |
log( "keydown", true ); |
318 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.ESCAPE } ); |
319 |
equal( logOutput(), "keydown,4", "Keydown ESCAPE (close submenu)" ); |
320 |
|
321 |
log( "keydown", true ); |
322 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.SPACE } ); |
323 |
setTimeout( menukeyboard4, 50 ); |
324 |
} |
325 |
|
326 |
function menukeyboard4() { |
327 |
equal( logOutput(), "keydown,0", "Keydown SPACE (open submenu)" ); |
328 |
|
329 |
log( "keydown", true ); |
330 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.ESCAPE } ); |
331 |
equal( logOutput(), "keydown,4", "Keydown ESCAPE (close submenu)" ); |
332 |
|
333 |
log( "keydown", true ); |
334 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } ); |
335 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } ); |
336 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.RIGHT } ); |
337 |
setTimeout( function() { |
338 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } ); |
339 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.RIGHT } ); |
340 |
setTimeout( function() { |
341 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } ); |
342 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } ); |
343 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } ); |
344 |
equal( logOutput(), "keydown,5,6,0,1,0,2,4,0", "Keydown skip dividers and items without anchors" ); |
345 |
|
346 |
log( "keydown", true ); |
347 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.ENTER } ); |
348 |
setTimeout( menukeyboard6, 50 ); |
349 |
}, 50 ); |
350 |
}, 50 ); |
351 |
} |
352 |
|
353 |
function menukeyboard6() { |
354 |
equal( logOutput(), "keydown,Ada", "Keydown ENTER (open submenu)" ); |
355 |
start(); |
356 |
} |
357 |
}); |
358 |
|
359 |
asyncTest( "handle keyboard navigation on menu with scroll and without submenus", function() { |
360 |
expect( 14 ); |
361 |
var element = $( "#menu3" ).menu({ |
362 |
select: function( event, ui ) { |
363 |
log( $( ui.item[0] ).text() ); |
364 |
}, |
365 |
focus: function( event ) { |
366 |
log( $( event.target ).find( ".ui-state-focus" ).parent().index()); |
367 |
} |
368 |
}); |
369 |
|
370 |
log( "keydown", true ); |
371 |
element[0].focus(); |
372 |
setTimeout(function() { |
373 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } ); |
374 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } ); |
375 |
equal( logOutput(), "keydown,0,1,2", "Keydown DOWN" ); |
376 |
|
377 |
log( "keydown", true ); |
378 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.UP } ); |
379 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.UP } ); |
380 |
equal( logOutput(), "keydown,1,0", "Keydown UP" ); |
381 |
|
382 |
log( "keydown", true ); |
383 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.LEFT } ); |
384 |
equal( logOutput(), "keydown", "Keydown LEFT (no effect)" ); |
385 |
|
386 |
log( "keydown", true ); |
387 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.RIGHT } ); |
388 |
equal( logOutput(), "keydown", "Keydown RIGHT (no effect)" ); |
389 |
|
390 |
log( "keydown", true ); |
391 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.PAGE_DOWN } ); |
392 |
equal( logOutput(), "keydown,10", "Keydown PAGE_DOWN" ); |
393 |
|
394 |
log( "keydown", true ); |
395 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.PAGE_DOWN } ); |
396 |
equal( logOutput(), "keydown,20", "Keydown PAGE_DOWN" ); |
397 |
|
398 |
log( "keydown", true ); |
399 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.PAGE_UP } ); |
400 |
equal( logOutput(), "keydown,10", "Keydown PAGE_UP" ); |
401 |
|
402 |
log( "keydown", true ); |
403 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.PAGE_UP } ); |
404 |
equal( logOutput(), "keydown,0", "Keydown PAGE_UP" ); |
405 |
|
406 |
log( "keydown", true ); |
407 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.PAGE_UP } ); |
408 |
equal( logOutput(), "keydown", "Keydown PAGE_UP (no effect)" ); |
409 |
|
410 |
log( "keydown", true ); |
411 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.END } ); |
412 |
equal( logOutput(), "keydown,37", "Keydown END" ); |
413 |
|
414 |
log( "keydown", true ); |
415 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.PAGE_DOWN } ); |
416 |
equal( logOutput(), "keydown", "Keydown PAGE_DOWN (no effect)" ); |
417 |
|
418 |
log( "keydown", true ); |
419 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.HOME } ); |
420 |
equal( logOutput(), "keydown,0", "Keydown HOME" ); |
421 |
|
422 |
log( "keydown", true ); |
423 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.ESCAPE } ); |
424 |
equal( logOutput(), "keydown", "Keydown ESCAPE (no effect)" ); |
425 |
|
426 |
log( "keydown", true ); |
427 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.ENTER } ); |
428 |
equal( logOutput(), "keydown,Aberdeen", "Keydown ENTER" ); |
429 |
|
430 |
start(); |
431 |
}); |
432 |
}); |
433 |
|
434 |
asyncTest( "handle keyboard navigation on menu with scroll and with submenus", function() { |
435 |
expect( 14 ); |
436 |
var element = $( "#menu4" ).menu({ |
437 |
select: function( event, ui ) { |
438 |
log( $( ui.item[0] ).text() ); |
439 |
}, |
440 |
focus: function( event ) { |
441 |
log( $( event.target ).find( ".ui-state-focus" ).parent().index()); |
442 |
} |
443 |
}); |
444 |
|
445 |
log( "keydown", true ); |
446 |
element.one( "menufocus", function() { |
447 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } ); |
448 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } ); |
449 |
equal( logOutput(), "keydown,1,2", "Keydown DOWN" ); |
450 |
setTimeout( menukeyboard1, 50 ); |
451 |
}); |
452 |
element.focus(); |
453 |
|
454 |
function menukeyboard1() { |
455 |
log( "keydown", true ); |
456 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.UP } ); |
457 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.UP } ); |
458 |
equal( logOutput(), "keydown,1,0", "Keydown UP" ); |
459 |
|
460 |
log( "keydown", true ); |
461 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.LEFT } ); |
462 |
equal( logOutput(), "keydown", "Keydown LEFT (no effect)" ); |
463 |
|
464 |
log( "keydown", true ); |
465 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } ); |
466 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.RIGHT } ); |
467 |
|
468 |
setTimeout( function() { |
469 |
equal( logOutput(), "keydown,1,0", "Keydown RIGHT (open submenu)" ); |
470 |
}, 50 ); |
471 |
setTimeout( menukeyboard2, 50 ); |
472 |
} |
473 |
|
474 |
function menukeyboard2() { |
475 |
log( "keydown", true ); |
476 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.LEFT } ); |
477 |
equal( logOutput(), "keydown,1", "Keydown LEFT (close submenu)" ); |
478 |
|
479 |
// re-open submenu |
480 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.RIGHT } ); |
481 |
setTimeout( menukeyboard3, 50 ); |
482 |
} |
483 |
|
484 |
function menukeyboard3() { |
485 |
log( "keydown", true ); |
486 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.PAGE_DOWN } ); |
487 |
equal( logOutput(), "keydown,10", "Keydown PAGE_DOWN" ); |
488 |
|
489 |
log( "keydown", true ); |
490 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.PAGE_DOWN } ); |
491 |
equal( logOutput(), "keydown,20", "Keydown PAGE_DOWN" ); |
492 |
|
493 |
log( "keydown", true ); |
494 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.PAGE_UP } ); |
495 |
equal( logOutput(), "keydown,10", "Keydown PAGE_UP" ); |
496 |
|
497 |
log( "keydown", true ); |
498 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.PAGE_UP } ); |
499 |
equal( logOutput(), "keydown,0", "Keydown PAGE_UP" ); |
500 |
|
501 |
log( "keydown", true ); |
502 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.END } ); |
503 |
equal( logOutput(), "keydown,27", "Keydown END" ); |
504 |
|
505 |
log( "keydown", true ); |
506 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.HOME } ); |
507 |
equal( logOutput(), "keydown,0", "Keydown HOME" ); |
508 |
|
509 |
log( "keydown", true ); |
510 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.ESCAPE } ); |
511 |
equal( logOutput(), "keydown,1", "Keydown ESCAPE (close submenu)" ); |
512 |
|
513 |
log( "keydown", true ); |
514 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.ENTER } ); |
515 |
setTimeout( menukeyboard4, 50 ); |
516 |
} |
517 |
|
518 |
function menukeyboard4() { |
519 |
equal( logOutput(), "keydown,0", "Keydown ENTER (open submenu)" ); |
520 |
|
521 |
log( "keydown", true ); |
522 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.ENTER } ); |
523 |
equal( logOutput(), "keydown,Aberdeen", "Keydown ENTER (select item)" ); |
524 |
|
525 |
start(); |
526 |
} |
527 |
}); |
528 |
|
529 |
asyncTest( "handle keyboard navigation and mouse click on menu with disabled items", function() { |
530 |
expect( 6 ); |
531 |
var element = $( "#menu6" ).menu({ |
532 |
select: function( event, ui ) { |
533 |
log( $( ui.item[0] ).text() ); |
534 |
}, |
535 |
focus: function( event ) { |
536 |
log( $( event.target ).find( ".ui-state-focus" ).parent().index()); |
537 |
} |
538 |
}); |
539 |
|
540 |
log( "keydown", true ); |
541 |
element.one( "menufocus", function() { |
542 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } ); |
543 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.ENTER } ); |
544 |
equal( logOutput(), "keydown,1", "Keydown focus but not select disabled item" ); |
545 |
setTimeout( menukeyboard1, 50 ); |
546 |
}); |
547 |
element.focus(); |
548 |
|
549 |
function menukeyboard1() { |
550 |
log( "keydown", true ); |
551 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } ); |
552 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } ); |
553 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } ); |
554 |
equal( logOutput(), "keydown,2,3,4", "Keydown focus disabled item with submenu" ); |
555 |
|
556 |
log( "keydown", true ); |
557 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.LEFT } ); |
558 |
equal( logOutput(), "keydown", "Keydown LEFT (no effect)" ); |
559 |
|
560 |
log( "keydown", true ); |
561 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.RIGHT } ); |
562 |
|
563 |
setTimeout( function() { |
564 |
equal( logOutput(), "keydown", "Keydown RIGHT (no effect on disabled sub-menu)" ); |
565 |
|
566 |
log( "keydown", true ); |
567 |
element.simulate( "keydown", { keyCode: $.ui.keyCode.ENTER } ); |
568 |
|
569 |
setTimeout( function() { |
570 |
equal( logOutput(), "keydown", "Keydown ENTER (no effect on disabled sub-menu)" ); |
571 |
log( "click", true ); |
572 |
click( element, "1" ); |
573 |
equal( logOutput(), "click", "Click disabled item (no effect)" ); |
574 |
start(); |
575 |
}, 50 ); |
576 |
}, 50 ); |
577 |
} |
578 |
}); |
579 |
|
580 |
asyncTest( "handle keyboard navigation with spelling of menu items", function() { |
581 |
expect( 2 ); |
582 |
var element = $( "#menu2" ).menu({ |
583 |
focus: function( event ) { |
584 |
log( $( event.target ).find( ".ui-state-focus" ).parent().index() ); |
585 |
} |
586 |
}); |
587 |
|
588 |
log( "keydown", true ); |
589 |
element.one( "menufocus", function() { |
590 |
element.simulate( "keydown", { keyCode: 65 } ); |
591 |
element.simulate( "keydown", { keyCode: 68 } ); |
592 |
element.simulate( "keydown", { keyCode: 68 } ); |
593 |
equal( logOutput(), "keydown,0,1,3", "Keydown focus Addyston by spelling the first 3 letters" ); |
594 |
element.simulate( "keydown", { keyCode: 68 } ); |
595 |
equal( logOutput(), "keydown,0,1,3,4", "Keydown focus Delphi by repeating the 'd' again" ); |
596 |
start(); |
597 |
}); |
598 |
element[0].focus(); |
599 |
}); |
600 |
|
601 |
})( jQuery ); |