1 QUnit
.module( "queue", { afterEach
: moduleTeardown
} );
5 if ( !includesModule( "queue" ) ) {
9 QUnit
.test( "queue() with other types", function( assert
) {
10 var done
= assert
.async( 2 );
14 var $div
= jQuery( {} ),
17 $div
.promise( "foo" ).done( function() {
18 assert
.equal( counter
, 0, "Deferred for collection with no queue is automatically resolved" );
22 .queue( "foo", function() {
23 assert
.equal( ++counter
, 1, "Dequeuing" );
24 jQuery
.dequeue( this, "foo" );
26 .queue( "foo", function() {
27 assert
.equal( ++counter
, 2, "Dequeuing" );
28 jQuery( this ).dequeue( "foo" );
30 .queue( "foo", function() {
31 assert
.equal( ++counter
, 3, "Dequeuing" );
33 .queue( "foo", function() {
34 assert
.equal( ++counter
, 4, "Dequeuing" );
37 $div
.promise( "foo" ).done( function() {
38 assert
.equal( counter
, 4, "Testing previous call to dequeue in deferred" );
42 assert
.equal( $div
.queue( "foo" ).length
, 4, "Testing queue length" );
44 assert
.equal( $div
.queue( "foo", undefined ).queue( "foo" ).length
, 4, ".queue('name',undefined) does nothing but is chainable (trac-5571)" );
46 $div
.dequeue( "foo" );
48 assert
.equal( counter
, 3, "Testing previous call to dequeue" );
49 assert
.equal( $div
.queue( "foo" ).length
, 1, "Testing queue length" );
51 $div
.dequeue( "foo" );
53 assert
.equal( counter
, 4, "Testing previous call to dequeue" );
54 assert
.equal( $div
.queue( "foo" ).length
, 0, "Testing queue length" );
56 $div
.dequeue( "foo" );
58 assert
.equal( counter
, 4, "Testing previous call to dequeue" );
59 assert
.equal( $div
.queue( "foo" ).length
, 0, "Testing queue length" );
63 QUnit
.test( "queue(name) passes in the next item in the queue as a parameter", function( assert
) {
66 var div
= jQuery( {} ),
69 div
.queue( "foo", function( next
) {
70 assert
.equal( ++counter
, 1, "Dequeueing" );
72 } ).queue( "foo", function( next
) {
73 assert
.equal( ++counter
, 2, "Next was called" );
75 } ).queue( "bar", function() {
76 assert
.equal( ++counter
, 3, "Other queues are not triggered by next()" );
82 QUnit
.test( "queue() passes in the next item in the queue as a parameter to fx queues", function( assert
) {
83 var done
= assert
.async();
86 var div
= jQuery( {} ),
89 div
.queue( function( next
) {
90 assert
.equal( ++counter
, 1, "Dequeueing" );
91 setTimeout( function() { next(); }, 500 );
92 } ).queue( function( next
) {
93 assert
.equal( ++counter
, 2, "Next was called" );
95 } ).queue( "bar", function() {
96 assert
.equal( ++counter
, 3, "Other queues are not triggered by next()" );
99 jQuery
.when( div
.promise( "fx" ), div
).done( function() {
100 assert
.equal( counter
, 2, "Deferreds resolved" );
105 QUnit
.test( "callbacks keep their place in the queue", function( assert
) {
106 var done
= assert
.async();
108 var div
= jQuery( "<div>" ),
111 div
.queue( function( next
) {
112 assert
.equal( ++counter
, 1, "Queue/callback order: first called" );
113 setTimeout( next
, 200 );
114 } ).delay( 100 ).queue( function( next
) {
115 assert
.equal( ++counter
, 2, "Queue/callback order: second called" );
116 jQuery( this ).delay( 100 ).queue( function( next
) {
117 assert
.equal( ++counter
, 4, "Queue/callback order: fourth called" );
121 } ).queue( function( next
) {
122 assert
.equal( ++counter
, 3, "Queue/callback order: third called" );
126 div
.promise( "fx" ).done( function() {
127 assert
.equal( counter
, 4, "Deferreds resolved" );
132 QUnit
.test( "jQuery.queue should return array while manipulating the queue", function( assert
) {
135 var div
= document
.createElement( "div" );
137 assert
.ok( Array
.isArray( jQuery
.queue( div
, "fx", jQuery
.noop
) ), "jQuery.queue should return an array while manipulating the queue" );
140 QUnit
.test( "delay()", function( assert
) {
141 var done
= assert
.async();
144 var foo
= jQuery( {} ), run
= 0;
146 foo
.delay( 100 ).queue( function() {
148 assert
.ok( true, "The function was dequeued." );
152 assert
.equal( run
, 0, "The delay delayed the next function from running." );
155 QUnit
.test( "clearQueue(name) clears the queue", function( assert
) {
156 var done
= assert
.async( 2 );
159 var div
= jQuery( {} ),
162 div
.queue( "foo", function( next
) {
164 jQuery( this ).clearQueue( "foo" );
166 } ).queue( "foo", function() {
170 div
.promise( "foo" ).done( function() {
171 assert
.ok( true, "dequeue resolves the deferred" );
175 div
.dequeue( "foo" );
177 assert
.equal( counter
, 1, "the queue was cleared" );
181 QUnit
.test( "clearQueue() clears the fx queue", function( assert
) {
184 var div
= jQuery( {} ),
187 div
.queue( function( next
) {
190 setTimeout( function() { jQuery( self
).clearQueue(); next(); }, 50 );
191 } ).queue( function() {
195 assert
.equal( counter
, 1, "the queue was cleared" );
200 QUnit
.test( "fn.promise() - called when fx queue is empty", function( assert
) {
202 var foo
= jQuery( "#foo" ).clone().addBack(),
204 done
= assert
.async();
206 foo
.queue( function( next
) {
209 assert
.ok( !promised
, "Promised hasn't been called" );
210 setTimeout( next
, 10 );
212 foo
.promise().done( function() {
213 assert
.ok( promised
= true, "Promised" );
218 QUnit
.test( "fn.promise( \"queue\" ) - called whenever last queue function is dequeued", function( assert
) {
220 var done
= assert
.async();
221 var foo
= jQuery( "#foo" ),
223 foo
.promise( "queue" ).done( function() {
224 assert
.strictEqual( test
, undefined, "called immediately when queue was already empty" );
227 foo
.queue( "queue", function( next
) {
228 assert
.strictEqual( test
++, 1, "step one" );
229 setTimeout( next
, 0 );
230 } ).queue( "queue", function( next
) {
231 assert
.strictEqual( test
++, 2, "step two" );
232 setTimeout( function() {
234 assert
.strictEqual( test
++, 4, "step four" );
237 } ).promise( "queue" ).done( function() {
238 assert
.strictEqual( test
++, 3, "step three" );
241 foo
.dequeue( "queue" );
244 if ( includesModule( "effects" ) ) {
246 QUnit
.test( "fn.promise( \"queue\" ) - waits for animation to complete before resolving", function( assert
) {
248 var done
= assert
.async();
249 var foo
= jQuery( "#foo" ),
257 complete: function() {
258 assert
.strictEqual( test
++, 1, "step one" );
260 } ).dequeue( "queue" );
262 foo
.promise( "queue" ).done( function() {
263 assert
.strictEqual( test
++, 2, "step two" );
270 QUnit
.test( ".promise(obj)", function( assert
) {
274 promise
= jQuery( "#foo" ).promise( "promise", obj
);
276 assert
.ok( typeof promise
.promise
=== "function", ".promise(type, obj) returns a promise" );
277 assert
.strictEqual( promise
, obj
, ".promise(type, obj) returns obj" );
280 QUnit
[ includesModule( "effects" ) ? "test" : "skip" ]( "delay() can be stopped", function( assert
) {
281 var done
= assert
.async();
285 .queue( "alternate", function( next
) {
287 assert
.ok( true, "This first function was dequeued" );
290 .delay( 1000, "alternate" )
291 .queue( "alternate", function() {
293 assert
.ok( true, "The function was dequeued immediately, the delay was stopped" );
295 .dequeue( "alternate" )
297 // stop( "alternate", false ) will NOT clear the queue, so it should automatically dequeue the next
298 .stop( "alternate", false, false )
303 storage
.default1
= true;
304 assert
.ok( false, "This queue should never run" );
307 // stop( clearQueue ) should clear the queue
308 .stop( true, false );
310 assert
.deepEqual( storage
, { alt1
: true, alt2
: true }, "Queue ran the proper functions" );
312 setTimeout( function() {
317 QUnit
[ includesModule( "effects" ) ? "test" : "skip" ]( "queue stop hooks", function( assert
) {
319 var done
= assert
.async();
320 var foo
= jQuery( "#foo" );
322 foo
.queue( function( next
, hooks
) {
323 hooks
.stop = function( gotoEnd
) {
324 assert
.equal( !!gotoEnd
, false, "Stopped without gotoEnd" );
329 foo
.queue( function( next
, hooks
) {
330 hooks
.stop = function( gotoEnd
) {
331 assert
.equal( gotoEnd
, true, "Stopped with gotoEnd" );
336 foo
.stop( false, true );