@@ -47,8 +47,8 @@ function tapAndMoveOutside({
47
47
// NOTE: this assumes the PointerEvent implementation calls
48
48
// 'releasePointerCapture' for touch pointers
49
49
if ( ! hasPointerEvents && pointerType === 'touch' ) {
50
- downTarget . pointermove ( { pointerType, ...coordinatesOutside } ) ;
51
50
document . elementFromPoint = ( ) => upTarget . node ;
51
+ downTarget . pointermove ( { pointerType, ...coordinatesOutside } ) ;
52
52
} else {
53
53
upTarget . pointermove ( { pointerType, ...coordinatesOutside } ) ;
54
54
}
@@ -450,26 +450,41 @@ describeWithPointerEvent('Tap responder', hasPointerEvents => {
450
450
} ) ;
451
451
452
452
describe ( 'onTapChange' , ( ) => {
453
- let onTapChange , ref ;
453
+ let eventsLog , onTapChange , ref ;
454
+
455
+ const logger = msg => ( ) => {
456
+ eventsLog . push ( msg ) ;
457
+ } ;
454
458
455
459
beforeEach ( ( ) => {
460
+ eventsLog = [ ] ;
456
461
onTapChange = jest . fn ( ) ;
457
462
ref = React . createRef ( ) ;
458
463
const Component = ( ) => {
459
- const listener = useTap ( { onTapChange} ) ;
464
+ const listener = useTap ( {
465
+ onTapChange ( e ) {
466
+ logger ( 'change' ) ( ) ;
467
+ onTapChange ( e ) ;
468
+ } ,
469
+ onTapStart : logger ( 'start' ) ,
470
+ onTapEnd : logger ( 'end' ) ,
471
+ onTapCancel : logger ( 'cancel' ) ,
472
+ } ) ;
460
473
return < div ref = { ref } listeners = { listener } /> ;
461
474
} ;
462
475
ReactDOM . render ( < Component /> , container ) ;
476
+ document . elementFromPoint = ( ) => ref . current ;
463
477
} ) ;
464
478
465
479
testWithPointerType ( 'pointer down/up' , pointerType => {
466
480
const target = createEventTarget ( ref . current ) ;
467
481
target . pointerdown ( { pointerType} ) ;
468
482
expect ( onTapChange ) . toHaveBeenCalledTimes ( 1 ) ;
469
483
expect ( onTapChange ) . toHaveBeenCalledWith ( true ) ;
470
- target . pointerup ( { pointerType} ) ;
484
+ target . pointerup ( { pointerType, x : 0 , y : 0 } ) ;
471
485
expect ( onTapChange ) . toHaveBeenCalledTimes ( 2 ) ;
472
486
expect ( onTapChange ) . toHaveBeenCalledWith ( false ) ;
487
+ expect ( eventsLog ) . toEqual ( [ 'start' , 'change' , 'change' , 'end' ] ) ;
473
488
} ) ;
474
489
475
490
testWithPointerType ( 'pointer cancel' , pointerType => {
@@ -480,6 +495,7 @@ describeWithPointerEvent('Tap responder', hasPointerEvents => {
480
495
target . pointercancel ( { pointerType} ) ;
481
496
expect ( onTapChange ) . toHaveBeenCalledTimes ( 2 ) ;
482
497
expect ( onTapChange ) . toHaveBeenCalledWith ( false ) ;
498
+ expect ( eventsLog ) . toEqual ( [ 'start' , 'change' , 'change' , 'cancel' ] ) ;
483
499
} ) ;
484
500
485
501
testWithPointerType ( 'pointer move outside target' , pointerType => {
0 commit comments