aboutsummaryrefslogtreecommitdiffstats
path: root/test/promises_aplus_adapter_when.js
diff options
context:
space:
mode:
Diffstat (limited to 'test/promises_aplus_adapter_when.js')
-rw-r--r--test/promises_aplus_adapter_when.js51
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;
+ };
+} );