@@ -470,7 +470,7 @@ describe('ChangeEventPlugin', () => {
470
470
beforeEach ( ( ) => {
471
471
jest . resetModules ( ) ;
472
472
ReactFeatureFlags = require ( 'shared/ReactFeatureFlags' ) ;
473
- ReactFeatureFlags . debugRenderPhaseSideEffectsForStrictMode = false ;
473
+
474
474
React = require ( 'react' ) ;
475
475
ReactDOM = require ( 'react-dom' ) ;
476
476
TestUtils = require ( 'react-dom/test-utils' ) ;
@@ -481,13 +481,11 @@ describe('ChangeEventPlugin', () => {
481
481
const root = ReactDOM . createRoot ( container ) ;
482
482
let input ;
483
483
484
- let ops = [ ] ;
485
-
486
484
class ControlledInput extends React . Component {
487
485
state = { value : 'initial' } ;
488
486
onChange = event => this . setState ( { value : event . target . value } ) ;
489
487
render ( ) {
490
- ops . push ( `render: ${ this . state . value } ` ) ;
488
+ Scheduler . unstable_yieldValue ( `render: ${ this . state . value } ` ) ;
491
489
const controlledValue =
492
490
this . state . value === 'changed' ? 'changed [!]' : this . state . value ;
493
491
return (
@@ -504,22 +502,19 @@ describe('ChangeEventPlugin', () => {
504
502
// Initial mount. Test that this is async.
505
503
root . render ( < ControlledInput /> ) ;
506
504
// Should not have flushed yet.
507
- expect ( ops ) . toEqual ( [ ] ) ;
505
+ expect ( Scheduler ) . toHaveYielded ( [ ] ) ;
508
506
expect ( input ) . toBe ( undefined ) ;
509
507
// Flush callbacks.
510
- Scheduler . unstable_flushAll ( ) ;
511
- expect ( ops ) . toEqual ( [ 'render: initial' ] ) ;
508
+ expect ( Scheduler ) . toFlushAndYield ( [ 'render: initial' ] ) ;
512
509
expect ( input . value ) . toBe ( 'initial' ) ;
513
510
514
- ops = [ ] ;
515
-
516
511
// Trigger a change event.
517
512
setUntrackedValue . call ( input , 'changed' ) ;
518
513
input . dispatchEvent (
519
514
new Event ( 'input' , { bubbles : true , cancelable : true } ) ,
520
515
) ;
521
516
// Change should synchronously flush
522
- expect ( ops ) . toEqual ( [ 'render: changed' ] ) ;
517
+ expect ( Scheduler ) . toHaveYielded ( [ 'render: changed' ] ) ;
523
518
// Value should be the controlled value, not the original one
524
519
expect ( input . value ) . toBe ( 'changed [!]' ) ;
525
520
} ) ;
@@ -528,15 +523,13 @@ describe('ChangeEventPlugin', () => {
528
523
const root = ReactDOM . createRoot ( container ) ;
529
524
let input ;
530
525
531
- let ops = [ ] ;
532
-
533
526
class ControlledInput extends React . Component {
534
527
state = { checked : false } ;
535
528
onChange = event => {
536
529
this . setState ( { checked : event . target . checked } ) ;
537
530
} ;
538
531
render ( ) {
539
- ops . push ( `render: ${ this . state . checked } ` ) ;
532
+ Scheduler . unstable_yieldValue ( `render: ${ this . state . checked } ` ) ;
540
533
const controlledValue = this . props . reverse
541
534
? ! this . state . checked
542
535
: this . state . checked ;
@@ -554,49 +547,42 @@ describe('ChangeEventPlugin', () => {
554
547
// Initial mount. Test that this is async.
555
548
root . render ( < ControlledInput reverse = { false } /> ) ;
556
549
// Should not have flushed yet.
557
- expect ( ops ) . toEqual ( [ ] ) ;
550
+ expect ( Scheduler ) . toHaveYielded ( [ ] ) ;
558
551
expect ( input ) . toBe ( undefined ) ;
559
552
// Flush callbacks.
560
- Scheduler . unstable_flushAll ( ) ;
561
- expect ( ops ) . toEqual ( [ 'render: false' ] ) ;
553
+ expect ( Scheduler ) . toFlushAndYield ( [ 'render: false' ] ) ;
562
554
expect ( input . checked ) . toBe ( false ) ;
563
555
564
- ops = [ ] ;
565
-
566
556
// Trigger a change event.
567
557
input . dispatchEvent (
568
558
new MouseEvent ( 'click' , { bubbles : true , cancelable : true } ) ,
569
559
) ;
570
560
// Change should synchronously flush
571
- expect ( ops ) . toEqual ( [ 'render: true' ] ) ;
561
+ expect ( Scheduler ) . toHaveYielded ( [ 'render: true' ] ) ;
572
562
expect ( input . checked ) . toBe ( true ) ;
573
563
574
564
// Now let's make sure we're using the controlled value.
575
565
root . render ( < ControlledInput reverse = { true } /> ) ;
576
- Scheduler . unstable_flushAll ( ) ;
577
-
578
- ops = [ ] ;
566
+ expect ( Scheduler ) . toFlushAndYield ( [ 'render: true' ] ) ;
579
567
580
568
// Trigger another change event.
581
569
input . dispatchEvent (
582
570
new MouseEvent ( 'click' , { bubbles : true , cancelable : true } ) ,
583
571
) ;
584
572
// Change should synchronously flush
585
- expect ( ops ) . toEqual ( [ 'render: true' ] ) ;
573
+ expect ( Scheduler ) . toHaveYielded ( [ 'render: true' ] ) ;
586
574
expect ( input . checked ) . toBe ( false ) ;
587
575
} ) ;
588
576
589
577
it . experimental ( 'textarea' , ( ) => {
590
578
const root = ReactDOM . createRoot ( container ) ;
591
579
let textarea ;
592
580
593
- let ops = [ ] ;
594
-
595
581
class ControlledTextarea extends React . Component {
596
582
state = { value : 'initial' } ;
597
583
onChange = event => this . setState ( { value : event . target . value } ) ;
598
584
render ( ) {
599
- ops . push ( `render: ${ this . state . value } ` ) ;
585
+ Scheduler . unstable_yieldValue ( `render: ${ this . state . value } ` ) ;
600
586
const controlledValue =
601
587
this . state . value === 'changed' ? 'changed [!]' : this . state . value ;
602
588
return (
@@ -613,22 +599,19 @@ describe('ChangeEventPlugin', () => {
613
599
// Initial mount. Test that this is async.
614
600
root . render ( < ControlledTextarea /> ) ;
615
601
// Should not have flushed yet.
616
- expect ( ops ) . toEqual ( [ ] ) ;
602
+ expect ( Scheduler ) . toHaveYielded ( [ ] ) ;
617
603
expect ( textarea ) . toBe ( undefined ) ;
618
604
// Flush callbacks.
619
- Scheduler . unstable_flushAll ( ) ;
620
- expect ( ops ) . toEqual ( [ 'render: initial' ] ) ;
605
+ expect ( Scheduler ) . toFlushAndYield ( [ 'render: initial' ] ) ;
621
606
expect ( textarea . value ) . toBe ( 'initial' ) ;
622
607
623
- ops = [ ] ;
624
-
625
608
// Trigger a change event.
626
609
setUntrackedTextareaValue . call ( textarea , 'changed' ) ;
627
610
textarea . dispatchEvent (
628
611
new Event ( 'input' , { bubbles : true , cancelable : true } ) ,
629
612
) ;
630
613
// Change should synchronously flush
631
- expect ( ops ) . toEqual ( [ 'render: changed' ] ) ;
614
+ expect ( Scheduler ) . toHaveYielded ( [ 'render: changed' ] ) ;
632
615
// Value should be the controlled value, not the original one
633
616
expect ( textarea . value ) . toBe ( 'changed [!]' ) ;
634
617
} ) ;
@@ -637,13 +620,11 @@ describe('ChangeEventPlugin', () => {
637
620
const root = ReactDOM . createRoot ( container ) ;
638
621
let input ;
639
622
640
- let ops = [ ] ;
641
-
642
623
class ControlledInput extends React . Component {
643
624
state = { value : 'initial' } ;
644
625
onChange = event => this . setState ( { value : event . target . value } ) ;
645
626
render ( ) {
646
- ops . push ( `render: ${ this . state . value } ` ) ;
627
+ Scheduler . unstable_yieldValue ( `render: ${ this . state . value } ` ) ;
647
628
const controlledValue =
648
629
this . state . value === 'changed' ? 'changed [!]' : this . state . value ;
649
630
return (
@@ -664,22 +645,19 @@ describe('ChangeEventPlugin', () => {
664
645
// Initial mount. Test that this is async.
665
646
root . render ( < ControlledInput /> ) ;
666
647
// Should not have flushed yet.
667
- expect ( ops ) . toEqual ( [ ] ) ;
648
+ expect ( Scheduler ) . toHaveYielded ( [ ] ) ;
668
649
expect ( input ) . toBe ( undefined ) ;
669
650
// Flush callbacks.
670
- Scheduler . unstable_flushAll ( ) ;
671
- expect ( ops ) . toEqual ( [ 'render: initial' ] ) ;
651
+ expect ( Scheduler ) . toFlushAndYield ( [ 'render: initial' ] ) ;
672
652
expect ( input . value ) . toBe ( 'initial' ) ;
673
653
674
- ops = [ ] ;
675
-
676
654
// Trigger a change event.
677
655
setUntrackedValue . call ( input , 'changed' ) ;
678
656
input . dispatchEvent (
679
657
new Event ( 'input' , { bubbles : true , cancelable : true } ) ,
680
658
) ;
681
659
// Change should synchronously flush
682
- expect ( ops ) . toEqual ( [ 'render: changed' ] ) ;
660
+ expect ( Scheduler ) . toHaveYielded ( [ 'render: changed' ] ) ;
683
661
// Value should be the controlled value, not the original one
684
662
expect ( input . value ) . toBe ( 'changed [!]' ) ;
685
663
} ) ;
@@ -688,16 +666,14 @@ describe('ChangeEventPlugin', () => {
688
666
const root = ReactDOM . createRoot ( container ) ;
689
667
let input ;
690
668
691
- let ops = [ ] ;
692
-
693
669
class ControlledInput extends React . Component {
694
670
state = { value : 'initial' } ;
695
671
onChange = event => this . setState ( { value : event . target . value } ) ;
696
672
reset = ( ) => {
697
673
this . setState ( { value : '' } ) ;
698
674
} ;
699
675
render ( ) {
700
- ops . push ( `render: ${ this . state . value } ` ) ;
676
+ Scheduler . unstable_yieldValue ( `render: ${ this . state . value } ` ) ;
701
677
const controlledValue =
702
678
this . state . value === 'changed' ? 'changed [!]' : this . state . value ;
703
679
return (
@@ -715,27 +691,23 @@ describe('ChangeEventPlugin', () => {
715
691
// Initial mount. Test that this is async.
716
692
root . render ( < ControlledInput /> ) ;
717
693
// Should not have flushed yet.
718
- expect ( ops ) . toEqual ( [ ] ) ;
694
+ expect ( Scheduler ) . toHaveYielded ( [ ] ) ;
719
695
expect ( input ) . toBe ( undefined ) ;
720
696
// Flush callbacks.
721
- Scheduler . unstable_flushAll ( ) ;
722
- expect ( ops ) . toEqual ( [ 'render: initial' ] ) ;
697
+ expect ( Scheduler ) . toFlushAndYield ( [ 'render: initial' ] ) ;
723
698
expect ( input . value ) . toBe ( 'initial' ) ;
724
699
725
- ops = [ ] ;
726
-
727
700
// Trigger a click event
728
701
input . dispatchEvent (
729
702
new Event ( 'click' , { bubbles : true , cancelable : true } ) ,
730
703
) ;
731
704
// Nothing should have changed
732
- expect ( ops ) . toEqual ( [ ] ) ;
705
+ expect ( Scheduler ) . toHaveYielded ( [ ] ) ;
733
706
expect ( input . value ) . toBe ( 'initial' ) ;
734
707
735
708
// Flush callbacks.
736
- Scheduler . unstable_flushAll ( ) ;
737
709
// Now the click update has flushed.
738
- expect ( ops ) . toEqual ( [ 'render: ' ] ) ;
710
+ expect ( Scheduler ) . toFlushAndYield ( [ 'render: ' ] ) ;
739
711
expect ( input . value ) . toBe ( '' ) ;
740
712
} ) ;
741
713
0 commit comments