Skip to content

Commit f496182

Browse files
committed
Tests: Weaken sync-assumption from jQuery.when to jQuery.ready.then
1 parent 305f193 commit f496182

File tree

1 file changed

+35
-11
lines changed

1 file changed

+35
-11
lines changed

test/unit/ready.js

Lines changed: 35 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ QUnit.module( "ready" );
22

33
( function() {
44
var notYetReady, noEarlyExecution,
5+
whenified = jQuery.when( jQuery.ready ),
56
promisified = Promise.resolve( jQuery.ready ),
67
order = [],
78
args = {};
@@ -41,35 +42,33 @@ QUnit.module( "ready" );
4142
// Bind to the ready event in every possible way.
4243
jQuery( makeHandler( "a" ) );
4344
jQuery( document ).ready( makeHandler( "b" ) );
45+
jQuery.ready.then( makeHandler( "c" ) );
4446

45-
// Throw in an error to ensure other callbacks are called
47+
// Throw in some errors
4648
jQuery( function() {
4749
throwError( 1 );
4850
} );
49-
50-
// Throw two errors in a row
5151
jQuery( function() {
5252
throwError( 2 );
5353
} );
54-
jQuery.when( jQuery.ready ).done( makeHandler( "c" ) );
5554

56-
// Do it twice, just to be sure.
55+
// Bind again to ensure that the errors didn't lock everything up
5756
jQuery( makeHandler( "d" ) );
5857
jQuery( document ).ready( makeHandler( "e" ) );
59-
jQuery.when( jQuery.ready ).done( makeHandler( "f" ) );
58+
jQuery.ready.then( makeHandler( "f" ) );
6059

6160
noEarlyExecution = order.length === 0;
6261

6362
// This assumes that QUnit tests are run on DOM ready!
6463
QUnit.test( "jQuery ready", function( assert ) {
65-
assert.expect( 8 );
64+
assert.expect( 10 );
6665

6766
assert.ok( noEarlyExecution,
6867
"Handlers bound to DOM ready should not execute before DOM ready" );
6968

7069
// Ensure execution order.
7170
assert.deepEqual( order, [ "a", "b", "c", "d", "e", "f" ],
72-
"Bound DOM ready handlers should execute in on-order" );
71+
"Bound DOM ready handlers should execute in bind order" );
7372

7473
// Ensure handler argument is correct.
7574
assert.equal( args.a, jQuery,
@@ -84,17 +83,42 @@ QUnit.module( "ready" );
8483
var done = assert.async();
8584
jQuery( makeHandler( "g" ) );
8685
jQuery( document ).ready( makeHandler( "h" ) );
86+
jQuery.ready.then( makeHandler( "i" ) );
8787
window.setTimeout( function() {
88-
assert.equal( order.shift(), "g", "Event handler should execute immediately, but async" );
89-
assert.equal( args.g, jQuery, "Argument passed to fn in jQuery( fn ) should be jQuery" );
88+
assert.equal( order.shift(), "g",
89+
"Event handler should execute immediately, but async" );
90+
assert.equal( args.g, jQuery,
91+
"Argument passed to fn in jQuery( fn ) should be jQuery" );
9092

91-
assert.equal( order.shift(), "h", "Event handler should execute immediately, but async" );
93+
assert.equal( order.shift(), "h",
94+
"Event handler should execute immediately, but async" );
9295
assert.equal( args.h, jQuery,
9396
"Argument passed to fn in jQuery(document).ready( fn ) should be jQuery" );
97+
98+
assert.equal( order.shift(), "i",
99+
"Event handler should execute immediately, but async" );
100+
assert.equal( args.h, jQuery,
101+
"Argument passed to fn in jQuery.ready.then( fn ) should be jQuery" );
102+
94103
done();
95104
} );
96105
} );
97106

107+
QUnit.test( "jQuery.when(jQuery.ready)", function( assert ) {
108+
assert.expect( 2 );
109+
var done = jQuery.map( new Array( 2 ), function() { return assert.async(); } );
110+
111+
whenified.then( function() {
112+
assert.ok( jQuery.isReady, "jQuery.when Deferred resolved" );
113+
done.pop()();
114+
} );
115+
116+
jQuery.when( jQuery.ready ).then( function() {
117+
assert.ok( jQuery.isReady, "jQuery.when Deferred resolved" );
118+
done.pop()();
119+
} );
120+
} );
121+
98122
QUnit.test( "Promise.resolve(jQuery.ready)", function( assert ) {
99123
assert.expect( 2 );
100124
var done = jQuery.map( new Array( 2 ), function() { return assert.async(); } );

0 commit comments

Comments
 (0)