aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/queue.js8
-rw-r--r--test/unit/queue.js31
2 files changed, 35 insertions, 4 deletions
diff --git a/src/queue.js b/src/queue.js
index d49b3dd68..d3a1136a6 100644
--- a/src/queue.js
+++ b/src/queue.js
@@ -22,6 +22,7 @@ jQuery.extend({
type = type || "fx";
var queue = jQuery.queue( elem, type ),
+ startLength = queue.length,
fn = queue.shift(),
hooks = jQuery._queueHooks( elem, type ),
next = function() {
@@ -31,6 +32,7 @@ jQuery.extend({
// If the fx queue is dequeued, always remove the progress sentinel
if ( fn === "inprogress" ) {
fn = queue.shift();
+ startLength--;
}
if ( fn ) {
@@ -45,7 +47,8 @@ jQuery.extend({
delete hooks.stop;
fn.call( elem, next, hooks );
}
- if ( !queue.length && hooks ) {
+
+ if ( !startLength && hooks ) {
hooks.empty.fire();
}
},
@@ -131,7 +134,8 @@ jQuery.fn.extend({
type = type || "fx";
while( i-- ) {
- if ( (tmp = jQuery._data( elements[ i ], type + "queueHooks" )) && tmp.empty ) {
+ tmp = jQuery._data( elements[ i ], type + "queueHooks" );
+ if ( tmp && tmp.empty ) {
count++;
tmp.empty.add( resolve );
}
diff --git a/test/unit/queue.js b/test/unit/queue.js
index 5c5317b42..5307bfd2b 100644
--- a/test/unit/queue.js
+++ b/test/unit/queue.js
@@ -1,6 +1,6 @@
module( "queue", { teardown: moduleTeardown });
-test( "queue() with other types", 12, function() {
+test( "queue() with other types", 14, function() {
var counter = 0;
stop();
@@ -45,6 +45,12 @@ test( "queue() with other types", 12, function() {
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() {
@@ -206,8 +212,8 @@ asyncTest( "fn.promise( \"queue\" ) - called whenever last queue function is deq
}).queue( "queue", function( next ) {
strictEqual( test++, 2, "step two" );
setTimeout( function() {
- strictEqual( test++, 4, "step four" );
next();
+ strictEqual( test++, 4, "step four" );
start();
}, 10 );
}).promise( "queue" ).done( function() {
@@ -217,6 +223,27 @@ asyncTest( "fn.promise( \"queue\" ) - called whenever last queue function is deq
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);