aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorTimmy Willison <timmywillisn@gmail.com>2015-11-11 10:35:37 -0500
committerTimmy Willison <timmywillisn@gmail.com>2015-11-13 11:16:26 -0500
commit78b9eac1198627eb4dad0cc35334c7704449f310 (patch)
tree7a334eee14e995443366927d6f96370344e7b5cc /test
parent8b65446a60c421cfc3411fe273edcc506783f628 (diff)
downloadjquery-78b9eac1198627eb4dad0cc35334c7704449f310.tar.gz
jquery-78b9eac1198627eb4dad0cc35334c7704449f310.zip
Deferred: syncronize single and multiple target handling in $.when
Fixes gh-2546 Fixes gh-2018 Close gh-2707
Diffstat (limited to 'test')
-rw-r--r--test/unit/deferred.js42
1 files changed, 35 insertions, 7 deletions
diff --git a/test/unit/deferred.js b/test/unit/deferred.js
index 2277df190..1a721d1ee 100644
--- a/test/unit/deferred.js
+++ b/test/unit/deferred.js
@@ -667,7 +667,6 @@ QUnit.test( "jQuery.when", function( assert ) {
"undefined": undefined,
"a plain object": {},
"an array": [ 1, 2, 3 ]
-
}, function( message, value ) {
assert.ok(
jQuery.isFunction(
@@ -698,12 +697,10 @@ QUnit.test( "jQuery.when", function( assert ) {
} );
jQuery.each( [ 1, 2, 3 ], function( k, i ) {
-
jQuery.when( cache || jQuery.Deferred( function() {
this.resolve( i );
} )
).done( function( value ) {
-
assert.strictEqual( value, 1, "Function executed" + ( i > 1 ? " only once" : "" ) );
cache = value;
} );
@@ -759,10 +756,8 @@ QUnit.test( "jQuery.when - joined", function( assert ) {
expected = shouldResolve ? [ 1, 1 ] : [ 0, undefined ],
expectedNotify = shouldNotify && [ willNotify[ id1 ], willNotify[ id2 ] ],
code = "jQuery.when( " + id1 + ", " + id2 + " )",
- context1 = defer1 && jQuery.isFunction( defer1.promise ) ? defer1.promise() :
- ( defer1.then ? window : undefined ),
- context2 = defer2 && jQuery.isFunction( defer2.promise ) ? defer2.promise() :
- ( defer2.then ? window : undefined );
+ context1 = defer1 && jQuery.isFunction( defer1.promise ) ? defer1.promise() : window,
+ context2 = defer2 && jQuery.isFunction( defer2.promise ) ? defer2.promise() : window;
jQuery.when( defer1, defer2 ).done( function( a, b ) {
if ( shouldResolve ) {
@@ -880,3 +875,36 @@ QUnit.test( "jQuery.when - chaining", function( assert ) {
defer.resolve( "other deferred" );
} );
+
+QUnit.test( "jQuery.when - solitary thenables", function( assert ) {
+
+ assert.expect( 1 );
+
+ var done = assert.async(),
+ rejected = new Promise( function( resolve, reject ) {
+ setTimeout( function() {
+ reject( "rejected" );
+ }, 100 );
+ } );
+
+ jQuery.when( rejected ).then(
+ function() {
+ assert.ok( false, "Rejected, solitary, non-Deferred thenable should not resolve" );
+ done();
+ },
+ function() {
+ assert.ok( true, "Rejected, solitary, non-Deferred thenable rejected properly" );
+ done();
+ }
+ );
+} );
+
+QUnit.test( "jQuery.when does not reuse a solitary jQuery Deferred (gh-2018)", function( assert ) {
+
+ assert.expect( 2 );
+ var defer = jQuery.Deferred().resolve(),
+ promise = jQuery.when( defer );
+
+ assert.equal( promise.state(), "resolved", "Master Deferred is immediately resolved" );
+ assert.notStrictEqual( defer.promise(), promise, "jQuery.when returns the master deferred's promise" );
+} );