diff options
author | Timmy Willison <timmywillisn@gmail.com> | 2015-11-11 10:35:37 -0500 |
---|---|---|
committer | Timmy Willison <timmywillisn@gmail.com> | 2015-11-13 11:16:26 -0500 |
commit | 78b9eac1198627eb4dad0cc35334c7704449f310 (patch) | |
tree | 7a334eee14e995443366927d6f96370344e7b5cc /test | |
parent | 8b65446a60c421cfc3411fe273edcc506783f628 (diff) | |
download | jquery-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.js | 42 |
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" ); +} ); |