| module("deferred", { teardown: moduleTeardown }); |
| |
| test("jQuery._Deferred()", function() { |
| |
| expect( 11 ); |
| |
| var deferred, |
| object, |
| test; |
| |
| deferred = jQuery._Deferred(); |
| |
| test = false; |
| |
| deferred.done( function( value ) { |
| equals( value , "value" , "Test pre-resolve callback" ); |
| test = true; |
| } ); |
| |
| deferred.resolve( "value" ); |
| |
| ok( test , "Test pre-resolve callbacks called right away" ); |
| |
| test = false; |
| |
| deferred.done( function( value ) { |
| equals( value , "value" , "Test post-resolve callback" ); |
| test = true; |
| } ); |
| |
| ok( test , "Test post-resolve callbacks called right away" ); |
| |
| deferred.cancel(); |
| |
| test = true; |
| |
| deferred.done( function() { |
| ok( false , "Cancel was ignored" ); |
| test = false; |
| } ); |
| |
| ok( test , "Test cancel" ); |
| |
| deferred = jQuery._Deferred().resolve(); |
| |
| try { |
| deferred.done( function() { |
| throw "Error"; |
| } , function() { |
| ok( true , "Test deferred do not cancel on exception" ); |
| } ); |
| } catch( e ) { |
| strictEqual( e , "Error" , "Test deferred propagates exceptions"); |
| deferred.done(); |
| } |
| |
| test = ""; |
| deferred = jQuery._Deferred().done( function() { |
| |
| test += "A"; |
| |
| }, function() { |
| |
| test += "B"; |
| |
| } ).resolve(); |
| |
| strictEqual( test , "AB" , "Test multiple done parameters" ); |
| |
| test = ""; |
| |
| deferred.done( function() { |
| |
| deferred.done( function() { |
| |
| test += "C"; |
| |
| } ); |
| |
| test += "A"; |
| |
| }, function() { |
| |
| test += "B"; |
| } ); |
| |
| strictEqual( test , "ABC" , "Test done callbacks order" ); |
| |
| deferred = jQuery._Deferred(); |
| |
| deferred.resolveWith( jQuery , [ document ] ).done( function( doc ) { |
| ok( this === jQuery && arguments.length === 1 && doc === document , "Test fire context & args" ); |
| }); |
| |
| // #8421 |
| deferred = jQuery._Deferred(); |
| deferred.resolveWith().done(function() { |
| ok( true, "Test resolveWith can be called with no argument" ); |
| }); |
| }); |
| |
| test("jQuery.Deferred()", function() { |
| |
| expect( 10 ); |
| |
| jQuery.Deferred( function( defer ) { |
| strictEqual( this , defer , "Defer passed as this & first argument" ); |
| this.resolve( "done" ); |
| }).then( function( value ) { |
| strictEqual( value , "done" , "Passed function executed" ); |
| }); |
| |
| jQuery.Deferred().resolve().then( function() { |
| ok( true , "Success on resolve" ); |
| }, function() { |
| ok( false , "Error on resolve" ); |
| }); |
| |
| jQuery.Deferred().reject().then( function() { |
| ok( false , "Success on reject" ); |
| }, function() { |
| ok( true , "Error on reject" ); |
| }); |
| |
| ( new jQuery.Deferred( function( defer ) { |
| strictEqual( this , defer , "Defer passed as this & first argument (new)" ); |
| this.resolve( "done" ); |
| }) ).then( function( value ) { |
| strictEqual( value , "done" , "Passed function executed (new)" ); |
| }); |
| |
| ( new jQuery.Deferred() ).resolve().then( function() { |
| ok( true , "Success on resolve (new)" ); |
| }, function() { |
| ok( false , "Error on resolve (new)" ); |
| }); |
| |
| ( new jQuery.Deferred() ).reject().then( function() { |
| ok( false , "Success on reject (new)" ); |
| }, function() { |
| ok( true , "Error on reject (new)" ); |
| }); |
| |
| var tmp = jQuery.Deferred(); |
| |
| strictEqual( tmp.promise() , tmp.promise() , "Test deferred always return same promise" ); |
| strictEqual( tmp.promise() , tmp.promise().promise() , "Test deferred's promise always return same promise as deferred" ); |
| }); |
| |
| test("jQuery.when()", function() { |
| |
| expect( 23 ); |
| |
| // Some other objects |
| jQuery.each( { |
| |
| "an empty string": "", |
| "a non-empty string": "some string", |
| "zero": 0, |
| "a number other than zero": 1, |
| "true": true, |
| "false": false, |
| "null": null, |
| "undefined": undefined, |
| "a plain object": {} |
| |
| } , function( message , value ) { |
| |
| ok( jQuery.isFunction( jQuery.when( value ).then( function( resolveValue ) { |
| strictEqual( resolveValue , value , "Test the promise was resolved with " + message ); |
| } ).promise ) , "Test " + message + " triggers the creation of a new Promise" ); |
| |
| } ); |
| |
| ok( jQuery.isFunction( jQuery.when().then( function( resolveValue ) { |
| strictEqual( resolveValue , undefined , "Test the promise was resolved with no parameter" ); |
| } ).promise ) , "Test calling when with no parameter triggers the creation of a new Promise" ); |
| |
| var cache, i; |
| |
| for( i = 1 ; i < 4 ; i++ ) { |
| jQuery.when( cache || jQuery.Deferred( function() { |
| this.resolve( i ); |
| }) ).then( function( value ) { |
| strictEqual( value , 1 , "Function executed" + ( i > 1 ? " only once" : "" ) ); |
| cache = value; |
| }, function() { |
| ok( false , "Fail called" ); |
| }); |
| } |
| }); |
| |
| test("jQuery.when() - joined", function() { |
| |
| expect(8); |
| |
| jQuery.when( 1, 2, 3 ).done( function( a, b, c ) { |
| strictEqual( a , 1 , "Test first param is first resolved value - non-observables" ); |
| strictEqual( b , 2 , "Test second param is second resolved value - non-observables" ); |
| strictEqual( c , 3 , "Test third param is third resolved value - non-observables" ); |
| }).fail( function() { |
| ok( false , "Test the created deferred was resolved - non-observables"); |
| }); |
| |
| var successDeferred = jQuery.Deferred().resolve( 1 , 2 , 3 ), |
| errorDeferred = jQuery.Deferred().reject( "error" , "errorParam" ); |
| |
| jQuery.when( 1 , successDeferred , 3 ).done( function( a, b, c ) { |
| strictEqual( a , 1 , "Test first param is first resolved value - resolved observable" ); |
| same( b , [ 1 , 2 , 3 ] , "Test second param is second resolved value - resolved observable" ); |
| strictEqual( c , 3 , "Test third param is third resolved value - resolved observable" ); |
| }).fail( function() { |
| ok( false , "Test the created deferred was resolved - resolved observable"); |
| }); |
| |
| jQuery.when( 1 , errorDeferred , 3 ).done( function() { |
| ok( false , "Test the created deferred was rejected - rejected observable"); |
| }).fail( function( error , errorParam ) { |
| strictEqual( error , "error" , "Test first param is first rejected value - rejected observable" ); |
| strictEqual( errorParam , "errorParam" , "Test second param is second rejected value - rejected observable" ); |
| }); |
| }); |