@@ -41,49 +41,62 @@ test("handle click on custom item menu", function() {
41
41
equal ( $ ( "#log" ) . html ( ) , "1,3,2,afterclick,1,click," , "Click order not valid." ) ;
42
42
} ) ;
43
43
44
- /* Commenting out these tests until a way to handle the extra focus and blur events
45
- fired by IE is found
46
- test( "handle blur: click", function() {
47
- expect( 4 );
48
- var $menu = $( "#menu1" ).menu({
49
- focus: function( event, ui ) {
50
- equal( event.originalEvent.type, "click", "focus triggered 'click'" );
51
- equal( event.type, "menufocus", "focus event.type is 'menufocus'" );
52
-
53
- },
54
- blur: function( event, ui ) {
55
- equal( event.originalEvent.type, "click", "blur triggered 'click'" );
56
- equal( event.type, "menublur", "blur event.type is 'menublur'" );
57
- }
58
- });
59
-
60
- $menu.find( "li a:first" ).trigger( "click" );
61
- $( "<a>", { id: "remove"} ).appendTo("body").trigger( "click" );
44
+ asyncTest ( "handle blur" , function ( ) {
45
+ expect ( 1 ) ;
46
+ var blurHandled = false ,
47
+ $menu = $ ( "#menu1" ) . menu ( {
48
+ blur : function ( event , ui ) {
49
+ // Ignore duplicate blur event fired by IE
50
+ if ( ! blurHandled ) {
51
+ blurHandled = true ;
52
+ equal ( event . type , "menublur" , "blur event.type is 'menublur'" ) ;
53
+ }
54
+ }
55
+ } ) ;
56
+
57
+ click ( $menu , "1" ) ;
58
+ setTimeout ( function ( ) {
59
+ $menu . blur ( ) ;
60
+ start ( ) ;
61
+ } , 350 ) ;
62
+ } ) ;
62
63
63
- $("#remove").remove();
64
+ asyncTest ( "handle blur on click" , function ( ) {
65
+ expect ( 1 ) ;
66
+ var blurHandled = false ,
67
+ $menu = $ ( "#menu1" ) . menu ( {
68
+ blur : function ( event , ui ) {
69
+ // Ignore duplicate blur event fired by IE
70
+ if ( ! blurHandled ) {
71
+ blurHandled = true ;
72
+ equal ( event . type , "menublur" , "blur event.type is 'menublur'" ) ;
73
+ }
74
+ }
75
+ } ) ;
76
+
77
+ click ( $menu , "1" ) ;
78
+ setTimeout ( function ( ) {
79
+ $ ( "<a>" , { id : "remove" } ) . appendTo ( "body" ) . trigger ( "click" ) ;
80
+ $ ( "#remove" ) . remove ( ) ;
81
+ start ( ) ;
82
+ } , 350 ) ;
64
83
} ) ;
65
84
66
- test( "handle blur on custom item menu: click ", function() {
67
- expect( 4 );
68
- var $menu = $( "#menu5 " ).menu({
85
+ test ( "handle focus of menu with active item " , function ( ) {
86
+ expect ( 1 ) ;
87
+ var element = $ ( "#menu1 " ) . menu ( {
69
88
focus : function ( event , ui ) {
70
- equal( event.originalEvent.type, "click", "focus triggered 'click'" );
71
- equal( event.type, "menufocus", "focus event.type is 'menufocus'" );
72
-
73
- },
74
- blur: function( event, ui ) {
75
- equal( event.originalEvent.type, "click", "blur triggered 'click'" );
76
- equal( event.type, "menublur", "blur event.type is 'menublur'" );
77
- },
78
- items: "div"
89
+ log ( $ ( event . target ) . find ( ".ui-state-focus" ) . parent ( ) . index ( ) ) ;
90
+ }
79
91
} ) ;
80
92
81
- click($('#menu5'),"1");
82
- $( "<a>", { id: "remove"} ).appendTo("body").trigger( "click" );
83
-
84
- $("#remove").remove();
93
+ log ( "focus" , true ) ;
94
+ element . focus ( ) ;
95
+ element . simulate ( "keydown" , { keyCode : $ . ui . keyCode . DOWN } ) ;
96
+ element . simulate ( "keydown" , { keyCode : $ . ui . keyCode . DOWN } ) ;
97
+ element . focus ( ) ;
98
+ equal ( $ ( "#log" ) . html ( ) , "2,2,1,0,focus," , "current active item remains active" ) ;
85
99
} ) ;
86
- */
87
100
88
101
asyncTest ( "handle submenu auto collapse: mouseleave" , function ( ) {
89
102
expect ( 4 ) ;
@@ -536,4 +549,42 @@ asyncTest("handle keyboard navigation and mouse click on menu with disabled item
536
549
}
537
550
} ) ;
538
551
552
+ test ( "handle keyboard navigation with spelling of menu items" , function ( ) {
553
+ expect ( 2 ) ;
554
+ var element = $ ( "#menu2" ) . menu ( {
555
+ focus : function ( event , ui ) {
556
+ log ( $ ( event . target ) . find ( ".ui-state-focus" ) . parent ( ) . index ( ) ) ;
557
+ }
558
+ } ) ;
559
+
560
+ log ( "keydown" , true ) ;
561
+ element . one ( "menufocus" , function ( event , ui ) {
562
+ element . simulate ( "keydown" , { keyCode : 65 } ) ;
563
+ element . simulate ( "keydown" , { keyCode : 68 } ) ;
564
+ element . simulate ( "keydown" , { keyCode : 68 } ) ;
565
+ equal ( $ ( "#log" ) . html ( ) , "3,1,0,keydown," , "Keydown focus Addyston by spelling the first 3 letters" ) ;
566
+ element . simulate ( "keydown" , { keyCode : 68 } ) ;
567
+ equal ( $ ( "#log" ) . html ( ) , "4,3,1,0,keydown," , "Keydown focus Delphi by repeating the 'd' again" ) ;
568
+ } ) ;
569
+ element . focus ( ) ;
570
+ } ) ;
571
+
572
+ asyncTest ( "handle page up and page down before the menu has focus" , function ( ) {
573
+ expect ( 1 ) ;
574
+ var element = $ ( "#menu1" ) . menu ( {
575
+ focus : function ( event , ui ) {
576
+ log ( $ ( event . target ) . find ( ".ui-state-focus" ) . parent ( ) . index ( ) ) ;
577
+ }
578
+ } ) ;
579
+
580
+ log ( "keydown" , true ) ;
581
+ element . simulate ( "keydown" , { keyCode : $ . ui . keyCode . PAGE_DOWN } ) ;
582
+ element . blur ( ) ;
583
+ setTimeout ( function ( ) {
584
+ element . simulate ( "keydown" , { keyCode : $ . ui . keyCode . PAGE_UP } ) ;
585
+ equal ( $ ( "#log" ) . html ( ) , "0,0,keydown," , "Page Up and Page Down bring initial focus to first item" ) ;
586
+ start ( ) ;
587
+ } , 350 ) ;
588
+ } ) ;
589
+
539
590
} ) ( jQuery ) ;
0 commit comments