123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320 |
- module( "queue", { teardown: moduleTeardown });
- test( "queue() with other types", 14, function() {
- stop();
- var $div = jQuery({}),
- counter = 0;
- $div.promise( "foo" ).done(function() {
- equal( counter, 0, "Deferred for collection with no queue is automatically resolved" );
- });
- $div
- .queue("foo",function(){
- equal( ++counter, 1, "Dequeuing" );
- jQuery.dequeue(this,"foo");
- })
- .queue("foo",function(){
- equal( ++counter, 2, "Dequeuing" );
- jQuery(this).dequeue("foo");
- })
- .queue("foo",function(){
- equal( ++counter, 3, "Dequeuing" );
- })
- .queue("foo",function(){
- equal( ++counter, 4, "Dequeuing" );
- });
- $div.promise("foo").done(function() {
- equal( counter, 4, "Testing previous call to dequeue in deferred" );
- start();
- });
- equal( $div.queue("foo").length, 4, "Testing queue length" );
- equal( $div.queue("foo", undefined).queue("foo").length, 4, ".queue('name',undefined) does nothing but is chainable (#5571)");
- $div.dequeue("foo");
- equal( counter, 3, "Testing previous call to dequeue" );
- equal( $div.queue("foo").length, 1, "Testing queue length" );
- $div.dequeue("foo");
- equal( counter, 4, "Testing previous call to dequeue" );
- equal( $div.queue("foo").length, 0, "Testing queue length" );
- $div.dequeue("foo");
- equal( counter, 4, "Testing previous call to dequeue" );
- equal( $div.queue("foo").length, 0, "Testing queue length" );
- });
- test("queue(name) passes in the next item in the queue as a parameter", function() {
- expect(2);
- var div = jQuery({}),
- counter = 0;
- div.queue("foo", function(next) {
- equal(++counter, 1, "Dequeueing");
- next();
- }).queue("foo", function(next) {
- equal(++counter, 2, "Next was called");
- next();
- }).queue("bar", function() {
- equal(++counter, 3, "Other queues are not triggered by next()");
- });
- div.dequeue("foo");
- });
- test("queue() passes in the next item in the queue as a parameter to fx queues", function() {
- expect(3);
- stop();
- var div = jQuery({}),
- counter = 0;
- div.queue(function(next) {
- equal(++counter, 1, "Dequeueing");
- setTimeout(function() { next(); }, 500);
- }).queue(function(next) {
- equal(++counter, 2, "Next was called");
- next();
- }).queue("bar", function() {
- equal(++counter, 3, "Other queues are not triggered by next()");
- });
- jQuery.when( div.promise("fx"), div ).done(function() {
- equal(counter, 2, "Deferreds resolved");
- start();
- });
- });
- test("callbacks keep their place in the queue", function() {
- expect(5);
- stop();
- var div = jQuery("<div>"),
- counter = 0;
- div.queue(function( next ) {
- equal( ++counter, 1, "Queue/callback order: first called" );
- setTimeout( next, 200 );
- }).delay( 100 ).queue(function( next ) {
- equal( ++counter, 2, "Queue/callback order: second called" );
- jQuery( this ).delay( 100 ).queue(function( next ) {
- equal( ++counter, 4, "Queue/callback order: fourth called" );
- next();
- });
- next();
- }).queue(function( next ) {
- equal( ++counter, 3, "Queue/callback order: third called" );
- next();
- });
- div.promise("fx").done(function() {
- equal(counter, 4, "Deferreds resolved");
- start();
- });
- });
- test( "jQuery.queue should return array while manipulating the queue", 1, function() {
- var div = document.createElement("div");
- ok( jQuery.isArray( jQuery.queue( div, "fx", jQuery.noop ) ), "jQuery.queue should return an array while manipulating the queue" );
- });
- test("delay()", function() {
- expect(2);
- stop();
- var foo = jQuery({}), run = 0;
- foo.delay(100).queue(function(){
- run = 1;
- ok( true, "The function was dequeued." );
- start();
- });
- equal( run, 0, "The delay delayed the next function from running." );
- });
- test("clearQueue(name) clears the queue", function() {
- expect(2);
- stop();
- var div = jQuery({}),
- counter = 0;
- div.queue("foo", function( next ) {
- counter++;
- jQuery(this).clearQueue("foo");
- next();
- }).queue("foo", function() {
- counter++;
- });
- div.promise("foo").done(function() {
- ok( true, "dequeue resolves the deferred" );
- start();
- });
- div.dequeue("foo");
- equal(counter, 1, "the queue was cleared");
- });
- test("clearQueue() clears the fx queue", function() {
- expect(1);
- var div = jQuery({}),
- counter = 0;
- div.queue(function( next ) {
- counter++;
- var self = this;
- setTimeout(function() { jQuery(self).clearQueue(); next(); }, 50);
- }).queue(function() {
- counter++;
- });
- equal(counter, 1, "the queue was cleared");
- div.removeData();
- });
- asyncTest( "fn.promise() - called when fx queue is empty", 3, function() {
- var foo = jQuery( "#foo" ).clone().addBack(),
- promised = false;
- foo.queue( function( next ) {
- // called twice!
- ok( !promised, "Promised hasn't been called" );
- setTimeout( next, 10 );
- });
- foo.promise().done( function() {
- ok( promised = true, "Promised" );
- start();
- });
- });
- asyncTest( "fn.promise( \"queue\" ) - called whenever last queue function is dequeued", 5, function() {
- var foo = jQuery( "#foo" ),
- test;
- foo.promise( "queue" ).done( function() {
- strictEqual( test, undefined, "called immediately when queue was already empty" );
- });
- test = 1;
- foo.queue( "queue", function( next ) {
- strictEqual( test++, 1, "step one" );
- setTimeout( next, 0 );
- }).queue( "queue", function( next ) {
- strictEqual( test++, 2, "step two" );
- setTimeout( function() {
- next();
- strictEqual( test++, 4, "step four" );
- start();
- }, 10 );
- }).promise( "queue" ).done( function() {
- strictEqual( test++, 3, "step three" );
- });
- foo.dequeue( "queue" );
- });
- asyncTest( "fn.promise( \"queue\" ) - waits for animation to complete before resolving", 2, function() {
- var foo = jQuery( "#foo" ),
- test = 1;
- foo.animate({
- top: 100
- }, {
- duration: 1,
- queue: "queue",
- complete: function() {
- strictEqual( test++, 1, "step one" );
- }
- }).dequeue( "queue" );
- foo.promise( "queue" ).done( function() {
- strictEqual( test++, 2, "step two" );
- start();
- });
- });
- test( ".promise(obj)", function() {
- expect(2);
- var obj = {},
- promise = jQuery( "#foo" ).promise( "promise", obj );
- ok( jQuery.isFunction( promise.promise ), ".promise(type, obj) returns a promise" );
- strictEqual( promise, obj, ".promise(type, obj) returns obj" );
- });
- if ( jQuery.fn.stop ) {
- test("delay() can be stopped", function() {
- expect( 3 );
- stop();
- var done = {};
- jQuery({})
- .queue( "alternate", function( next ) {
- done.alt1 = true;
- ok( true, "This first function was dequeued" );
- next();
- })
- .delay( 1000, "alternate" )
- .queue( "alternate", function() {
- done.alt2 = true;
- ok( true, "The function was dequeued immediately, the delay was stopped" );
- })
- .dequeue( "alternate" )
- // stop( "alternate", false ) will NOT clear the queue, so it should automatically dequeue the next
- .stop( "alternate", false, false )
- // this test
- .delay( 1 )
- .queue(function() {
- done.default1 = true;
- ok( false, "This queue should never run" );
- })
- // stop( clearQueue ) should clear the queue
- .stop( true, false );
- deepEqual( done, { alt1: true, alt2: true }, "Queue ran the proper functions" );
- setTimeout(function() {
- start();
- }, 1500 );
- });
- asyncTest( "queue stop hooks", 2, function() {
- var foo = jQuery( "#foo" );
- foo.queue( function( next, hooks ) {
- hooks.stop = function( gotoEnd ) {
- equal( !!gotoEnd, false, "Stopped without gotoEnd" );
- };
- });
- foo.stop();
- foo.queue( function( next, hooks ) {
- hooks.stop = function( gotoEnd ) {
- equal( gotoEnd, true, "Stopped with gotoEnd" );
- start();
- };
- });
- foo.stop( false, true );
- });
- } // if ( jQuery.fn.stop )
|