@@ -47,8 +47,8 @@ function tapAndMoveOutside({
4747// NOTE: this assumes the PointerEvent implementation calls
4848// 'releasePointerCapture' for touch pointers
4949if ( ! hasPointerEvents && pointerType === 'touch' ) {
50- downTarget . pointermove ( { pointerType, ...coordinatesOutside } ) ;
5150document . elementFromPoint = ( ) => upTarget . node ;
51+ downTarget . pointermove ( { pointerType, ...coordinatesOutside } ) ;
5252} else {
5353upTarget . pointermove ( { pointerType, ...coordinatesOutside } ) ;
5454}
@@ -450,26 +450,41 @@ describeWithPointerEvent('Tap responder', hasPointerEvents => {
450450} ) ;
451451
452452describe ( 'onTapChange' , ( ) => {
453- let onTapChange , ref ;
453+ let eventsLog , onTapChange , ref ;
454+
455+ const logger = msg => ( ) => {
456+ eventsLog . push ( msg ) ;
457+ } ;
454458
455459beforeEach ( ( ) => {
460+ eventsLog = [ ] ;
456461onTapChange = jest . fn ( ) ;
457462ref = React . createRef ( ) ;
458463const 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+ } ) ;
460473return < div ref = { ref } listeners = { listener } /> ;
461474} ;
462475ReactDOM . render ( < Component /> , container ) ;
476+ document . elementFromPoint = ( ) => ref . current ;
463477} ) ;
464478
465479testWithPointerType ( 'pointer down/up' , pointerType => {
466480const target = createEventTarget ( ref . current ) ;
467481target . pointerdown ( { pointerType} ) ;
468482expect ( onTapChange ) . toHaveBeenCalledTimes ( 1 ) ;
469483expect ( onTapChange ) . toHaveBeenCalledWith ( true ) ;
470- target . pointerup ( { pointerType} ) ;
484+ target . pointerup ( { pointerType, x : 0 , y : 0 } ) ;
471485expect ( onTapChange ) . toHaveBeenCalledTimes ( 2 ) ;
472486expect ( onTapChange ) . toHaveBeenCalledWith ( false ) ;
487+ expect ( eventsLog ) . toEqual ( [ 'start' , 'change' , 'change' , 'end' ] ) ;
473488} ) ;
474489
475490testWithPointerType ( 'pointer cancel' , pointerType => {
@@ -480,6 +495,7 @@ describeWithPointerEvent('Tap responder', hasPointerEvents => {
480495target . pointercancel ( { pointerType} ) ;
481496expect ( onTapChange ) . toHaveBeenCalledTimes ( 2 ) ;
482497expect ( onTapChange ) . toHaveBeenCalledWith ( false ) ;
498+ expect ( eventsLog ) . toEqual ( [ 'start' , 'change' , 'change' , 'cancel' ] ) ;
483499} ) ;
484500
485501testWithPointerType ( 'pointer move outside target' , pointerType => {
0 commit comments