and a note on manual changes in dataTables.bootstrap.css
[myslice.git] / third-party / jquery-ui-1.10.2 / tests / unit / menu / menu_events.js
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 );