@@ -667,7 +667,6 @@ QUnit.test( "jQuery.when", function( assert ) {
667667 "undefined" : undefined ,
668668 "a plain object" : { } ,
669669 "an array" : [ 1 , 2 , 3 ]
670-
671670 } , function ( message , value ) {
672671 assert . ok (
673672 jQuery . isFunction (
@@ -698,12 +697,10 @@ QUnit.test( "jQuery.when", function( assert ) {
698697 } ) ;
699698
700699 jQuery . each ( [ 1 , 2 , 3 ] , function ( k , i ) {
701-
702700 jQuery . when ( cache || jQuery . Deferred ( function ( ) {
703701 this . resolve ( i ) ;
704702 } )
705703 ) . done ( function ( value ) {
706-
707704 assert . strictEqual ( value , 1 , "Function executed" + ( i > 1 ? " only once" : "" ) ) ;
708705 cache = value ;
709706 } ) ;
@@ -759,10 +756,8 @@ QUnit.test( "jQuery.when - joined", function( assert ) {
759756 expected = shouldResolve ? [ 1 , 1 ] : [ 0 , undefined ] ,
760757 expectedNotify = shouldNotify && [ willNotify [ id1 ] , willNotify [ id2 ] ] ,
761758 code = "jQuery.when( " + id1 + ", " + id2 + " )" ,
762- context1 = defer1 && jQuery . isFunction ( defer1 . promise ) ? defer1 . promise ( ) :
763- ( defer1 . then ? window : undefined ) ,
764- context2 = defer2 && jQuery . isFunction ( defer2 . promise ) ? defer2 . promise ( ) :
765- ( defer2 . then ? window : undefined ) ;
759+ context1 = defer1 && jQuery . isFunction ( defer1 . promise ) ? defer1 . promise ( ) : window ,
760+ context2 = defer2 && jQuery . isFunction ( defer2 . promise ) ? defer2 . promise ( ) : window ;
766761
767762 jQuery . when ( defer1 , defer2 ) . done ( function ( a , b ) {
768763 if ( shouldResolve ) {
@@ -880,3 +875,36 @@ QUnit.test( "jQuery.when - chaining", function( assert ) {
880875
881876 defer . resolve ( "other deferred" ) ;
882877} ) ;
878+
879+ QUnit . test ( "jQuery.when - solitary thenables" , function ( assert ) {
880+
881+ assert . expect ( 1 ) ;
882+
883+ var done = assert . async ( ) ,
884+ rejected = new Promise ( function ( resolve , reject ) {
885+ setTimeout ( function ( ) {
886+ reject ( "rejected" ) ;
887+ } , 100 ) ;
888+ } ) ;
889+
890+ jQuery . when ( rejected ) . then (
891+ function ( ) {
892+ assert . ok ( false , "Rejected, solitary, non-Deferred thenable should not resolve" ) ;
893+ done ( ) ;
894+ } ,
895+ function ( ) {
896+ assert . ok ( true , "Rejected, solitary, non-Deferred thenable rejected properly" ) ;
897+ done ( ) ;
898+ }
899+ ) ;
900+ } ) ;
901+
902+ QUnit . test ( "jQuery.when does not reuse a solitary jQuery Deferred (gh-2018)" , function ( assert ) {
903+
904+ assert . expect ( 2 ) ;
905+ var defer = jQuery . Deferred ( ) . resolve ( ) ,
906+ promise = jQuery . when ( defer ) ;
907+
908+ assert . equal ( promise . state ( ) , "resolved" , "Master Deferred is immediately resolved" ) ;
909+ assert . notStrictEqual ( defer . promise ( ) , promise , "jQuery.when returns the master deferred's promise" ) ;
910+ } ) ;
0 commit comments