@@ -14,6 +14,7 @@ let BehaviorSubject;
14
14
let ReactFeatureFlags ;
15
15
let React ;
16
16
let ReactNoop ;
17
+ let Scheduler ;
17
18
let ReplaySubject ;
18
19
19
20
describe ( 'createSubscription' , ( ) => {
@@ -24,6 +25,7 @@ describe('createSubscription', () => {
24
25
ReactFeatureFlags . debugRenderPhaseSideEffectsForStrictMode = false ;
25
26
React = require ( 'react' ) ;
26
27
ReactNoop = require ( 'react-noop-renderer' ) ;
28
+ Scheduler = require ( 'scheduler' ) ;
27
29
28
30
BehaviorSubject = require ( 'rxjs/BehaviorSubject' ) . BehaviorSubject ;
29
31
ReplaySubject = require ( 'rxjs/ReplaySubject' ) . ReplaySubject ;
@@ -65,16 +67,16 @@ describe('createSubscription', () => {
65
67
) ;
66
68
67
69
// Updates while subscribed should re-render the child component
68
- expect ( ReactNoop ) . toFlushAndYield ( [ 'default' ] ) ;
70
+ expect ( Scheduler ) . toFlushAndYield ( [ 'default' ] ) ;
69
71
observable . next ( 123 ) ;
70
- expect ( ReactNoop ) . toFlushAndYield ( [ 123 ] ) ;
72
+ expect ( Scheduler ) . toFlushAndYield ( [ 123 ] ) ;
71
73
observable . next ( 'abc' ) ;
72
- expect ( ReactNoop ) . toFlushAndYield ( [ 'abc' ] ) ;
74
+ expect ( Scheduler ) . toFlushAndYield ( [ 'abc' ] ) ;
73
75
74
76
// Unmounting the subscriber should remove listeners
75
77
ReactNoop . render ( < div /> ) ;
76
78
observable . next ( 456 ) ;
77
- expect ( ReactNoop ) . toFlushAndYield ( [ ] ) ;
79
+ expect ( Scheduler ) . toFlushAndYield ( [ ] ) ;
78
80
} ) ;
79
81
80
82
it ( 'should support observable types like RxJS ReplaySubject' , ( ) => {
@@ -102,13 +104,13 @@ describe('createSubscription', () => {
102
104
const observable = createReplaySubject ( 'initial' ) ;
103
105
104
106
ReactNoop . render ( < Subscription source = { observable } > { render } </ Subscription > ) ;
105
- expect ( ReactNoop ) . toFlushAndYield ( [ 'initial' ] ) ;
107
+ expect ( Scheduler ) . toFlushAndYield ( [ 'initial' ] ) ;
106
108
observable . next ( 'updated' ) ;
107
- expect ( ReactNoop ) . toFlushAndYield ( [ 'updated' ] ) ;
109
+ expect ( Scheduler ) . toFlushAndYield ( [ 'updated' ] ) ;
108
110
109
111
// Unsetting the subscriber prop should reset subscribed values
110
112
ReactNoop . render ( < Subscription > { render } </ Subscription > ) ;
111
- expect ( ReactNoop ) . toFlushAndYield ( [ 'default' ] ) ;
113
+ expect ( Scheduler ) . toFlushAndYield ( [ 'default' ] ) ;
112
114
} ) ;
113
115
114
116
describe ( 'Promises' , ( ) => {
@@ -141,19 +143,19 @@ describe('createSubscription', () => {
141
143
142
144
// Test a promise that resolves after render
143
145
ReactNoop . render ( < Subscription source = { promiseA } > { render } </ Subscription > ) ;
144
- expect ( ReactNoop ) . toFlushAndYield ( [ 'loading' ] ) ;
146
+ expect ( Scheduler ) . toFlushAndYield ( [ 'loading' ] ) ;
145
147
resolveA ( true ) ;
146
148
await promiseA ;
147
- expect ( ReactNoop ) . toFlushAndYield ( [ 'finished' ] ) ;
149
+ expect ( Scheduler ) . toFlushAndYield ( [ 'finished' ] ) ;
148
150
149
151
// Test a promise that resolves before render
150
152
// Note that this will require an extra render anyway,
151
153
// Because there is no way to synchronously get a Promise's value
152
154
rejectB ( false ) ;
153
155
ReactNoop . render ( < Subscription source = { promiseB } > { render } </ Subscription > ) ;
154
- expect ( ReactNoop ) . toFlushAndYield ( [ 'loading' ] ) ;
156
+ expect ( Scheduler ) . toFlushAndYield ( [ 'loading' ] ) ;
155
157
await promiseB . catch ( ( ) => true ) ;
156
- expect ( ReactNoop ) . toFlushAndYield ( [ 'failed' ] ) ;
158
+ expect ( Scheduler ) . toFlushAndYield ( [ 'failed' ] ) ;
157
159
} ) ;
158
160
159
161
it ( 'should still work if unsubscription is managed incorrectly' , async ( ) => {
@@ -177,17 +179,17 @@ describe('createSubscription', () => {
177
179
178
180
// Subscribe first to Promise A then Promise B
179
181
ReactNoop . render ( < Subscription source = { promiseA } > { render } </ Subscription > ) ;
180
- expect ( ReactNoop ) . toFlushAndYield ( [ 'default' ] ) ;
182
+ expect ( Scheduler ) . toFlushAndYield ( [ 'default' ] ) ;
181
183
ReactNoop . render ( < Subscription source = { promiseB } > { render } </ Subscription > ) ;
182
- expect ( ReactNoop ) . toFlushAndYield ( [ 'default' ] ) ;
184
+ expect ( Scheduler ) . toFlushAndYield ( [ 'default' ] ) ;
183
185
184
186
// Resolve both Promises
185
187
resolveB ( 123 ) ;
186
188
resolveA ( 'abc' ) ;
187
189
await Promise . all ( [ promiseA , promiseB ] ) ;
188
190
189
191
// Ensure that only Promise B causes an update
190
- expect ( ReactNoop ) . toFlushAndYield ( [ 123 ] ) ;
192
+ expect ( Scheduler ) . toFlushAndYield ( [ 123 ] ) ;
191
193
} ) ;
192
194
193
195
it ( 'should not call setState for a Promise that resolves after unmount' , async ( ) => {
@@ -211,11 +213,11 @@ describe('createSubscription', () => {
211
213
} ) ;
212
214
213
215
ReactNoop . render ( < Subscription source = { promise } > { render } </ Subscription > ) ;
214
- expect ( ReactNoop ) . toFlushAndYield ( [ 'rendered' ] ) ;
216
+ expect ( Scheduler ) . toFlushAndYield ( [ 'rendered' ] ) ;
215
217
216
218
// Unmount
217
219
ReactNoop . render ( null ) ;
218
- expect ( ReactNoop ) . toFlushWithoutYielding ( ) ;
220
+ expect ( Scheduler ) . toFlushWithoutYielding ( ) ;
219
221
220
222
// Resolve Promise should not trigger a setState warning
221
223
resolvePromise ( true ) ;
@@ -245,21 +247,21 @@ describe('createSubscription', () => {
245
247
) ;
246
248
247
249
// Updates while subscribed should re-render the child component
248
- expect ( ReactNoop ) . toFlushAndYield ( [ 'a-0' ] ) ;
250
+ expect ( Scheduler ) . toFlushAndYield ( [ 'a-0' ] ) ;
249
251
250
252
// Unsetting the subscriber prop should reset subscribed values
251
253
ReactNoop . render (
252
254
< Subscription source = { observableB } > { render } </ Subscription > ,
253
255
) ;
254
- expect ( ReactNoop ) . toFlushAndYield ( [ 'b-0' ] ) ;
256
+ expect ( Scheduler ) . toFlushAndYield ( [ 'b-0' ] ) ;
255
257
256
258
// Updates to the old subscribable should not re-render the child component
257
259
observableA . next ( 'a-1' ) ;
258
- expect ( ReactNoop ) . toFlushAndYield ( [ ] ) ;
260
+ expect ( Scheduler ) . toFlushAndYield ( [ ] ) ;
259
261
260
262
// Updates to the bew subscribable should re-render the child component
261
263
observableB . next ( 'b-1' ) ;
262
- expect ( ReactNoop ) . toFlushAndYield ( [ 'b-1' ] ) ;
264
+ expect ( Scheduler ) . toFlushAndYield ( [ 'b-1' ] ) ;
263
265
} ) ;
264
266
265
267
it ( 'should ignore values emitted by a new subscribable until the commit phase' , ( ) => {
@@ -315,12 +317,12 @@ describe('createSubscription', () => {
315
317
const observableB = createBehaviorSubject ( 'b-0' ) ;
316
318
317
319
ReactNoop . render ( < Parent observed = { observableA } /> ) ;
318
- expect ( ReactNoop ) . toFlushAndYield ( [ 'Subscriber: a-0' , 'Child: a-0' ] ) ;
320
+ expect ( Scheduler ) . toFlushAndYield ( [ 'Subscriber: a-0' , 'Child: a-0' ] ) ;
319
321
expect ( log ) . toEqual ( [ 'Parent.componentDidMount' ] ) ;
320
322
321
323
// Start React update, but don't finish
322
324
ReactNoop . render ( < Parent observed = { observableB } /> ) ;
323
- expect ( ReactNoop ) . toFlushAndYieldThrough ( [ 'Subscriber: b-0' ] ) ;
325
+ expect ( Scheduler ) . toFlushAndYieldThrough ( [ 'Subscriber: b-0' ] ) ;
324
326
expect ( log ) . toEqual ( [ 'Parent.componentDidMount' ] ) ;
325
327
326
328
// Emit some updates from the uncommitted subscribable
@@ -335,7 +337,7 @@ describe('createSubscription', () => {
335
337
// We expect the last emitted update to be rendered (because of the commit phase value check)
336
338
// But the intermediate ones should be ignored,
337
339
// And the final rendered output should be the higher-priority observable.
338
- expect ( ReactNoop ) . toFlushAndYield ( [
340
+ expect ( Scheduler ) . toFlushAndYield ( [
339
341
'Child: b-0' ,
340
342
'Subscriber: b-3' ,
341
343
'Child: b-3' ,
@@ -402,12 +404,12 @@ describe('createSubscription', () => {
402
404
const observableB = createBehaviorSubject ( 'b-0' ) ;
403
405
404
406
ReactNoop . render ( < Parent observed = { observableA } /> ) ;
405
- expect ( ReactNoop ) . toFlushAndYield ( [ 'Subscriber: a-0' , 'Child: a-0' ] ) ;
407
+ expect ( Scheduler ) . toFlushAndYield ( [ 'Subscriber: a-0' , 'Child: a-0' ] ) ;
406
408
expect ( log ) . toEqual ( [ 'Parent.componentDidMount' ] ) ;
407
409
408
410
// Start React update, but don't finish
409
411
ReactNoop . render ( < Parent observed = { observableB } /> ) ;
410
- expect ( ReactNoop ) . toFlushAndYieldThrough ( [ 'Subscriber: b-0' ] ) ;
412
+ expect ( Scheduler ) . toFlushAndYieldThrough ( [ 'Subscriber: b-0' ] ) ;
411
413
expect ( log ) . toEqual ( [ 'Parent.componentDidMount' ] ) ;
412
414
413
415
// Emit some updates from the old subscribable
@@ -420,7 +422,7 @@ describe('createSubscription', () => {
420
422
// Flush everything and ensure that the correct subscribable is used
421
423
// We expect the new subscribable to finish rendering,
422
424
// But then the updated values from the old subscribable should be used.
423
- expect ( ReactNoop ) . toFlushAndYield ( [
425
+ expect ( Scheduler ) . toFlushAndYield ( [
424
426
'Child: b-0' ,
425
427
'Subscriber: a-2' ,
426
428
'Child: a-2' ,
@@ -433,7 +435,7 @@ describe('createSubscription', () => {
433
435
434
436
// Updates from the new subscribable should be ignored.
435
437
observableB . next ( 'b-1' ) ;
436
- expect ( ReactNoop ) . toFlushAndYield ( [ ] ) ;
438
+ expect ( Scheduler ) . toFlushAndYield ( [ ] ) ;
437
439
expect ( log ) . toEqual ( [
438
440
'Parent.componentDidMount' ,
439
441
'Parent.componentDidUpdate' ,
@@ -479,7 +481,7 @@ describe('createSubscription', () => {
479
481
< Subscription source = { observable } > { value => null } </ Subscription > ,
480
482
) ;
481
483
482
- expect ( ReactNoop ) . toFlushAndThrow (
484
+ expect ( Scheduler ) . toFlushAndThrow (
483
485
'A subscription must return an unsubscribe function.' ,
484
486
) ;
485
487
} ) ;
0 commit comments