Commit 74cdd784 authored by jaubourg's avatar jaubourg

deferred.promise(obj) should work with non-objects. Fixes #12521. Much needed unit tests added!

parent 9c5089a6
...@@ -44,7 +44,7 @@ jQuery.extend({ ...@@ -44,7 +44,7 @@ jQuery.extend({
// Get a promise for this deferred // Get a promise for this deferred
// If obj is provided, the promise aspect is added to the object // If obj is provided, the promise aspect is added to the object
promise: function( obj ) { promise: function( obj ) {
return typeof obj === "object" ? jQuery.extend( obj, promise ) : promise; return obj != null ? jQuery.extend( obj, promise ) : promise;
} }
}, },
deferred = {}; deferred = {};
......
...@@ -8,7 +8,7 @@ jQuery.each( [ "", " - new operator" ], function( _, withNew ) { ...@@ -8,7 +8,7 @@ jQuery.each( [ "", " - new operator" ], function( _, withNew ) {
test("jQuery.Deferred" + withNew, function() { test("jQuery.Deferred" + withNew, function() {
expect( 21 ); expect( 23 );
var defer = createDeferred(); var defer = createDeferred();
...@@ -39,6 +39,22 @@ jQuery.each( [ "", " - new operator" ], function( _, withNew ) { ...@@ -39,6 +39,22 @@ jQuery.each( [ "", " - new operator" ], function( _, withNew ) {
strictEqual( value , "done" , "Passed function executed" ); strictEqual( value , "done" , "Passed function executed" );
}); });
createDeferred(function( defer ) {
var promise = defer.promise(),
func = function() {},
funcPromise = defer.promise( func );
strictEqual( defer.promise(), promise, "promise is always the same" );
strictEqual( funcPromise, func, "non objects get extended" );
jQuery.each( promise, function( key, value ) {
if ( !jQuery.isFunction( promise[ key ] ) ) {
ok( false, key + " is a function (" + jQuery.type( promise[ key ] ) + ")" );
}
if ( promise[ key ] !== func[ key ] ) {
strictEqual( func[ key ], promise[ key ], key + " is the same" );
}
});
});
jQuery.expandedEach = jQuery.each; jQuery.expandedEach = jQuery.each;
jQuery.expandedEach( "resolve reject".split( " " ), function( _, change ) { jQuery.expandedEach( "resolve reject".split( " " ), function( _, change ) {
createDeferred( function( defer ) { createDeferred( function( defer ) {
...@@ -59,6 +75,7 @@ jQuery.each( [ "", " - new operator" ], function( _, withNew ) { ...@@ -59,6 +75,7 @@ jQuery.each( [ "", " - new operator" ], function( _, withNew ) {
}); });
} ); } );
test( "jQuery.Deferred - chainability", function() { test( "jQuery.Deferred - chainability", function() {
var defer = jQuery.Deferred(); var defer = jQuery.Deferred();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment