(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(); }); }); })( jQuery );