Skip to content
Permalink
Browse files

Tests (Simulate): Added focus and blur support.

  • Loading branch information...
scottgonzalez committed Oct 31, 2011
1 parent 79105ee commit e31adf039b4adb07b8878435beceaae1a6532d47
@@ -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 );
}
});

@@ -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 );
});
});
@@ -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 ) );

0 comments on commit e31adf0

Please sign in to comment.
You can’t perform that action at this time.