diff options
Diffstat (limited to 'tests/unit/selectmenu/events.js')
-rw-r--r-- | tests/unit/selectmenu/events.js | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/tests/unit/selectmenu/events.js b/tests/unit/selectmenu/events.js new file mode 100644 index 000000000..d5c463fa9 --- /dev/null +++ b/tests/unit/selectmenu/events.js @@ -0,0 +1,136 @@ +define( [ + "jquery", + "ui/selectmenu" +], function( $ ) { + +module( "selectmenu: events", { + setup: function() { + this.element = $( "#speed" ); + } +}); + +asyncTest( "change", function() { + expect( 3 ); + + var button, menu, options, + optionIndex = 1; + + this.element.selectmenu({ + change: function ( event, ui ) { + equal( ui.item.index, optionIndex, "ui.item.index contains correct option index" ); + equal( ui.item.element[ 0 ], options.eq( optionIndex )[ 0 ], + "ui.item.element contains original option element" ); + equal( ui.item.value, options.eq( optionIndex ).text(), + "ui.item.value property updated correctly" ); + } + }); + + button = this.element.selectmenu( "widget" ); + menu = this.element.selectmenu( "menuWidget" ); + options = this.element.find( "option" ); + + button.simulate( "focus" ); + + setTimeout(function() { + button.trigger( "click" ); + menu.find( "li" ).eq( optionIndex ).simulate( "mouseover" ).trigger( "click" ); + start(); + }); +}); + +test( "close", function() { + expect( 2 ); + + var shouldFire; + + this.element.selectmenu({ + close: function() { + ok( shouldFire, "close event fired on close" ); + } + }); + + shouldFire = false; + this.element.selectmenu( "open" ); + shouldFire = true; + this.element.selectmenu( "close" ); + shouldFire = false; + this.element.selectmenu( "open" ); + shouldFire = true; + $( "body" ).trigger( "mousedown" ); +}); + +asyncTest( "focus", function() { + expect( 9 ); + + var button, menu, links, + that = this, + optionIndex = this.element[ 0 ].selectedIndex + 1, + options = this.element.find( "option" ); + + this.element.selectmenu({ + focus: function( event, ui ) { + ok( true, "focus event fired on element #" + optionIndex + " mouseover" ); + equal( ui.item.index, optionIndex, "ui.item.index contains correct option index" ); + equal( ui.item.element[ 0 ], options.eq( optionIndex )[ 0 ], + "ui.item.element contains original option element" ); + } + }); + + button = this.element.selectmenu( "widget" ); + menu = this.element.selectmenu( "menuWidget" ); + + button.simulate( "focus" ); + setTimeout(function() { + button.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } ); + + button.trigger( "click" ); + links = menu.find( "li.ui-menu-item" ); + optionIndex = 0; + links.eq( optionIndex ).simulate( "mouseover" ); + optionIndex += 1; + links.eq( optionIndex ).simulate( "mouseover" ); + + // This tests for unwanted, additional focus event on close + that.element.selectmenu( "close" ); + start(); + }); +}); + +test( "open", function() { + expect( 1 ); + + this.element.selectmenu({ + open: function() { + ok( true, "open event fired on open" ); + } + }); + + this.element.selectmenu( "open" ); +}); + +asyncTest( "select", function() { + expect( 3 ); + + this.element.selectmenu({ + select: function( event, ui ) { + ok( true, "select event fired on item select" ); + equal( ui.item.index, optionIndex, "ui.item.index contains correct option index" ); + equal( ui.item.element[ 0 ], options.eq( optionIndex )[ 0 ], + "ui.item.element contains original option element" ); + } + }); + + var button = this.element.selectmenu( "widget" ), + menu = this.element.selectmenu( "menuWidget" ), + options = this.element.find( "option" ), + optionIndex = 1; + + button.simulate( "focus" ); + setTimeout(function() { + button.trigger( "click" ); + menu.find( "li" ).eq( optionIndex ).simulate( "mouseover" ).trigger( "click" ); + start(); + }); +}); + +} ); |