diff options
Diffstat (limited to 'test/promises_aplus_adapters/when.js')
-rw-r--r-- | test/promises_aplus_adapters/when.js | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/test/promises_aplus_adapters/when.js b/test/promises_aplus_adapters/when.js new file mode 100644 index 000000000..adde1a13a --- /dev/null +++ b/test/promises_aplus_adapters/when.js @@ -0,0 +1,49 @@ +"use strict"; + +require( "jsdom" ).env( "", function( errors, window ) { + if ( errors ) { + console.error( errors ); + return; + } + + var jQuery = require( "../../" )( window ); + + module.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; + }; +} ); |