define( [ "jquery", "ui/widget" ], function( $ ) { module( "widget animation", (function() { var show = $.fn.show, fadeIn = $.fn.fadeIn, slideDown = $.fn.slideDown; return { setup: function() { $.widget( "ui.testWidget", { _create: function() { this.element.hide(); }, show: function( fn ) { this._show( this.element, this.options.show, fn ); } }); $.effects = { effect: { testEffect: $.noop } }; }, teardown: function() { delete $.ui.testWidget; delete $.effects.effect.testEffect; $.fn.show = show; $.fn.fadeIn = fadeIn; $.fn.slideDown = slideDown; } }; }())); asyncTest( "show: null", function() { expect( 4 ); var element = $( "#widget" ).testWidget(), hasRun = false; $.fn.show = function() { ok( true, "show called" ); equal( arguments.length, 0, "no args passed to show" ); }; element .delay( 50 ) .queue(function( next ) { ok( !hasRun, "queue before show" ); next(); }) .testWidget( "show", function() { hasRun = true; }) .queue(function( next ) { ok( hasRun, "queue after show" ); start(); next(); }); }); asyncTest( "show: true", function() { expect( 4 ); var element = $( "#widget" ).testWidget({ show: true }), hasRun = false; $.fn.fadeIn = function( duration, easing, complete ) { return this.queue(function( next ) { strictEqual( duration, undefined, "duration" ); strictEqual( easing, undefined, "easing" ); complete(); next(); }); }; element .delay( 50 ) .queue(function( next ) { ok( !hasRun, "queue before show" ); next(); }) .testWidget( "show", function() { hasRun = true; }) .queue(function( next ) { ok( hasRun, "queue after show" ); start(); next(); }); }); asyncTest( "show: number", function() { expect( 4 ); var element = $( "#widget" ).testWidget({ show: 123 }), hasRun = false; $.fn.fadeIn = function( duration, easing, complete ) { return this.queue(function( next ) { strictEqual( duration, 123, "duration" ); strictEqual( easing, undefined, "easing" ); complete(); next(); }); }; element .delay( 50 ) .queue(function( next ) { ok( !hasRun, "queue before show" ); next(); }) .testWidget( "show", function() { hasRun = true; }) .queue(function( next ) { ok( hasRun, "queue after show" ); start(); next(); }); }); asyncTest( "show: core animation", function() { expect( 4 ); var element = $( "#widget" ).testWidget({ show: "slideDown" }), hasRun = false; $.fn.slideDown = function( duration, easing, complete ) { return this.queue(function( next ) { strictEqual( duration, undefined, "duration" ); strictEqual( easing, undefined, "easing" ); complete(); next(); }); }; element .delay( 50 ) .queue(function( next ) { ok( !hasRun, "queue before show" ); next(); }) .testWidget( "show", function() { hasRun = true; }) .queue(function( next ) { ok( hasRun, "queue after show" ); start(); next(); }); }); asyncTest( "show: effect", function() { expect( 5 ); var element = $( "#widget" ).testWidget({ show: "testEffect" }), hasRun = false; $.fn.show = function( options ) { return this.queue(function( next ) { equal( options.effect, "testEffect", "effect" ); ok( !("duration" in options), "duration" ); ok( !("easing" in options), "easing" ); options.complete(); next(); }); }; element .delay( 50 ) .queue(function( next ) { ok( !hasRun, "queue before show" ); next(); }) .testWidget( "show", function() { hasRun = true; }) .queue(function( next ) { ok( hasRun, "queue after show" ); start(); next(); }); }); asyncTest( "show: object(core animation)", function() { expect( 4 ); var element = $( "#widget" ).testWidget({ show: { effect: "slideDown", duration: 123, easing: "testEasing" } }), hasRun = false; $.fn.slideDown = function( duration, easing, complete ) { return this.queue(function( next ) { equal( duration, 123, "duration" ); equal( easing, "testEasing", "easing" ); complete(); next(); }); }; element .delay( 50 ) .queue(function( next ) { ok( !hasRun, "queue before show" ); next(); }) .testWidget( "show", function() { hasRun = true; }) .queue(function( next ) { ok( hasRun, "queue after show" ); start(); next(); }); }); asyncTest( "show: object(effect)", function() { expect( 3 ); var element = $( "#widget" ).testWidget({ show: { effect: "testEffect", duration: 123, easing: "testEasing" } }), hasRun = false; $.fn.show = function( options ) { return this.queue(function( next ) { deepEqual( options, { effect: "testEffect", duration: 123, easing: "testEasing", complete: options.complete }); options.complete(); next(); }); }; element .delay( 50 ) .queue(function( next ) { ok( !hasRun, "queue before show" ); next(); }) .testWidget( "show", function() { hasRun = true; }) .queue(function( next ) { ok( hasRun, "queue after show" ); start(); next(); }); }); } );