@@ -212,7 +212,7 @@ describeWithPointerEvent('Tap responder', hasPointerEvents => {
212
212
const buttons = buttonsType . auxiliary ;
213
213
const target = createEventTarget ( ref . current ) ;
214
214
target . pointerdown ( { buttons, pointerType} ) ;
215
- target . pointerup ( { pointerType} ) ;
215
+ target . pointerup ( { buttons , pointerType} ) ;
216
216
expect ( onAuxiliaryTap ) . toHaveBeenCalledTimes ( 1 ) ;
217
217
} ) ;
218
218
@@ -221,7 +221,7 @@ describeWithPointerEvent('Tap responder', hasPointerEvents => {
221
221
const buttons = buttonsType . primary ;
222
222
const target = createEventTarget ( ref . current ) ;
223
223
target . pointerdown ( { buttons, pointerType} ) ;
224
- target . pointerup ( { metaKey : true , pointerType} ) ;
224
+ target . pointerup ( { buttons , metaKey : true , pointerType} ) ;
225
225
expect ( onAuxiliaryTap ) . toHaveBeenCalledTimes ( 1 ) ;
226
226
} ) ;
227
227
} ) ;
@@ -284,7 +284,7 @@ describeWithPointerEvent('Tap responder', hasPointerEvents => {
284
284
) ;
285
285
} ) ;
286
286
287
- test ( 'second pointer down ' , ( ) => {
287
+ test ( 'second pointer on target ' , ( ) => {
288
288
const pointerType = 'touch' ;
289
289
const target = createEventTarget ( ref . current ) ;
290
290
const buttons = buttonsType . primary ;
@@ -294,10 +294,7 @@ describeWithPointerEvent('Tap responder', hasPointerEvents => {
294
294
target . pointerdown ( { buttons, pointerId : 2 , pointerType} ) ;
295
295
} else {
296
296
// TouchEvents
297
- target . pointerdown ( [
298
- { pointerId : 1 , pointerType} ,
299
- { pointerId : 2 , pointerType} ,
300
- ] ) ;
297
+ target . pointerdown ( [ { pointerId : 1 } , { pointerId : 2 } ] ) ;
301
298
}
302
299
expect ( onTapStart ) . toHaveBeenCalledTimes ( 1 ) ;
303
300
} ) ;
@@ -349,8 +346,10 @@ describeWithPointerEvent('Tap responder', hasPointerEvents => {
349
346
350
347
testWithPointerType ( 'pointer up' , pointerType => {
351
348
const target = createEventTarget ( ref . current ) ;
352
- target . pointerdown ( { buttons : buttonsType . primary , pointerType} ) ;
349
+ const buttons = buttonsType . primary ;
350
+ target . pointerdown ( { buttons, pointerType} ) ;
353
351
target . pointerup ( {
352
+ buttons,
354
353
pageX : 10 ,
355
354
pageY : 10 ,
356
355
pointerType,
@@ -420,18 +419,40 @@ describeWithPointerEvent('Tap responder', hasPointerEvents => {
420
419
expect ( onTapEnd ) . not . toBeCalled ( ) ;
421
420
} ) ;
422
421
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
+
423
444
test ( 'ignored buttons and modifiers' , ( ) => {
424
445
const target = createEventTarget ( ref . current ) ;
425
446
const primary = buttonsType . primary ;
426
447
// right-click
427
448
target . pointerdown ( { buttons : buttonsType . secondary } ) ;
428
- target . pointerup ( ) ;
449
+ target . pointerup ( { buttons : buttonsType . secondary } ) ;
429
450
// middle-click
430
451
target . pointerdown ( { buttons : buttonsType . auxiliary } ) ;
431
- target . pointerup ( ) ;
452
+ target . pointerup ( { buttons : buttonsType . auxiliary } ) ;
432
453
// pen eraser
433
454
target . pointerdown ( { buttons : buttonsType . eraser } ) ;
434
- target . pointerup ( ) ;
455
+ target . pointerup ( { buttons : buttonsType . eraser } ) ;
435
456
// alt-click
436
457
target . pointerdown ( { buttons : primary } ) ;
437
458
target . pointerup ( { altKey : true } ) ;
@@ -533,6 +554,21 @@ describeWithPointerEvent('Tap responder', hasPointerEvents => {
533
554
// No extra 'onTapUpdate' calls when the pointer is outside the target
534
555
expect ( onTapUpdate ) . toHaveBeenCalledTimes ( 1 ) ;
535
556
} ) ;
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
+ }
536
572
} ) ;
537
573
538
574
describe ( 'onTapChange' , ( ) => {
@@ -652,6 +688,32 @@ describeWithPointerEvent('Tap responder', hasPointerEvents => {
652
688
expect ( onTapUpdate ) . not . toBeCalled ( ) ;
653
689
} ) ;
654
690
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
+
655
717
testWithPointerType ( 'pointer move outside target' , pointerType => {
656
718
const downTarget = createEventTarget ( ref . current ) ;
657
719
const upTarget = createEventTarget ( container ) ;
0 commit comments