@@ -33,12 +33,16 @@ const ReactTestRenderer = require('react-test-renderer');
33
33
34
34
// Isolate the noop renderer
35
35
jest . resetModules ( ) ;
36
+ const ReactNoop = require ( 'react-noop-renderer' ) ;
37
+ const Scheduler = require ( 'scheduler' ) ;
36
38
37
39
let Group ;
38
40
let Shape ;
39
41
let Surface ;
40
42
let TestComponent ;
41
43
44
+ let waitFor ;
45
+
42
46
const Missing = { } ;
43
47
44
48
function testDOMNodeStructure ( domNode , expectedStructure ) {
@@ -76,6 +80,8 @@ describe('ReactART', () => {
76
80
Shape = ReactART . Shape ;
77
81
Surface = ReactART . Surface ;
78
82
83
+ ( { waitFor} = require ( 'internal-test-utils' ) ) ;
84
+
79
85
TestComponent = class extends React . Component {
80
86
group = React . createRef ( ) ;
81
87
@@ -357,6 +363,58 @@ describe('ReactART', () => {
357
363
doClick ( instance ) ;
358
364
expect ( onClick2 ) . toBeCalled ( ) ;
359
365
} ) ;
366
+
367
+ // @gate !enableSyncDefaultUpdates
368
+ it ( 'can concurrently render with a "primary" renderer while sharing context' , async ( ) => {
369
+ const CurrentRendererContext = React . createContext ( null ) ;
370
+
371
+ function Yield ( props ) {
372
+ Scheduler . log ( props . value ) ;
373
+ return null ;
374
+ }
375
+
376
+ let ops = [ ] ;
377
+ function LogCurrentRenderer ( ) {
378
+ return (
379
+ < CurrentRendererContext . Consumer >
380
+ { currentRenderer => {
381
+ ops . push ( currentRenderer ) ;
382
+ return null ;
383
+ } }
384
+ </ CurrentRendererContext . Consumer >
385
+ ) ;
386
+ }
387
+
388
+ // Using test renderer instead of the DOM renderer here because async
389
+ // testing APIs for the DOM renderer don't exist.
390
+ ReactNoop . render (
391
+ < CurrentRendererContext . Provider value = "Test" >
392
+ < Yield value = "A" />
393
+ < Yield value = "B" />
394
+ < LogCurrentRenderer />
395
+ < Yield value = "C" />
396
+ </ CurrentRendererContext . Provider > ,
397
+ ) ;
398
+
399
+ await waitFor ( [ 'A' ] ) ;
400
+
401
+ ReactDOM . render (
402
+ < Surface >
403
+ < LogCurrentRenderer />
404
+ < CurrentRendererContext . Provider value = "ART" >
405
+ < LogCurrentRenderer />
406
+ </ CurrentRendererContext . Provider >
407
+ </ Surface > ,
408
+ container ,
409
+ ) ;
410
+
411
+ expect ( ops ) . toEqual ( [ null , 'ART' ] ) ;
412
+
413
+ ops = [ ] ;
414
+ await waitFor ( [ 'B' , 'C' ] ) ;
415
+
416
+ expect ( ops ) . toEqual ( [ 'Test' ] ) ;
417
+ } ) ;
360
418
} ) ;
361
419
362
420
describe ( 'ReactARTComponents' , ( ) => {
0 commit comments