@@ -212,7 +212,7 @@ describeWithPointerEvent('Tap responder', hasPointerEvents => {
212212 const buttons = buttonsType . auxiliary ;
213213 const target = createEventTarget ( ref . current ) ;
214214 target . pointerdown ( { buttons, pointerType} ) ;
215- target . pointerup ( { pointerType} ) ;
215+ target . pointerup ( { buttons , pointerType} ) ;
216216 expect ( onAuxiliaryTap ) . toHaveBeenCalledTimes ( 1 ) ;
217217 } ) ;
218218
@@ -221,7 +221,7 @@ describeWithPointerEvent('Tap responder', hasPointerEvents => {
221221 const buttons = buttonsType . primary ;
222222 const target = createEventTarget ( ref . current ) ;
223223 target . pointerdown ( { buttons, pointerType} ) ;
224- target . pointerup ( { metaKey : true , pointerType} ) ;
224+ target . pointerup ( { buttons , metaKey : true , pointerType} ) ;
225225 expect ( onAuxiliaryTap ) . toHaveBeenCalledTimes ( 1 ) ;
226226 } ) ;
227227 } ) ;
@@ -284,7 +284,7 @@ describeWithPointerEvent('Tap responder', hasPointerEvents => {
284284 ) ;
285285 } ) ;
286286
287- test ( 'second pointer down ' , ( ) => {
287+ test ( 'second pointer on target ' , ( ) => {
288288 const pointerType = 'touch' ;
289289 const target = createEventTarget ( ref . current ) ;
290290 const buttons = buttonsType . primary ;
@@ -294,10 +294,7 @@ describeWithPointerEvent('Tap responder', hasPointerEvents => {
294294 target . pointerdown ( { buttons, pointerId : 2 , pointerType} ) ;
295295 } else {
296296 // TouchEvents
297- target . pointerdown ( [
298- { pointerId : 1 , pointerType} ,
299- { pointerId : 2 , pointerType} ,
300- ] ) ;
297+ target . pointerdown ( [ { pointerId : 1 } , { pointerId : 2 } ] ) ;
301298 }
302299 expect ( onTapStart ) . toHaveBeenCalledTimes ( 1 ) ;
303300 } ) ;
@@ -349,8 +346,10 @@ describeWithPointerEvent('Tap responder', hasPointerEvents => {
349346
350347 testWithPointerType ( 'pointer up' , pointerType => {
351348 const target = createEventTarget ( ref . current ) ;
352- target . pointerdown ( { buttons : buttonsType . primary , pointerType} ) ;
349+ const buttons = buttonsType . primary ;
350+ target . pointerdown ( { buttons, pointerType} ) ;
353351 target . pointerup ( {
352+ buttons,
354353 pageX : 10 ,
355354 pageY : 10 ,
356355 pointerType,
@@ -420,18 +419,40 @@ describeWithPointerEvent('Tap responder', hasPointerEvents => {
420419 expect ( onTapEnd ) . not . toBeCalled ( ) ;
421420 } ) ;
422421
422+ if ( hasPointerEvents ) {
423+ test ( 'second pointer up off target' , ( ) => {
424+ const pointerType = 'touch' ;
425+ const target = createEventTarget ( ref . current ) ;
426+ const offTarget = createEventTarget ( container ) ;
427+ const buttons = buttonsType . primary ;
428+
429+ target . pointerdown ( { buttons, pointerId : 1 , pointerType} ) ;
430+ offTarget . pointerdown ( { buttons, pointerId : 2 , pointerType} ) ;
431+ offTarget . pointerup ( {
432+ buttons,
433+ pageX : 10 ,
434+ pageY : 10 ,
435+ pointerId : 2 ,
436+ pointerType,
437+ x : 10 ,
438+ y : 10 ,
439+ } ) ;
440+ expect ( onTapEnd ) . toHaveBeenCalledTimes ( 0 ) ;
441+ } ) ;
442+ }
443+
423444 test ( 'ignored buttons and modifiers' , ( ) => {
424445 const target = createEventTarget ( ref . current ) ;
425446 const primary = buttonsType . primary ;
426447 // right-click
427448 target . pointerdown ( { buttons : buttonsType . secondary } ) ;
428- target . pointerup ( ) ;
449+ target . pointerup ( { buttons : buttonsType . secondary } ) ;
429450 // middle-click
430451 target . pointerdown ( { buttons : buttonsType . auxiliary } ) ;
431- target . pointerup ( ) ;
452+ target . pointerup ( { buttons : buttonsType . auxiliary } ) ;
432453 // pen eraser
433454 target . pointerdown ( { buttons : buttonsType . eraser } ) ;
434- target . pointerup ( ) ;
455+ target . pointerup ( { buttons : buttonsType . eraser } ) ;
435456 // alt-click
436457 target . pointerdown ( { buttons : primary } ) ;
437458 target . pointerup ( { altKey : true } ) ;
@@ -533,6 +554,21 @@ describeWithPointerEvent('Tap responder', hasPointerEvents => {
533554 // No extra 'onTapUpdate' calls when the pointer is outside the target
534555 expect ( onTapUpdate ) . toHaveBeenCalledTimes ( 1 ) ;
535556 } ) ;
557+
558+ if ( hasPointerEvents ) {
559+ test ( 'second pointer off target' , ( ) => {
560+ const pointerType = 'touch' ;
561+ const target = createEventTarget ( ref . current ) ;
562+ const offTarget = createEventTarget ( container ) ;
563+ const buttons = buttonsType . primary ;
564+ target . pointerdown ( { buttons, pointerId : 1 , pointerType} ) ;
565+ offTarget . pointerdown ( { buttons, pointerId : 2 , pointerType} ) ;
566+ target . pointermove ( { pointerId : 1 , pointerType, x : 10 , y : 10 } ) ;
567+ expect ( onTapUpdate ) . toHaveBeenCalledTimes ( 1 ) ;
568+ offTarget . pointermove ( { pointerId : 2 , pointerType, x : 10 , y : 10 } ) ;
569+ expect ( onTapUpdate ) . toHaveBeenCalledTimes ( 1 ) ;
570+ } ) ;
571+ }
536572 } ) ;
537573
538574 describe ( 'onTapChange' , ( ) => {
@@ -652,6 +688,32 @@ describeWithPointerEvent('Tap responder', hasPointerEvents => {
652688 expect ( onTapUpdate ) . not . toBeCalled ( ) ;
653689 } ) ;
654690
691+ test ( 'second pointer on target' , ( ) => {
692+ const pointerType = 'touch' ;
693+ const target = createEventTarget ( ref . current ) ;
694+ const buttons = buttonsType . primary ;
695+ target . pointerdown ( { buttons, pointerId : 1 , pointerType} ) ;
696+ if ( hasPointerEvents ) {
697+ target . pointerdown ( { buttons, pointerId : 2 , pointerType} ) ;
698+ } else {
699+ // TouchEvents
700+ target . pointerdown ( [ { pointerId : 1 } , { pointerId : 2 } ] ) ;
701+ }
702+ expect ( onTapCancel ) . toHaveBeenCalledTimes ( 1 ) ;
703+ } ) ;
704+
705+ if ( hasPointerEvents ) {
706+ test ( 'second pointer off target' , ( ) => {
707+ const pointerType = 'touch' ;
708+ const target = createEventTarget ( ref . current ) ;
709+ const offTarget = createEventTarget ( container ) ;
710+ const buttons = buttonsType . primary ;
711+ target . pointerdown ( { buttons, pointerId : 1 , pointerType} ) ;
712+ offTarget . pointerdown ( { buttons, pointerId : 2 , pointerType} ) ;
713+ expect ( onTapCancel ) . toHaveBeenCalledTimes ( 0 ) ;
714+ } ) ;
715+ }
716+
655717 testWithPointerType ( 'pointer move outside target' , pointerType => {
656718 const downTarget = createEventTarget ( ref . current ) ;
657719 const upTarget = createEventTarget ( container ) ;
0 commit comments