@@ -13,7 +13,6 @@ import {createEventTarget, setPointerEvent} from 'dom-event-testing-library';
13
13
14
14
let React ;
15
15
let ReactFeatureFlags ;
16
- let ReactDOM ;
17
16
let ReactDOMClient ;
18
17
let useFocusWithin ;
19
18
let act ;
@@ -25,7 +24,6 @@ function initializeModules(hasPointerEvents) {
25
24
ReactFeatureFlags . enableScopeAPI = true ;
26
25
ReactFeatureFlags . enableCreateEventHandleAPI = true ;
27
26
React = require ( 'react' ) ;
28
- ReactDOM = require ( 'react-dom' ) ;
29
27
ReactDOMClient = require ( 'react-dom/client' ) ;
30
28
act = require ( 'internal-test-utils' ) . act ;
31
29
@@ -42,17 +40,22 @@ const table = [[forcePointerEvents], [!forcePointerEvents]];
42
40
describe . each ( table ) ( `useFocus` , hasPointerEvents => {
43
41
let container ;
44
42
let container2 ;
43
+ let root ;
45
44
46
45
beforeEach ( ( ) => {
47
46
initializeModules ( hasPointerEvents ) ;
48
47
container = document . createElement ( 'div' ) ;
49
48
document . body . appendChild ( container ) ;
50
49
container2 = document . createElement ( 'div' ) ;
51
50
document . body . appendChild ( container2 ) ;
51
+ root = ReactDOMClient . createRoot ( container ) ;
52
52
} ) ;
53
53
54
- afterEach ( ( ) => {
55
- ReactDOM . render ( null , container ) ;
54
+ afterEach ( async ( ) => {
55
+ await act ( ( ) => {
56
+ root . render ( null ) ;
57
+ } ) ;
58
+
56
59
document . body . removeChild ( container ) ;
57
60
document . body . removeChild ( container2 ) ;
58
61
container = null ;
@@ -75,7 +78,7 @@ describe.each(table)(`useFocus`, hasPointerEvents => {
75
78
return < div ref = { focusWithinRef } /> ;
76
79
} ;
77
80
await act ( ( ) => {
78
- ReactDOM . render ( < Component /> , container ) ;
81
+ root . render ( < Component /> ) ;
79
82
} ) ;
80
83
} ;
81
84
@@ -111,7 +114,7 @@ describe.each(table)(`useFocus`, hasPointerEvents => {
111
114
innerRef = React . createRef ( ) ;
112
115
innerRef2 = React . createRef ( ) ;
113
116
await act ( ( ) => {
114
- ReactDOM . render ( < Component show = { true } /> , container ) ;
117
+ root . render ( < Component show = { true } /> ) ;
115
118
} ) ;
116
119
} ;
117
120
@@ -188,7 +191,7 @@ describe.each(table)(`useFocus`, hasPointerEvents => {
188
191
innerRef = React . createRef ( ) ;
189
192
innerRef2 = React . createRef ( ) ;
190
193
await act ( ( ) => {
191
- ReactDOM . render ( < Component show = { true } /> , container ) ;
194
+ root . render ( < Component show = { true } /> ) ;
192
195
} ) ;
193
196
} ;
194
197
@@ -314,7 +317,7 @@ describe.each(table)(`useFocus`, hasPointerEvents => {
314
317
) ;
315
318
} ;
316
319
await act ( ( ) => {
317
- ReactDOM . render ( < Component /> , container ) ;
320
+ root . render ( < Component /> ) ;
318
321
} ) ;
319
322
320
323
const target = createEventTarget ( inputRef . current ) ;
@@ -354,7 +357,7 @@ describe.each(table)(`useFocus`, hasPointerEvents => {
354
357
} ;
355
358
356
359
await act ( ( ) => {
357
- ReactDOM . render ( < Component show = { true } /> , container ) ;
360
+ root . render ( < Component show = { true } /> ) ;
358
361
} ) ;
359
362
360
363
const inner = innerRef . current ;
@@ -363,7 +366,10 @@ describe.each(table)(`useFocus`, hasPointerEvents => {
363
366
target . focus ( ) ;
364
367
expect ( onBeforeBlurWithin ) . toHaveBeenCalledTimes ( 0 ) ;
365
368
expect ( onAfterBlurWithin ) . toHaveBeenCalledTimes ( 0 ) ;
366
- ReactDOM . render ( < Component show = { false } /> , container ) ;
369
+ await act ( ( ) => {
370
+ root . render ( < Component show = { false } /> ) ;
371
+ } ) ;
372
+
367
373
expect ( onBeforeBlurWithin ) . toHaveBeenCalledTimes ( 1 ) ;
368
374
expect ( onAfterBlurWithin ) . toHaveBeenCalledTimes ( 1 ) ;
369
375
expect ( onAfterBlurWithin ) . toHaveBeenCalledWith (
@@ -391,7 +397,7 @@ describe.each(table)(`useFocus`, hasPointerEvents => {
391
397
} ;
392
398
393
399
await act ( ( ) => {
394
- ReactDOM . render ( < Component show = { true } /> , container ) ;
400
+ root . render ( < Component show = { true } /> ) ;
395
401
} ) ;
396
402
397
403
const inner = innerRef . current ;
@@ -400,7 +406,11 @@ describe.each(table)(`useFocus`, hasPointerEvents => {
400
406
target . focus ( ) ;
401
407
expect ( onBeforeBlurWithin ) . toHaveBeenCalledTimes ( 0 ) ;
402
408
expect ( onAfterBlurWithin ) . toHaveBeenCalledTimes ( 0 ) ;
403
- ReactDOM . render ( < Component show = { false } /> , container ) ;
409
+
410
+ await act ( ( ) => {
411
+ root . render ( < Component show = { false } /> ) ;
412
+ } ) ;
413
+
404
414
expect ( onBeforeBlurWithin ) . toHaveBeenCalledTimes ( 1 ) ;
405
415
expect ( onAfterBlurWithin ) . toHaveBeenCalledTimes ( 1 ) ;
406
416
expect ( onAfterBlurWithin ) . toHaveBeenCalledWith (
@@ -433,13 +443,16 @@ describe.each(table)(`useFocus`, hasPointerEvents => {
433
443
} ;
434
444
435
445
await act ( ( ) => {
436
- ReactDOM . render ( < Component show = { true } /> , container ) ;
446
+ root . render ( < Component show = { true } /> ) ;
437
447
} ) ;
438
448
439
449
inputRef . current . focus ( ) ;
440
450
expect ( onBeforeBlurWithin ) . toHaveBeenCalledTimes ( 0 ) ;
441
451
expect ( onAfterBlurWithin ) . toHaveBeenCalledTimes ( 0 ) ;
442
- ReactDOM . render ( < Component show = { false } /> , container ) ;
452
+ await act ( ( ) => {
453
+ root . render ( < Component show = { false } /> ) ;
454
+ } ) ;
455
+
443
456
expect ( onBeforeBlurWithin ) . toHaveBeenCalledTimes ( 1 ) ;
444
457
expect ( onAfterBlurWithin ) . toHaveBeenCalledTimes ( 1 ) ;
445
458
} ) ;
@@ -469,15 +482,15 @@ describe.each(table)(`useFocus`, hasPointerEvents => {
469
482
} ;
470
483
471
484
await act ( ( ) => {
472
- ReactDOM . render ( < Component show = { true } /> , container ) ;
485
+ root . render ( < Component show = { true } /> ) ;
473
486
} ) ;
474
487
475
488
const inner = innerRef . current ;
476
489
const target = createEventTarget ( inner ) ;
477
490
target . keydown ( { key : 'Tab' } ) ;
478
491
target . focus ( ) ;
479
492
await act ( ( ) => {
480
- ReactDOM . render ( < Component show = { false } /> , container ) ;
493
+ root . render ( < Component show = { false } /> ) ;
481
494
} ) ;
482
495
expect ( targetNodes ) . toEqual ( [ targetNode ] ) ;
483
496
} ) ;
@@ -512,10 +525,10 @@ describe.each(table)(`useFocus`, hasPointerEvents => {
512
525
) ;
513
526
} ;
514
527
515
- const root = ReactDOMClient . createRoot ( container2 ) ;
528
+ const root2 = ReactDOMClient . createRoot ( container2 ) ;
516
529
517
530
await act ( ( ) => {
518
- root . render ( < Component /> ) ;
531
+ root2 . render ( < Component /> ) ;
519
532
} ) ;
520
533
expect ( container2 . innerHTML ) . toBe ( '<div><input></div>' ) ;
521
534
@@ -528,14 +541,18 @@ describe.each(table)(`useFocus`, hasPointerEvents => {
528
541
529
542
suspend = true ;
530
543
await act ( ( ) => {
531
- root . render ( < Component /> ) ;
544
+ root2 . render ( < Component /> ) ;
532
545
} ) ;
533
546
expect ( container2 . innerHTML ) . toBe (
534
547
'<div><input style="display: none;">Loading...</div>' ,
535
548
) ;
536
549
expect ( onBeforeBlurWithin ) . toHaveBeenCalledTimes ( 1 ) ;
537
550
expect ( onAfterBlurWithin ) . toHaveBeenCalledTimes ( 1 ) ;
538
- resolve ( ) ;
551
+ await act ( ( ) => {
552
+ suspend = false ;
553
+ resolve ( ) ;
554
+ } ) ;
555
+ expect ( container2 . innerHTML ) . toBe ( '<div><input style=""></div>' ) ;
539
556
} ) ;
540
557
541
558
// @gate www
@@ -569,37 +586,41 @@ describe.each(table)(`useFocus`, hasPointerEvents => {
569
586
) ;
570
587
} ;
571
588
572
- const root = ReactDOMClient . createRoot ( container2 ) ;
589
+ const root2 = ReactDOMClient . createRoot ( container2 ) ;
573
590
574
591
await act ( ( ) => {
575
- root . render ( < Component /> ) ;
592
+ root2 . render ( < Component /> ) ;
576
593
} ) ;
577
594
578
595
expect ( onBeforeBlurWithin ) . toHaveBeenCalledTimes ( 0 ) ;
579
596
expect ( onAfterBlurWithin ) . toHaveBeenCalledTimes ( 0 ) ;
580
597
581
598
suspend = true ;
582
599
await act ( ( ) => {
583
- root . render ( < Component /> ) ;
600
+ root2 . render ( < Component /> ) ;
584
601
} ) ;
585
602
expect ( onBeforeBlurWithin ) . toHaveBeenCalledTimes ( 0 ) ;
586
603
expect ( onAfterBlurWithin ) . toHaveBeenCalledTimes ( 0 ) ;
587
604
588
605
await act ( ( ) => {
589
- root . render ( < Component /> ) ;
606
+ root2 . render ( < Component /> ) ;
590
607
} ) ;
591
608
expect ( onBeforeBlurWithin ) . toHaveBeenCalledTimes ( 0 ) ;
592
609
expect ( onAfterBlurWithin ) . toHaveBeenCalledTimes ( 0 ) ;
593
610
594
611
buttonRef . current . focus ( ) ;
595
612
suspend = false ;
596
613
await act ( ( ) => {
597
- root . render ( < Component /> ) ;
614
+ root2 . render ( < Component /> ) ;
598
615
} ) ;
599
616
expect ( onBeforeBlurWithin ) . toHaveBeenCalledTimes ( 1 ) ;
600
617
expect ( onAfterBlurWithin ) . toHaveBeenCalledTimes ( 1 ) ;
601
618
602
- resolve ( ) ;
619
+ await act ( ( ) => {
620
+ suspend = false ;
621
+ resolve ( ) ;
622
+ } ) ;
623
+ expect ( container2 . innerHTML ) . toBe ( '<div><input style=""></div>' ) ;
603
624
} ) ;
604
625
} ) ;
605
626
} ) ;
0 commit comments