@@ -232,6 +232,7 @@ const createMockPressEvent = (
232
232
describe ( 'Pressability' , ( ) => {
233
233
beforeEach ( ( ) => {
234
234
jest . resetModules ( ) ;
235
+ jest . spyOn ( Date , 'now' ) ;
235
236
jest . spyOn ( HoverState , 'isHoverEnabled' ) ;
236
237
} ) ;
237
238
@@ -505,6 +506,7 @@ describe('Pressability', () => {
505
506
handlers . onResponderRelease ( createMockPressEvent ( 'onResponderRelease' ) ) ;
506
507
507
508
expect ( config . onPress ) . toBeCalled ( ) ;
509
+ jest . runOnlyPendingTimers ( ) ;
508
510
expect ( config . onPressOut ) . toBeCalled ( ) ;
509
511
} ) ;
510
512
} ) ;
@@ -578,7 +580,118 @@ describe('Pressability', () => {
578
580
} ) ;
579
581
} ) ;
580
582
581
- // TODO: onPressOut tests
583
+ describe ( 'onPressOut' , ( ) => {
584
+ it ( 'is called after `onResponderRelease` before `delayPressIn`' , ( ) => {
585
+ const { config, handlers} = createMockPressability ( ) ;
586
+
587
+ handlers . onStartShouldSetResponder ( ) ;
588
+ handlers . onResponderGrant ( createMockPressEvent ( 'onResponderGrant' ) ) ;
589
+ handlers . onResponderMove ( createMockPressEvent ( 'onResponderMove' ) ) ;
590
+ expect ( config . onPressIn ) . not . toBeCalled ( ) ;
591
+ handlers . onResponderRelease ( createMockPressEvent ( 'onResponderRelease' ) ) ;
592
+
593
+ expect ( config . onPressOut ) . not . toBeCalled ( ) ;
594
+ jest . runOnlyPendingTimers ( ) ;
595
+ expect ( config . onPressOut ) . toBeCalled ( ) ;
596
+ } ) ;
597
+
598
+ it ( 'is called after `onResponderRelease` after `delayPressIn`' , ( ) => {
599
+ const { config, handlers} = createMockPressability ( ) ;
600
+
601
+ handlers . onStartShouldSetResponder ( ) ;
602
+ handlers . onResponderGrant ( createMockPressEvent ( 'onResponderGrant' ) ) ;
603
+ handlers . onResponderMove ( createMockPressEvent ( 'onResponderMove' ) ) ;
604
+ jest . runOnlyPendingTimers ( ) ;
605
+ expect ( config . onPressIn ) . toBeCalled ( ) ;
606
+ handlers . onResponderRelease ( createMockPressEvent ( 'onResponderRelease' ) ) ;
607
+
608
+ expect ( config . onPressOut ) . not . toBeCalled ( ) ;
609
+ jest . runOnlyPendingTimers ( ) ;
610
+ expect ( config . onPressOut ) . toBeCalled ( ) ;
611
+ } ) ;
612
+
613
+ it ( 'is not called after `onResponderTerminate` before `delayPressIn`' , ( ) => {
614
+ const { config, handlers} = createMockPressability ( ) ;
615
+
616
+ handlers . onStartShouldSetResponder ( ) ;
617
+ handlers . onResponderGrant ( createMockPressEvent ( 'onResponderGrant' ) ) ;
618
+ handlers . onResponderMove ( createMockPressEvent ( 'onResponderMove' ) ) ;
619
+ handlers . onResponderTerminate (
620
+ createMockPressEvent ( 'onResponderTerminate' ) ,
621
+ ) ;
622
+
623
+ expect ( config . onPressOut ) . not . toBeCalled ( ) ;
624
+ jest . runOnlyPendingTimers ( ) ;
625
+ expect ( config . onPressOut ) . not . toBeCalled ( ) ;
626
+ } ) ;
627
+
628
+ it ( 'is not called after `onResponderTerminate` after `delayPressIn`' , ( ) => {
629
+ const { config, handlers} = createMockPressability ( ) ;
630
+
631
+ handlers . onStartShouldSetResponder ( ) ;
632
+ handlers . onResponderGrant ( createMockPressEvent ( 'onResponderGrant' ) ) ;
633
+ handlers . onResponderMove ( createMockPressEvent ( 'onResponderMove' ) ) ;
634
+ jest . runOnlyPendingTimers ( ) ;
635
+ expect ( config . onPressIn ) . toBeCalled ( ) ;
636
+ handlers . onResponderTerminate (
637
+ createMockPressEvent ( 'onResponderTerminate' ) ,
638
+ ) ;
639
+
640
+ expect ( config . onPressOut ) . not . toBeCalled ( ) ;
641
+ jest . runOnlyPendingTimers ( ) ;
642
+ expect ( config . onPressOut ) . toBeCalled ( ) ;
643
+ } ) ;
644
+
645
+ it ( 'is called after the minimum press duration by default' , ( ) => {
646
+ const { config, handlers} = createMockPressability ( ) ;
647
+
648
+ handlers . onStartShouldSetResponder ( ) ;
649
+ handlers . onResponderGrant ( createMockPressEvent ( 'onResponderGrant' ) ) ;
650
+ handlers . onResponderMove ( createMockPressEvent ( 'onResponderMove' ) ) ;
651
+ jest . runOnlyPendingTimers ( ) ;
652
+ expect ( config . onPressIn ) . toBeCalled ( ) ;
653
+ handlers . onResponderRelease ( createMockPressEvent ( 'onResponderRelease' ) ) ;
654
+
655
+ jest . advanceTimersByTime ( 120 ) ;
656
+ expect ( config . onPressOut ) . not . toBeCalled ( ) ;
657
+ jest . advanceTimersByTime ( 10 ) ;
658
+ expect ( config . onPressOut ) . toBeCalled ( ) ;
659
+ } ) ;
660
+
661
+ it ( 'is called after only after the remaining minimum press duration' , ( ) => {
662
+ const { config, handlers} = createMockPressability ( ) ;
663
+
664
+ handlers . onStartShouldSetResponder ( ) ;
665
+ handlers . onResponderGrant ( createMockPressEvent ( 'onResponderGrant' ) ) ;
666
+ handlers . onResponderMove ( createMockPressEvent ( 'onResponderMove' ) ) ;
667
+ jest . runOnlyPendingTimers ( ) ;
668
+ expect ( config . onPressIn ) . toBeCalled ( ) ;
669
+ // WORKAROUND: Jest does not advance `Date.now()`.
670
+ const touchActivateTime = Date . now ( ) ;
671
+ jest . advanceTimersByTime ( 120 ) ;
672
+ Date . now . mockReturnValue ( touchActivateTime + 120 ) ;
673
+ handlers . onResponderRelease ( createMockPressEvent ( 'onResponderRelease' ) ) ;
674
+
675
+ expect ( config . onPressOut ) . not . toBeCalled ( ) ;
676
+ jest . advanceTimersByTime ( 10 ) ;
677
+ expect ( config . onPressOut ) . toBeCalled ( ) ;
678
+ } ) ;
679
+
680
+ it ( 'is called synchronously if minimum press duration is 0ms' , ( ) => {
681
+ const { config, handlers} = createMockPressability ( {
682
+ minPressDuration : 0 ,
683
+ } ) ;
684
+
685
+ handlers . onStartShouldSetResponder ( ) ;
686
+ handlers . onResponderGrant ( createMockPressEvent ( 'onResponderGrant' ) ) ;
687
+ handlers . onResponderMove ( createMockPressEvent ( 'onResponderMove' ) ) ;
688
+ jest . runOnlyPendingTimers ( ) ;
689
+ expect ( config . onPressIn ) . toBeCalled ( ) ;
690
+ handlers . onResponderRelease ( createMockPressEvent ( 'onResponderRelease' ) ) ;
691
+
692
+ expect ( config . onPressOut ) . toBeCalled ( ) ;
693
+ } ) ;
694
+ } ) ;
582
695
583
696
describe ( '`onPress*` with movement' , ( ) => {
584
697
describe ( 'within bounds of hit rect' , ( ) => {
@@ -611,6 +724,7 @@ describe('Pressability', () => {
611
724
612
725
expect ( config . onPressIn ) . toBeCalled ( ) ;
613
726
expect ( config . onPress ) . toBeCalled ( ) ;
727
+ jest . runOnlyPendingTimers ( ) ;
614
728
expect ( config . onPressOut ) . toBeCalled ( ) ;
615
729
} ) ;
616
730
@@ -648,6 +762,7 @@ describe('Pressability', () => {
648
762
handlers . onResponderRelease ( createMockPressEvent ( 'onResponderRelease' ) ) ;
649
763
650
764
expect ( config . onPress ) . toBeCalled ( ) ;
765
+ jest . runOnlyPendingTimers ( ) ;
651
766
expect ( config . onPressOut ) . toBeCalled ( ) ;
652
767
} ) ;
653
768
} ) ;
@@ -676,6 +791,7 @@ describe('Pressability', () => {
676
791
677
792
handlers . onResponderRelease ( createMockPressEvent ( 'onResponderRelease' ) ) ;
678
793
expect ( config . onPress ) . not . toBeCalled ( ) ;
794
+ jest . runOnlyPendingTimers ( ) ;
679
795
expect ( config . onPressOut ) . toBeCalled ( ) ;
680
796
} ) ;
681
797
@@ -733,6 +849,7 @@ describe('Pressability', () => {
733
849
handlers . onResponderRelease ( createMockPressEvent ( 'onResponderRelease' ) ) ;
734
850
735
851
expect ( config . onPress ) . toBeCalled ( ) ;
852
+ jest . runOnlyPendingTimers ( ) ;
736
853
expect ( config . onPressOut ) . toBeCalled ( ) ;
737
854
} ) ;
738
855
} ) ;
0 commit comments