diff --git a/src/deferred.js b/src/deferred.js index 73b2f9ef2a..a7938025ca 100644 --- a/src/deferred.js +++ b/src/deferred.js @@ -162,7 +162,7 @@ jQuery.extend( { resolve( maxDepth, deferred, Identity, special ), resolve( maxDepth, deferred, Thrower, special ), resolve( maxDepth, deferred, Identity, - deferred.notify ) + deferred.notifyWith ) ); } diff --git a/test/unit/deferred.js b/test/unit/deferred.js index d8ea1918fc..3e147a96ee 100644 --- a/test/unit/deferred.js +++ b/test/unit/deferred.js @@ -768,6 +768,36 @@ QUnit.test( "jQuery.Deferred - notify and resolve", function( assert ) { } ); } ); +QUnit.test( "jQuery.Deferred - resolved to a notifying deferred", function( assert ) { + + assert.expect( 2 ); + + var deferred = jQuery.Deferred(), + done = assert.async( 2 ); + + deferred.resolve( jQuery.Deferred( function( notifyingDeferred ) { + notifyingDeferred.notify( "foo", "bar" ); + notifyingDeferred.resolve( "baz", "quux" ); + } ) ); + + // Apply an empty then to force thenable unwrapping. + // See https://github.com/jquery/jquery/issues/3000 for more info. + deferred.then().then( function() { + assert.deepEqual( + [].slice.call( arguments ), + [ "baz", "quux" ], + "The fulfilled handler receives proper params" + ); + done(); + }, null, function() { + assert.deepEqual( + [].slice.call( arguments ), + [ "foo", "bar" ], + "The progress handler receives proper params" + ); + done(); + } ); +} ); QUnit.test( "jQuery.when(nonThenable) - like Promise.resolve", function( assert ) { "use strict";