diff options
Diffstat (limited to 'tests/unit/menu/menu_events.js')
-rw-r--r-- | tests/unit/menu/menu_events.js | 232 |
1 files changed, 145 insertions, 87 deletions
diff --git a/tests/unit/menu/menu_events.js b/tests/unit/menu/menu_events.js index bee6fcfa6..4cb083240 100644 --- a/tests/unit/menu/menu_events.js +++ b/tests/unit/menu/menu_events.js @@ -3,21 +3,24 @@ */ (function($) { +var log = TestHelpers.menu.log, + click = TestHelpers.menu.click; + module("menu: events"); test("handle click on menu", function() { expect(1); var menu = $('#menu1').menu({ select: function(event, ui) { - menu_log(); + log(); } }); - menu_log("click",true); - menu_click($('#menu1'),"1"); - menu_log("afterclick"); - menu_click( menu,"2"); - menu_click($('#menu1'),"3"); - menu_click( menu,"1"); + log("click",true); + click($('#menu1'),"1"); + log("afterclick"); + click( menu,"2"); + click($('#menu1'),"3"); + click( menu,"1"); equal( $("#log").html(), "1,3,2,afterclick,1,click,", "Click order not valid."); }); @@ -25,16 +28,16 @@ test("handle click on custom item menu", function() { expect(1); var menu = $('#menu5').menu({ select: function(event, ui) { - menu_log(); + log(); }, menus: "div" }); - menu_log("click",true); - menu_click($('#menu5'),"1"); - menu_log("afterclick"); - menu_click( menu,"2"); - menu_click($('#menu5'),"3"); - menu_click( menu,"1"); + log("click",true); + click($('#menu5'),"1"); + log("afterclick"); + click( menu,"2"); + click($('#menu5'),"3"); + click( menu,"1"); equal( $("#log").html(), "1,3,2,afterclick,1,click,", "Click order not valid."); }); @@ -75,7 +78,7 @@ test( "handle blur on custom item menu: click", function() { items: "div" }); - menu_click($('#menu5'),"1"); + click($('#menu5'),"1"); $( "<a>", { id: "remove"} ).appendTo("body").trigger( "click" ); $("#remove").remove(); @@ -84,14 +87,12 @@ test( "handle blur on custom item menu: click", function() { asyncTest( "handle submenu auto collapse: mouseleave", function() { expect( 4 ); - var $menu = $( "#menu2" ).menu(); - - $menu.find( "li:nth-child(7)" ).trigger( "mouseover" ); - setTimeout( menumouseleave1, 350 ); + var $menu = $( "#menu2" ).menu(), + event = $.Event( "mouseenter" ); function menumouseleave1() { equal( $menu.find( "ul[aria-expanded='true']" ).length, 1, "first submenu expanded" ); - $menu.find( "li:nth-child(7) li:first" ).trigger( "mouseover" ); + $menu.menu( "focus", event, $menu.find( "li:nth-child(7) li:first" ) ); setTimeout( menumouseleave2, 350 ); } function menumouseleave2() { @@ -108,18 +109,19 @@ asyncTest( "handle submenu auto collapse: mouseleave", function() { equal( $menu.find( "ul[aria-expanded='true']" ).length, 0, "first submenu collapsed" ); start(); } + + $menu.find( "li:nth-child(7)" ).trigger( "mouseenter" ); + setTimeout( menumouseleave1, 350 ); }); asyncTest( "handle submenu auto collapse: mouseleave", function() { expect( 4 ); - var $menu = $( "#menu5" ).menu( { menus: "div" } ); - - $menu.find( ":nth-child(7)" ).trigger( "mouseover" ); - setTimeout( menumouseleave1, 350 ); + var $menu = $( "#menu5" ).menu( { menus: "div" } ), + event = $.Event( "mouseenter" ); function menumouseleave1() { equal( $menu.find( "div[aria-expanded='true']" ).length, 1, "first submenu expanded" ); - $menu.find( ":nth-child(7)" ).find( "div" ).eq( 0 ).children().eq( 0 ).trigger( "mouseover" ); + $menu.menu( "focus", event, $menu.find( ":nth-child(7)" ).find( "div" ).eq( 0 ).children().eq( 0 ) ); setTimeout( menumouseleave2, 350 ); } function menumouseleave2() { @@ -136,6 +138,10 @@ asyncTest( "handle submenu auto collapse: mouseleave", function() { equal( $menu.find( "div[aria-expanded='true']" ).length, 0, "first submenu collapsed" ); start(); } + + $menu.find( ":nth-child(7)" ).trigger( "mouseenter" ); + setTimeout( menumouseleave1, 350 ); + }); @@ -143,60 +149,60 @@ test("handle keyboard navigation on menu without scroll and without submenus", f expect(12); var element = $('#menu1').menu({ select: function(event, ui) { - menu_log($(ui.item[0]).text()); + log($(ui.item[0]).text()); }, focus: function( event, ui ) { - menu_log($(event.target).find(".ui-state-focus").parent().index()); + log($(event.target).find(".ui-state-focus").parent().index()); } }); - menu_log("keydown",true); + log("keydown",true); element.focus(); element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } ); element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } ); equal( $("#log").html(), "2,1,0,keydown,", "Keydown DOWN"); - menu_log("keydown",true); + log("keydown",true); element.simulate( "keydown", { keyCode: $.ui.keyCode.UP } ); equal( $("#log").html(), "1,keydown,", "Keydown UP"); - menu_log("keydown",true); + log("keydown",true); element.simulate( "keydown", { keyCode: $.ui.keyCode.LEFT } ); equal( $("#log").html(), "keydown,", "Keydown LEFT (no effect)"); - menu_log("keydown",true); + log("keydown",true); element.simulate( "keydown", { keyCode: $.ui.keyCode.RIGHT } ); equal( $("#log").html(), "keydown,", "Keydown RIGHT (no effect)"); - menu_log("keydown",true); + log("keydown",true); element.simulate( "keydown", { keyCode: $.ui.keyCode.PAGE_DOWN } ); equal( $("#log").html(), "4,keydown,", "Keydown PAGE_DOWN"); - menu_log("keydown",true); + log("keydown",true); element.simulate( "keydown", { keyCode: $.ui.keyCode.PAGE_DOWN } ); equal( $("#log").html(), "keydown,", "Keydown PAGE_DOWN (no effect)"); - menu_log("keydown",true); + log("keydown",true); element.simulate( "keydown", { keyCode: $.ui.keyCode.PAGE_UP } ); equal( $("#log").html(), "0,keydown,", "Keydown PAGE_UP"); - menu_log("keydown",true); + log("keydown",true); element.simulate( "keydown", { keyCode: $.ui.keyCode.PAGE_UP } ); equal( $("#log").html(), "keydown,", "Keydown PAGE_UP (no effect)"); - menu_log("keydown",true); + log("keydown",true); element.simulate( "keydown", { keyCode: $.ui.keyCode.END } ); equal( $("#log").html(), "4,keydown,", "Keydown END"); - menu_log("keydown",true); + log("keydown",true); element.simulate( "keydown", { keyCode: $.ui.keyCode.HOME } ); equal( $("#log").html(), "0,keydown,", "Keydown HOME"); - menu_log("keydown",true); + log("keydown",true); element.simulate( "keydown", { keyCode: $.ui.keyCode.ESCAPE } ); equal( $("#log").html(), "keydown,", "Keydown ESCAPE (no effect)"); - menu_log("keydown",true); + log("keydown",true); element.simulate( "keydown", { keyCode: $.ui.keyCode.ENTER } ); equal( $("#log").html(), "Aberdeen,keydown,", "Keydown ENTER"); }); @@ -205,14 +211,14 @@ asyncTest("handle keyboard navigation on menu without scroll and with submenus", expect(14); var element = $('#menu2').menu({ select: function(event, ui) { - menu_log($(ui.item[0]).text()); + log($(ui.item[0]).text()); }, focus: function( event, ui ) { - menu_log($(event.target).find(".ui-state-focus").parent().index()); + log($(event.target).find(".ui-state-focus").parent().index()); } }); - menu_log("keydown",true); + log("keydown",true); element.one( "menufocus", function( event, ui ) { element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } ); element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } ); @@ -222,16 +228,16 @@ asyncTest("handle keyboard navigation on menu without scroll and with submenus", element.focus(); function menukeyboard1() { - menu_log("keydown",true); + log("keydown",true); element.simulate( "keydown", { keyCode: $.ui.keyCode.UP } ); element.simulate( "keydown", { keyCode: $.ui.keyCode.UP } ); equal( $("#log").html(), "0,1,keydown,", "Keydown UP"); - menu_log("keydown",true); + log("keydown",true); element.simulate( "keydown", { keyCode: $.ui.keyCode.LEFT } ); equal( $("#log").html(), "keydown,", "Keydown LEFT (no effect)"); - menu_log("keydown",true); + log("keydown",true); element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } ); element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } ); element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } ); @@ -245,7 +251,7 @@ asyncTest("handle keyboard navigation on menu without scroll and with submenus", } function menukeyboard2() { - menu_log("keydown",true); + log("keydown",true); element.simulate( "keydown", { keyCode: $.ui.keyCode.LEFT } ); equal( $("#log").html(), "4,keydown,", "Keydown LEFT (close submenu)"); @@ -255,35 +261,35 @@ asyncTest("handle keyboard navigation on menu without scroll and with submenus", } function menukeyboard3() { - menu_log("keydown",true); + log("keydown",true); element.simulate( "keydown", { keyCode: $.ui.keyCode.PAGE_DOWN } ); equal( $("#log").html(), "2,keydown,", "Keydown PAGE_DOWN"); - menu_log("keydown",true); + log("keydown",true); element.simulate( "keydown", { keyCode: $.ui.keyCode.PAGE_DOWN } ); equal( $("#log").html(), "keydown,", "Keydown PAGE_DOWN (no effect)"); - menu_log("keydown",true); + log("keydown",true); element.simulate( "keydown", { keyCode: $.ui.keyCode.PAGE_UP } ); equal( $("#log").html(), "0,keydown,", "Keydown PAGE_UP"); - menu_log("keydown",true); + log("keydown",true); element.simulate( "keydown", { keyCode: $.ui.keyCode.PAGE_UP } ); equal( $("#log").html(), "keydown,", "Keydown PAGE_UP (no effect)"); - menu_log("keydown",true); + log("keydown",true); element.simulate( "keydown", { keyCode: $.ui.keyCode.END } ); equal( $("#log").html(), "2,keydown,", "Keydown END"); - menu_log("keydown",true); + log("keydown",true); element.simulate( "keydown", { keyCode: $.ui.keyCode.HOME } ); equal( $("#log").html(), "0,keydown,", "Keydown HOME"); - menu_log("keydown",true); + log("keydown",true); element.simulate( "keydown", { keyCode: $.ui.keyCode.ESCAPE } ); equal( $("#log").html(), "4,keydown,", "Keydown ESCAPE (close submenu)"); - menu_log("keydown",true); + log("keydown",true); element.simulate( "keydown", { keyCode: $.ui.keyCode.ENTER } ); setTimeout( menukeyboard4, 50 ); } @@ -291,7 +297,7 @@ asyncTest("handle keyboard navigation on menu without scroll and with submenus", function menukeyboard4() { equal( $("#log").html(), "0,keydown,", "Keydown ENTER (open submenu)"); - menu_log("keydown",true); + log("keydown",true); element.simulate( "keydown", { keyCode: $.ui.keyCode.ENTER } ); equal( $("#log").html(), "Ada,keydown,", "Keydown ENTER (select item)"); @@ -303,69 +309,69 @@ test("handle keyboard navigation on menu with scroll and without submenus", func expect(14); var element = $('#menu3').menu({ select: function(event, ui) { - menu_log($(ui.item[0]).text()); + log($(ui.item[0]).text()); }, focus: function( event, ui ) { - menu_log($(event.target).find(".ui-state-focus").parent().index()); + log($(event.target).find(".ui-state-focus").parent().index()); } }); - menu_log("keydown",true); + log("keydown",true); element.focus(); element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } ); element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } ); equal( $("#log").html(), "2,1,0,keydown,", "Keydown DOWN"); - menu_log("keydown",true); + log("keydown",true); element.simulate( "keydown", { keyCode: $.ui.keyCode.UP } ); element.simulate( "keydown", { keyCode: $.ui.keyCode.UP } ); equal( $("#log").html(), "0,1,keydown,", "Keydown UP"); - menu_log("keydown",true); + log("keydown",true); element.simulate( "keydown", { keyCode: $.ui.keyCode.LEFT } ); equal( $("#log").html(), "keydown,", "Keydown LEFT (no effect)"); - menu_log("keydown",true); + log("keydown",true); element.simulate( "keydown", { keyCode: $.ui.keyCode.RIGHT } ); equal( $("#log").html(), "keydown,", "Keydown RIGHT (no effect)"); - menu_log("keydown",true); + log("keydown",true); element.simulate( "keydown", { keyCode: $.ui.keyCode.PAGE_DOWN } ); equal( $("#log").html(), "10,keydown,", "Keydown PAGE_DOWN"); - menu_log("keydown",true); + log("keydown",true); element.simulate( "keydown", { keyCode: $.ui.keyCode.PAGE_DOWN } ); equal( $("#log").html(), "20,keydown,", "Keydown PAGE_DOWN"); - menu_log("keydown",true); + log("keydown",true); element.simulate( "keydown", { keyCode: $.ui.keyCode.PAGE_UP } ); equal( $("#log").html(), "10,keydown,", "Keydown PAGE_UP"); - menu_log("keydown",true); + log("keydown",true); element.simulate( "keydown", { keyCode: $.ui.keyCode.PAGE_UP } ); equal( $("#log").html(), "0,keydown,", "Keydown PAGE_UP"); - menu_log("keydown",true); + log("keydown",true); element.simulate( "keydown", { keyCode: $.ui.keyCode.PAGE_UP } ); equal( $("#log").html(), "keydown,", "Keydown PAGE_UP (no effect)"); - menu_log("keydown",true); + log("keydown",true); element.simulate( "keydown", { keyCode: $.ui.keyCode.END } ); equal( $("#log").html(), "37,keydown,", "Keydown END"); - menu_log("keydown",true); + log("keydown",true); element.simulate( "keydown", { keyCode: $.ui.keyCode.PAGE_DOWN } ); equal( $("#log").html(), "keydown,", "Keydown PAGE_DOWN (no effect)"); - menu_log("keydown",true); + log("keydown",true); element.simulate( "keydown", { keyCode: $.ui.keyCode.HOME } ); equal( $("#log").html(), "0,keydown,", "Keydown HOME"); - menu_log("keydown",true); + log("keydown",true); element.simulate( "keydown", { keyCode: $.ui.keyCode.ESCAPE } ); equal( $("#log").html(), "keydown,", "Keydown ESCAPE (no effect)"); - menu_log("keydown",true); + log("keydown",true); element.simulate( "keydown", { keyCode: $.ui.keyCode.ENTER } ); equal( $("#log").html(), "Aberdeen,keydown,", "Keydown ENTER"); }); @@ -374,14 +380,14 @@ asyncTest("handle keyboard navigation on menu with scroll and with submenus", fu expect(14); var element = $('#menu4').menu({ select: function(event, ui) { - menu_log($(ui.item[0]).text()); + log($(ui.item[0]).text()); }, focus: function( event, ui ) { - menu_log($(event.target).find(".ui-state-focus").parent().index()); + log($(event.target).find(".ui-state-focus").parent().index()); } }); - menu_log("keydown",true); + log("keydown",true); element.one( "menufocus", function( event, ui ) { element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } ); element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } ); @@ -392,16 +398,16 @@ asyncTest("handle keyboard navigation on menu with scroll and with submenus", fu function menukeyboard1() { - menu_log("keydown",true); + log("keydown",true); element.simulate( "keydown", { keyCode: $.ui.keyCode.UP } ); element.simulate( "keydown", { keyCode: $.ui.keyCode.UP } ); equal( $("#log").html(), "0,1,keydown,", "Keydown UP"); - menu_log("keydown",true); + log("keydown",true); element.simulate( "keydown", { keyCode: $.ui.keyCode.LEFT } ); equal( $("#log").html(), "keydown,", "Keydown LEFT (no effect)"); - menu_log("keydown",true); + log("keydown",true); element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } ); element.simulate( "keydown", { keyCode: $.ui.keyCode.RIGHT } ); @@ -412,7 +418,7 @@ asyncTest("handle keyboard navigation on menu with scroll and with submenus", fu } function menukeyboard2() { - menu_log("keydown",true); + log("keydown",true); element.simulate( "keydown", { keyCode: $.ui.keyCode.LEFT } ); equal( $("#log").html(), "1,keydown,", "Keydown LEFT (close submenu)"); @@ -422,35 +428,35 @@ asyncTest("handle keyboard navigation on menu with scroll and with submenus", fu } function menukeyboard3() { - menu_log("keydown",true); + log("keydown",true); element.simulate( "keydown", { keyCode: $.ui.keyCode.PAGE_DOWN } ); equal( $("#log").html(), "10,keydown,", "Keydown PAGE_DOWN"); - menu_log("keydown",true); + log("keydown",true); element.simulate( "keydown", { keyCode: $.ui.keyCode.PAGE_DOWN } ); equal( $("#log").html(), "20,keydown,", "Keydown PAGE_DOWN"); - menu_log("keydown",true); + log("keydown",true); element.simulate( "keydown", { keyCode: $.ui.keyCode.PAGE_UP } ); equal( $("#log").html(), "10,keydown,", "Keydown PAGE_UP"); - menu_log("keydown",true); + log("keydown",true); element.simulate( "keydown", { keyCode: $.ui.keyCode.PAGE_UP } ); equal( $("#log").html(), "0,keydown,", "Keydown PAGE_UP"); - menu_log("keydown",true); + log("keydown",true); element.simulate( "keydown", { keyCode: $.ui.keyCode.END } ); equal( $("#log").html(), "27,keydown,", "Keydown END"); - menu_log("keydown",true); + log("keydown",true); element.simulate( "keydown", { keyCode: $.ui.keyCode.HOME } ); equal( $("#log").html(), "0,keydown,", "Keydown HOME"); - menu_log("keydown",true); + log("keydown",true); element.simulate( "keydown", { keyCode: $.ui.keyCode.ESCAPE } ); equal( $("#log").html(), "1,keydown,", "Keydown ESCAPE (close submenu)"); - menu_log("keydown",true); + log("keydown",true); element.simulate( "keydown", { keyCode: $.ui.keyCode.ENTER } ); setTimeout( menukeyboard4, 50 ); } @@ -458,7 +464,7 @@ asyncTest("handle keyboard navigation on menu with scroll and with submenus", fu function menukeyboard4() { equal( $("#log").html(), "0,keydown,", "Keydown ENTER (open submenu)"); - menu_log("keydown",true); + log("keydown",true); element.simulate( "keydown", { keyCode: $.ui.keyCode.ENTER } ); equal( $("#log").html(), "Aberdeen,keydown,", "Keydown ENTER (select item)"); @@ -466,4 +472,56 @@ asyncTest("handle keyboard navigation on menu with scroll and with submenus", fu } }); +asyncTest("handle keyboard navigation and mouse click on menu with disabled items", function() { + expect(6); + var element = $('#menu6').menu({ + select: function(event, ui) { + log($(ui.item[0]).text()); + }, + focus: function( event, ui ) { + log($(event.target).find(".ui-state-focus").parent().index()); + } + }); + + log("keydown",true); + element.one( "menufocus", function( event, ui ) { + element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } ); + element.simulate( "keydown", { keyCode: $.ui.keyCode.ENTER } ); + equal( $("#log").html(), "1,keydown,", "Keydown focus but not select disabled item"); + setTimeout( menukeyboard1, 50 ); + }); + element.focus(); + + + function menukeyboard1() { + log("keydown",true); + element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } ); + element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } ); + element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } ); + equal( $("#log").html(), "4,3,2,keydown,", "Keydown focus disabled item with submenu"); + + log("keydown",true); + element.simulate( "keydown", { keyCode: $.ui.keyCode.LEFT } ); + equal( $("#log").html(), "keydown,", "Keydown LEFT (no effect)"); + + log("keydown",true); + element.simulate( "keydown", { keyCode: $.ui.keyCode.RIGHT } ); + + setTimeout( function() { + equal( $("#log").html(), "keydown,", "Keydown RIGHT (no effect on disabled sub-menu)"); + + log("keydown",true); + element.simulate( "keydown", { keyCode: $.ui.keyCode.ENTER } ); + + setTimeout( function() { + equal( $("#log").html(), "keydown,", "Keydown ENTER (no effect on disabled sub-menu)"); + log("click",true); + click( element, "1" ); + equal( $("#log").html(), "click,", "Click disabled item (no effect)"); + start(); + }, 50); + }, 50); + } +}); + })(jQuery); |