From e31adf039b4adb07b8878435beceaae1a6532d47 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Scott=20Gonz=C3=A1lez?= Date: Mon, 31 Oct 2011 17:28:00 -0400 Subject: [PATCH] Tests (Simulate): Added focus and blur support. --- tests/jquery.simulate.js | 49 +++++++++++++++++++ .../unit/autocomplete/autocomplete_events.js | 8 ++- tests/unit/tooltip/tooltip_events.js | 4 +- 3 files changed, 54 insertions(+), 7 deletions(-) diff --git a/tests/jquery.simulate.js b/tests/jquery.simulate.js index 9713a3038..c1d28f982 100644 --- a/tests/jquery.simulate.js +++ b/tests/jquery.simulate.js @@ -24,6 +24,8 @@ $.simulate = function( el, type, options ) { if ( type === "drag" ) { this[ type ].apply( this, [ this.target, options ] ); + } else if ( type === "focus" || type === "blur" ) { + this[ type ](); } else { this.simulateEvent( el, type, options ); } @@ -157,6 +159,53 @@ $.extend( $.simulate.prototype, { x: o.left + el.outerWidth() / 2 - d.scrollLeft(), y: o.top + el.outerHeight() / 2 - d.scrollTop() }; + }, + + focus: function() { + var focusinEvent, + triggered = false, + element = $( this.target ); + + function trigger() { + triggered = true; + } + + element.bind( "focus", trigger ); + element[ 0 ].focus(); + + if ( !triggered ) { + focusinEvent = $.Event( "focusin" ); + focusinEvent.preventDefault(); + element.trigger( focusinEvent ); + element.triggerHandler( "focus" ); + } + element.unbind( "focus", trigger ); + }, + + blur: function() { + var focusoutEvent, + triggered = false, + element = $( this.target ); + + function trigger() { + triggered = true; + } + + element.bind( "blur", trigger ); + element[ 0 ].blur(); + + // Some versions of IE don't actually .blur() on an element - so we focus the body + if ( element[ 0 ].ownerDocument.activeElement === element[ 0 ] ) { + element[ 0 ].ownerDocument.body.focus(); + } + + if ( !triggered ) { + focusoutEvent = $.Event( "focusout" ); + focusoutEvent.preventDefault(); + element.trigger( focusoutEvent ); + element.triggerHandler( "blur" ); + } + element.unbind( "blur", trigger ); } }); diff --git a/tests/unit/autocomplete/autocomplete_events.js b/tests/unit/autocomplete/autocomplete_events.js index 6813cfa71..dc945c286 100644 --- a/tests/unit/autocomplete/autocomplete_events.js +++ b/tests/unit/autocomplete/autocomplete_events.js @@ -62,15 +62,13 @@ $.each([ } }), menu = element.autocomplete( "widget" ); - - element.focus()[ settings.valueMethod ]( "j" ).keydown(); + + element.simulate( "focus" )[ settings.valueMethod ]( "j" ).keydown(); setTimeout(function() { ok( menu.is( ":visible" ), "menu is visible after delay" ); element.simulate( "keydown", { keyCode: $.ui.keyCode.DOWN } ); element.simulate( "keydown", { keyCode: $.ui.keyCode.ENTER } ); - // blurring through jQuery causes a bug in IE 6 which causes the - // autocompletechange event to occur twice - element[0].blur(); + element.simulate( "blur" ); }, 50 ); }); }); diff --git a/tests/unit/tooltip/tooltip_events.js b/tests/unit/tooltip/tooltip_events.js index 963acaf59..99e1fbd79 100644 --- a/tests/unit/tooltip/tooltip_events.js +++ b/tests/unit/tooltip/tooltip_events.js @@ -59,7 +59,7 @@ asyncTest( "mixed events", function() { element.one( "tooltipopen", function( event ) { same( event.originalEvent.type, "focusin" ); }); - element[0].focus(); + element.simulate( "focus" ); element.one( "tooltipopen", function() { ok( false, "open triggered while already open" ); @@ -77,7 +77,7 @@ asyncTest( "mixed events", function() { same( event.originalEvent.type, "blur" ); start(); }); - element[0].blur(); + element.simulate( "blur" ); }); }( jQuery ) ); -- 2.39.5