diff options
Diffstat (limited to 'test/promises_aplus_adapter_when.js')
-rw-r--r-- | test/promises_aplus_adapter_when.js | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/test/promises_aplus_adapter_when.js b/test/promises_aplus_adapter_when.js new file mode 100644 index 000000000..0a5ec6756 --- /dev/null +++ b/test/promises_aplus_adapter_when.js @@ -0,0 +1,51 @@ +/* jshint node: true */ + +"use strict"; + +require( "jsdom" ).env( "", function( errors, window ) { + if ( errors ) { + console.error( errors ); + return; + } + + var jQuery = require( ".." )( window ); + + exports.deferred = function() { + var adopted, promised, + obj = { + resolve: function() { + if ( !adopted ) { + adopted = jQuery.when.apply( jQuery, arguments ); + if ( promised ) { + adopted.then( promised.resolve, promised.reject ); + } + } + return adopted; + }, + reject: function( value ) { + if ( !adopted ) { + adopted = jQuery.when( jQuery.Deferred().reject( value ) ); + if ( promised ) { + adopted.then( promised.resolve, promised.reject ); + } + } + return adopted; + }, + + // A manually-constructed thenable that works even if calls precede resolve/reject + promise: { + then: function() { + if ( !adopted ) { + if ( !promised ) { + promised = jQuery.Deferred(); + } + return promised.then.apply( promised, arguments ); + } + return adopted.then.apply( adopted, arguments ); + } + } + }; + + return obj; + }; +} ); |