package Ġit . se phi ro th . android . library . ui gest ures Ċ Ċ import Ġandroid . os . System Clock Ċ import Ġandroid . view . Motion Event Ċ import Ġandroidx . test . core . view . Pointer Coords Builder Ċ import Ġandroidx . test . espress o . Esp ress o . on View Ċ import Ġandroidx . test . espress o . action . View Actions Ċ import Ġandroidx . test . espress o . matcher . View Matchers Ċ import Ġandroidx . test . filters . Medium Test Ċ import Ġit . se phi ro th . android . library . ui gest ures . U IG est ure Recognizer . State Ċ import Ġorg . junit . Assert .* Ċ import Ġorg . junit . Fix Method Order Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ import Ġorg . junit . runners . Method Sort ers Ċ import Ġtim ber . log . Tim ber Ċ import Ġjava . util . concurrent . Count DownLatch Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ @ RunWith ( android x . test . ext . junit . runners . Android JUnit 4 :: class ) Ċ @ Fix Method Order ( Method Sort ers . NAME _ ASC ENDING ) Ċ @ Medium Test Ċ class ĠTest Tap Gesture Ġ: ĠTest Base Class () Ġ{ ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest 0 1 Tap () Ġ{ ĊĠĠĠĠĠĠĠ ĠsetTitle (" Tap ") ĊĠĠĠĠĠĠĠ Ġval Ġl atch Ġ= ĠCount DownLatch ( 1 ) ĊĊĠĠĠĠĠĠĠ Ġdelegate . clear () ĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , Ġdelegate . size ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġre cognizer Ġ= ĠUIT ap Gesture Recognizer ( context ) ĊĠĠĠĠĠĠĠ Ġre cognizer . tag Ġ= Ġ" tap " ĊĠĠĠĠĠĠĠ Ġre cognizer . t aps Required Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġre cognizer . to uches Required Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġre cognizer . tap Timeout Ġ= ĠTEST _ T AP _ TIMEOUT ĊĊĠĠĠĠĠĠĠ Ġre cognizer . action Listener Ġ= Ġ{ Ġit Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . action Listener . invoke ( it ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( State . Ended , Ġit . state ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġit . numberOf Tou ches ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġl atch . count Down () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdelegate . add Gesture Recognizer ( re cognizer ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġdelegate . size ()) ĊĠĠĠĠĠĠĠ ĠassertTrue ( delegate . isEnabled ) ĊĊĠĠĠĠĠĠĠ Ġon View ( View Matchers . with Id ( R . id . activity _ main )). perform ( View Actions . click ()) ĊĠĠĠĠĠĠĠ Ġl atch . await ( 2 , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , Ġl atch . count ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest 0 2 Tap Not Enabled () Ġ{ ĊĠĠĠĠĠĠĠ ĠsetTitle (" Tap ĠDisabled ") ĊĠĠĠĠĠĠĠ Ġdelegate . clear () ĊĊĠĠĠĠĠĠĠ Ġval Ġl atch Ġ= ĠCount DownLatch ( 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġre cognizer Ġ= ĠUIT ap Gesture Recognizer ( context ) ĊĠĠĠĠĠĠĠ Ġre cognizer . tag Ġ= Ġ" tap " ĊĠĠĠĠĠĠĠ Ġre cognizer . t aps Required Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġre cognizer . to uches Required Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġre cognizer . tap Timeout Ġ= ĠTEST _ T AP _ TIMEOUT ĊĊĠĠĠĠĠĠĠ Ġre cognizer . action Listener Ġ= Ġ{ Ġit Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . action Listener . invoke ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfail () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġl atch . count Down () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdelegate . add Gesture Recognizer ( re cognizer ) ĊĊĠĠĠĠĠĠĠ Ġre cognizer . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ ĠassertFalse ( re cognizer . isEnabled ) ĊĊĠĠĠĠĠĠĠ Ġon View ( View Matchers . with Id ( R . id . activity _ main )). perform ( View Actions . click ()) ĊĠĠĠĠĠĠĠ Ġl atch . await ( 2 , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġl atch . count ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest 0 3 Tap Delegate Not Enabled () Ġ{ ĊĠĠĠĠĠĠĠ ĠsetTitle (" Delegate ĠDisabled ") ĊĊĠĠĠĠĠĠĠ Ġdelegate . clear () ĊĊĠĠĠĠĠĠĠ Ġval Ġl atch Ġ= ĠCount DownLatch ( 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġre cognizer Ġ= ĠUIT ap Gesture Recognizer ( context ) ĊĠĠĠĠĠĠĠ Ġre cognizer . tag Ġ= Ġ" tap " ĊĠĠĠĠĠĠĠ Ġre cognizer . t aps Required Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġre cognizer . to uches Required Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġre cognizer . tap Timeout Ġ= ĠTEST _ T AP _ TIMEOUT ĊĊĠĠĠĠĠĠĠ Ġre cognizer . action Listener Ġ= Ġ{ Ġit Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . action Listener . invoke ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfail () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġl atch . count Down () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdelegate . add Gesture Recognizer ( re cognizer ) ĊĊĠĠĠĠĠĠĠ Ġdelegate . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ ĠassertFalse ( delegate . isEnabled ) ĊĊĠĠĠĠĠĠĠ Ġon View ( View Matchers . with Id ( R . id . activity _ main )). perform ( View Actions . click ()) ĊĠĠĠĠĠĠĠ Ġl atch . await ( 2 , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġl atch . count ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest 0 4 Single Tap Fail Using 2 F ingers () Ġ{ ĊĠĠĠĠĠĠĠ ĠsetTitle (" Tap ") ĊĠĠĠĠĠĠĠ Ġdelegate . clear () ĊĊĠĠĠĠĠĠĠ Ġval Ġl atch Ġ= ĠCount DownLatch ( 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġre cognizer Ġ= ĠUIT ap Gesture Recognizer ( context ) ĊĠĠĠĠĠĠĠ Ġre cognizer . tap Timeout Ġ= ĠTEST _ T AP _ TIMEOUT ĊĠĠĠĠĠĠĠ Ġre cognizer . tag Ġ= Ġ" tap " ĊĠĠĠĠĠĠĠ Ġre cognizer . t aps Required Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġre cognizer . to uches Required Ġ= Ġ 2 ĊĊĠĠĠĠĠĠĠ Ġre cognizer . action Listener Ġ= Ġ{ Ġit Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . action Listener . invoke ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfail () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġl atch . count Down () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdelegate . add Gesture Recognizer ( re cognizer ) ĊĠĠĠĠĠĠĠ Ġon View ( View Matchers . with Id ( R . id . activity _ main )). perform ( View Actions . click ()) ĊĠĠĠĠĠĠĠ Ġl atch . await ( 2 , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġl atch . count ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest 0 5 Tap Multiple () Ġ{ ĊĠĠĠĠĠĠĠ ĠsetTitle (" Tap ĠT ap ") ĊĠĠĠĠĠĠĠ Ġval Ġl atch Ġ= ĠCount DownLatch ( 1 ) ĊĊĠĠĠĠĠĠĠ Ġdelegate . clear () ĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , Ġdelegate . size ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġre cognizer 1 Ġ= ĠUIT ap Gesture Recognizer ( context ) ĊĠĠĠĠĠĠĠ Ġre cognizer 1 . tap Timeout Ġ= ĠTEST _ T AP _ TIMEOUT ĊĠĠĠĠĠĠĠ Ġre cognizer 1 . tag Ġ= Ġ" tap - 1 " ĊĊĠĠĠĠĠĠĠ Ġval Ġre cognizer 2 Ġ= ĠUIT ap Gesture Recognizer ( context ) ĊĠĠĠĠĠĠĠ Ġre cognizer 2 . tap Timeout Ġ= ĠTEST _ T AP _ TIMEOUT ĊĠĠĠĠĠĠĠ Ġre cognizer 2 . tag Ġ= Ġ" tap - 2 " ĊĊĠĠĠĠĠĠĠ Ġre cognizer 1 . action Listener Ġ= Ġ{ Ġit Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . action Listener . invoke ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( State . Ended , Ġit . state ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġl atch . count Down () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġre cognizer 2 . action Listener Ġ= Ġ{ Ġit Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfail () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdelegate . add Gesture Recognizer ( re cognizer 1 ) ĊĠĠĠĠĠĠĠ Ġdelegate . add Gesture Recognizer ( re cognizer 2 ) ĊĊĠĠĠĠĠĠĠ Ġdelegate . should Recognize Sim ultaneous ly With Gesture Recognizer Ġ= Ġ{ Ġit 1 : ĠU IG est ure Recognizer , Ġit 2 : ĠU IG est ure Recognizer Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" it 1 Ġ= Ġ$ it 1 , Ġit 2 Ġ= Ġ$ it 2 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġon View ( View Matchers . with Id ( R . id . activity _ main )). perform ( View Actions . click ()) ĊĊĠĠĠĠĠĠĠ Ġl atch . await ( 2 , ĠTimeUnit . SECONDS ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , Ġl atch . count ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest 0 6 Tap Multiple 2 () Ġ{ ĊĠĠĠĠĠĠĠ ĠsetTitle (" Tap ĠT ap ") ĊĠĠĠĠĠĠĠ Ġval Ġl atch Ġ= ĠCount DownLatch ( 2 ) ĊĊĠĠĠĠĠĠĠ Ġdelegate . clear () ĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , Ġdelegate . size ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġre cognizer 1 Ġ= ĠUIT ap Gesture Recognizer ( context ) ĊĠĠĠĠĠĠĠ Ġre cognizer 1 . tap Timeout Ġ= ĠTEST _ T AP _ TIMEOUT ĊĠĠĠĠĠĠĠ Ġre cognizer 1 . tag Ġ= Ġ" tap - 1 " ĊĊĠĠĠĠĠĠĠ Ġval Ġre cognizer 2 Ġ= ĠUIT ap Gesture Recognizer ( context ) ĊĠĠĠĠĠĠĠ Ġre cognizer 2 . tap Timeout Ġ= ĠTEST _ T AP _ TIMEOUT ĊĠĠĠĠĠĠĠ Ġre cognizer 2 . tag Ġ= Ġ" tap - 2 " ĊĊĠĠĠĠĠĠĠ Ġre cognizer 1 . action Listener Ġ= Ġ{ Ġit Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . action Listener . invoke ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( State . Ended , Ġit . state ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġl atch . count Down () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġre cognizer 2 . action Listener Ġ= Ġ{ Ġit Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . action Listener . invoke ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( State . Ended , Ġit . state ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġl atch . count Down () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdelegate . add Gesture Recognizer ( re cognizer 1 ) ĊĠĠĠĠĠĠĠ Ġdelegate . add Gesture Recognizer ( re cognizer 2 ) ĊĊĊĠĠĠĠĠĠĠ Ġon View ( View Matchers . with Id ( R . id . activity _ main )). perform ( View Actions . click ()) ĊĊĠĠĠĠĠĠĠ Ġl atch . await ( 2 , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , Ġl atch . count ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest 0 7 Single Tap Fail Should Not Begin () Ġ{ ĊĠĠĠĠĠĠĠ ĠsetTitle (" Tap ") ĊĠĠĠĠĠĠĠ Ġdelegate . clear () ĊĊĠĠĠĠĠĠĠ Ġval Ġl atch Ġ= ĠCount DownLatch ( 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġre cognizer Ġ= ĠUIT ap Gesture Recognizer ( context ) ĊĠĠĠĠĠĠĠ Ġre cognizer . tap Timeout Ġ= ĠTEST _ T AP _ TIMEOUT ĊĠĠĠĠĠĠĠ Ġre cognizer . tag Ġ= Ġ" tap " ĊĠĠĠĠĠĠĠ Ġre cognizer . t aps Required Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġre cognizer . to uches Required Ġ= Ġ 1 ĊĊĠĠĠĠĠĠĠ Ġre cognizer . action Listener Ġ= Ġ{ Ġit Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . action Listener . invoke ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfail () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġl atch . count Down () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdelegate . add Gesture Recognizer ( re cognizer ) ĊĠĠĠĠĠĠĠ Ġdelegate . should Begin Ġ= Ġ{ Ġfalse Ġ} ĊĊĠĠĠĠĠĠĠ Ġon View ( View Matchers . with Id ( R . id . activity _ main )). perform ( View Actions . click ()) ĊĠĠĠĠĠĠĠ Ġl atch . await ( 2 , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġl atch . count ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest 0 8 Single Tap Fail Should Not Receive Touch () Ġ{ ĊĠĠĠĠĠĠĠ ĠsetTitle (" Tap ") ĊĠĠĠĠĠĠĠ Ġdelegate . clear () ĊĊĠĠĠĠĠĠĠ Ġval Ġl atch Ġ= ĠCount DownLatch ( 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġre cognizer Ġ= ĠUIT ap Gesture Recognizer ( context ) ĊĠĠĠĠĠĠĠ Ġre cognizer . tag Ġ= Ġ" tap " ĊĠĠĠĠĠĠĠ Ġre cognizer . t aps Required Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġre cognizer . to uches Required Ġ= Ġ 1 ĊĊĠĠĠĠĠĠĠ Ġre cognizer . action Listener Ġ= Ġ{ Ġit Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . action Listener . invoke ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfail () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġl atch . count Down () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdelegate . add Gesture Recognizer ( re cognizer ) ĊĠĠĠĠĠĠĠ Ġdelegate . should Receive Touch Ġ= Ġ{ Ġfalse Ġ} ĊĊĠĠĠĠĠĠĠ Ġon View ( View Matchers . with Id ( R . id . activity _ main )). perform ( View Actions . click ()) ĊĠĠĠĠĠĠĠ Ġl atch . await ( 2 , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġl atch . count ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest 0 9 Double Tap () Ġ{ ĊĠĠĠĠĠĠĠ ĠsetTitle (" Double ĠT ap ") ĊĠĠĠĠĠĠĠ Ġval Ġl atch Ġ= ĠCount DownLatch ( 1 ) ĊĊĠĠĠĠĠĠĠ Ġdelegate . clear () ĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , Ġdelegate . size ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġre cognizer Ġ= ĠUIT ap Gesture Recognizer ( context ) ĊĠĠĠĠĠĠĠ Ġre cognizer . tag Ġ= Ġ" double - tap " ĊĠĠĠĠĠĠĠ Ġre cognizer . tap Timeout Ġ= ĠTEST _ T AP _ TIMEOUT ĊĠĠĠĠĠĠĠ Ġre cognizer . t aps Required Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġre cognizer . to uches Required Ġ= Ġ 1 ĊĊĠĠĠĠĠĠĠ Ġre cognizer . action Listener Ġ= Ġ{ Ġit Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . action Listener . invoke ( it ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( State . Ended , Ġit . state ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġl atch . count Down () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdelegate . add Gesture Recognizer ( re cognizer ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġdelegate . size ()) ĊĠĠĠĠĠĠĠ ĠassertTrue ( delegate . isEnabled ) ĊĊĠĠĠĠĠĠĠ Ġon View ( View Matchers . with Id ( R . id . activity _ main )). perform ( View Actions . double Click ()) ĊĠĠĠĠĠĠĠ Ġl atch . await ( 2 , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , Ġl atch . count ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest 1 0 Double Tap Too Long () Ġ{ ĊĠĠĠĠĠĠĠ ĠsetTitle (" Double ĠT ap ") ĊĠĠĠĠĠĠĠ Ġval Ġl atch Ġ= ĠCount DownLatch ( 1 ) ĊĊĠĠĠĠĠĠĠ Ġdelegate . clear () ĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , Ġdelegate . size ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġbounds Ġ= Ġmain View . visible Bounds ĊĠĠĠĠĠĠĠ Ġval Ġre cognizer Ġ= ĠUIT ap Gesture Recognizer ( context ) ĊĠĠĠĠĠĠĠ Ġre cognizer . tag Ġ= Ġ" double - tap " ĊĠĠĠĠĠĠĠ Ġre cognizer . t aps Required Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġre cognizer . to uches Required Ġ= Ġ 1 ĊĊĠĠĠĠĠĠĠ Ġre cognizer . action Listener Ġ= Ġ{ Ġit Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . action Listener . invoke ( it ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfail (" unexpected ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġl atch . count Down () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdelegate . add Gesture Recognizer ( re cognizer ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġdelegate . size ()) ĊĠĠĠĠĠĠĠ ĠassertTrue ( delegate . isEnabled ) ĊĊĠĠĠĠĠĠĠ Ġinteraction . touch Down ( bounds . center X (), Ġbounds . center Y ()) ĊĠĠĠĠĠĠĠ ĠSystem Clock . sleep ( Interaction . MOT ION _ EVENT _ IN JECTION _ DELAY _ M ILL IS . to Long ()) ĊĠĠĠĠĠĠĠ Ġinteraction . touch Up ( bounds . center X (), Ġbounds . center Y ()) ĊĠĠĠĠĠĠĠ ĠSystem Clock . sleep ( re cognizer . double Tap Timeout Ġ* Ġ 2 ) ĊĊĠĠĠĠĠĠĠ Ġinteraction . touch Down ( bounds . center X (), Ġbounds . center Y ()) ĊĠĠĠĠĠĠĠ ĠSystem Clock . sleep ( Interaction . MOT ION _ EVENT _ IN JECTION _ DELAY _ M ILL IS . to Long ()) ĊĠĠĠĠĠĠĠ Ġinteraction . touch Up ( bounds . center X (), Ġbounds . center Y ()) ĊĊĠĠĠĠĠĠĠ Ġl atch . await ( 2 , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġl atch . count ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest 1 1 Tap Coordinates () Ġ{ ĊĠĠĠĠĠĠĠ ĠsetTitle (" Tap ") ĊĠĠĠĠĠĠĠ Ġval Ġl atch Ġ= ĠCount DownLatch ( 1 ) ĊĊĠĠĠĠĠĠĠ Ġdelegate . clear () ĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , Ġdelegate . size ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġbounds Ġ= Ġmain View . visible Bounds ĊĊĠĠĠĠĠĠĠ Ġval Ġre cognizer Ġ= ĠUIT ap Gesture Recognizer ( context ) ĊĠĠĠĠĠĠĠ Ġre cognizer . tag Ġ= Ġ" tap " ĊĠĠĠĠĠĠĠ Ġre cognizer . tap Timeout Ġ= ĠTEST _ T AP _ TIMEOUT ĊĠĠĠĠĠĠĠ Ġre cognizer . t aps Required Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġre cognizer . to uches Required Ġ= Ġ 1 ĊĊĠĠĠĠĠĠĠ Ġre cognizer . action Listener Ġ= Ġ{ Ġit Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . action Listener . invoke ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( State . Ended , Ġit . state ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( bounds . center X (). toFloat (), Ġbounds . left Ġ+ Ġit . down Location X ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( bounds . center Y (). toFloat (), Ġbounds . top Ġ+ Ġit . down Location Y ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġl atch . count Down () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdelegate . add Gesture Recognizer ( re cognizer ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġdelegate . size ()) ĊĊĠĠĠĠĠĠĠ ĠTim ber . v (" bounds : Ġ$ bounds ") ĊĠĠĠĠĠĠĠ ĠTim ber . v (" bounds Ġcenter : Ġ${ bounds . center X ()}, Ġ${ bounds . center Y () }") ĊĊĠĠĠĠĠĠĠ Ġinteraction . click No Sync ( bounds . center X (), Ġbounds . center Y ()) ĊĠĠĠĠĠĠĠ Ġl atch . await ( 2 , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , Ġl atch . count ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest 1 2 Tap Too Long () Ġ{ ĊĠĠĠĠĠĠĠ ĠsetTitle (" Tap ĠFail ") ĊĠĠĠĠĠĠĠ Ġval Ġl atch Ġ= ĠCount DownLatch ( 1 ) ĊĠĠĠĠĠĠĠ Ġdelegate . clear () ĊĠĠĠĠĠĠĠ Ġval Ġre cognizer Ġ= ĠUIT ap Gesture Recognizer ( context ) ĊĠĠĠĠĠĠĠ Ġre cognizer . tag Ġ= Ġ" tap " ĊĠĠĠĠĠĠĠ Ġre cognizer . t aps Required Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġre cognizer . to uches Required Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġre cognizer . tap Timeout Ġ= ĠTEST _ T AP _ TIMEOUT ĊĊĠĠĠĠĠĠĠ Ġre cognizer . action Listener Ġ= Ġ{ Ġit Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . action Listener . invoke ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfail (" action Listener Ġunexpected ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġl atch . count Down () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdelegate . add Gesture Recognizer ( re cognizer ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġdelegate . size ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġbounds Ġ= Ġmain View . visible Bounds ĊĠĠĠĠĠĠĠ Ġinteraction . click No Sync ( bounds . center X (), Ġbounds . center Y (), Ġre cognizer . tap Timeout Ġ* Ġ 2 ) ĊĊĠĠĠĠĠĠĠ Ġl atch . await ( 2 , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġl atch . count ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest 1 3 Tap Moved Should Fail () Ġ{ ĊĠĠĠĠĠĠĠ ĠsetTitle (" Tap ĠFail ĠMove ") ĊĠĠĠĠĠĠĠ Ġval Ġl atch Ġ= ĠCount DownLatch ( 1 ) ĊĠĠĠĠĠĠĠ Ġdelegate . clear () ĊĠĠĠĠĠĠĠ Ġval Ġre cognizer Ġ= ĠUIT ap Gesture Recognizer ( context ) ĊĠĠĠĠĠĠĠ Ġre cognizer . tap Timeout Ġ= ĠTEST _ T AP _ TIMEOUT ĊĠĠĠĠĠĠĠ Ġre cognizer . tag Ġ= Ġ" tap " ĊĠĠĠĠĠĠĠ Ġre cognizer . t aps Required Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġre cognizer . to uches Required Ġ= Ġ 1 ĊĊĠĠĠĠĠĠĠ Ġre cognizer . action Listener Ġ= Ġ{ Ġit Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . action Listener . invoke ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfail (" action Listener Ġunexpected ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġl atch . count Down () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdelegate . add Gesture Recognizer ( re cognizer ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġdelegate . size ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġbounds Ġ= Ġmain View . visible Bounds ĊĠĠĠĠĠĠĠ Ġvar Ġx Ġ= Ġbounds . center X () ĊĠĠĠĠĠĠĠ Ġvar Ġy Ġ= Ġbounds . center Y () ĊĊĠĠĠĠĠĠĠ Ġinteraction . touch Down ( x , Ġy ) ĊĠĠĠĠĠĠĠ ĠSystem Clock . sleep ( Interaction . MOT ION _ EVENT _ IN JECTION _ DELAY _ M ILL IS . to Long ()) ĊĊĠĠĠĠĠĠĠ Ġx Ġ+= Ġ( re cognizer . scaled Touch S lop Ġ* Ġ 1 . 5 ). toInt () ĊĊĠĠĠĠĠĠĠ Ġinteraction . touch Move ( x , Ġy ) ĊĠĠĠĠĠĠĠ ĠSystem Clock . sleep ( Interaction . MOT ION _ EVENT _ IN JECTION _ DELAY _ M ILL IS . to Long ()) ĊĊĠĠĠĠĠĠĠ Ġinteraction . touch Up ( x , Ġy ) ĊĊĠĠĠĠĠĠĠ Ġl atch . await ( 2 , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġl atch . count ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest 1 4 Tap Moved Accepted () Ġ{ ĊĠĠĠĠĠĠĠ ĠsetTitle (" Tap ĠMove ") ĊĠĠĠĠĠĠĠ Ġval Ġl atch Ġ= ĠCount DownLatch ( 1 ) ĊĠĠĠĠĠĠĠ Ġdelegate . clear () ĊĠĠĠĠĠĠĠ Ġval Ġre cognizer Ġ= ĠUIT ap Gesture Recognizer ( context ) ĊĠĠĠĠĠĠĠ Ġre cognizer . tap Timeout Ġ= ĠTEST _ T AP _ TIMEOUT ĊĠĠĠĠĠĠĠ Ġre cognizer . tag Ġ= Ġ" tap " ĊĠĠĠĠĠĠĠ Ġre cognizer . t aps Required Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġre cognizer . to uches Required Ġ= Ġ 1 ĊĊĠĠĠĠĠĠĠ Ġre cognizer . action Listener Ġ= Ġ{ Ġit Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . action Listener . invoke ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( State . Ended , Ġit . state ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġl atch . count Down () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdelegate . add Gesture Recognizer ( re cognizer ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġdelegate . size ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġbounds Ġ= Ġmain View . visible Bounds ĊĠĠĠĠĠĠĠ Ġvar Ġx Ġ= Ġbounds . center X () ĊĠĠĠĠĠĠĠ Ġvar Ġy Ġ= Ġbounds . center Y () ĊĊĠĠĠĠĠĠĠ Ġinteraction . touch Down ( x , Ġy ) ĊĊĠĠĠĠĠĠĠ Ġx Ġ+= Ġre cognizer . scaled Touch S lop Ġ/ Ġ 3 ĊĠĠĠĠĠĠĠ Ġy Ġ+= Ġre cognizer . scaled Touch S lop Ġ/ Ġ 3 ĊĊĠĠĠĠĠĠĠ Ġinteraction . touch Move ( x , Ġy ) ĊĠĠĠĠĠĠĠ Ġinteraction . touch Up ( x , Ġy ) ĊĊĠĠĠĠĠĠĠ Ġl atch . await ( 2 , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , Ġl atch . count ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest 1 5 Single Tap 2 F ingers () Ġ{ ĊĠĠĠĠĠĠĠ ĠsetTitle (" Single ĠT ap Ġ 2 Ġf ingers ") ĊĊĠĠĠĠĠĠĠ Ġdelegate . clear () ĊĊĠĠĠĠĠĠĠ Ġval Ġl atch Ġ= ĠCount DownLatch ( 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġbounds Ġ= Ġmain View . visible Bounds ĊĠĠĠĠĠĠĠ Ġval Ġre cognizer Ġ= ĠUIT ap Gesture Recognizer ( context ) ĊĠĠĠĠĠĠĠ Ġre cognizer . tap Timeout Ġ= ĠTEST _ T AP _ TIMEOUT ĊĠĠĠĠĠĠĠ Ġre cognizer . tag Ġ= Ġ" tap " ĊĠĠĠĠĠĠĠ Ġre cognizer . to uches Required Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġre cognizer . t aps Required Ġ= Ġ 1 ĊĊĠĠĠĠĠĠĠ Ġre cognizer . action Listener Ġ= Ġ{ Ġit Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . action Listener . invoke ( it ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( State . Ended , Ġit . state ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġit . numberOf Tou ches ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġl atch . count Down () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdelegate . add Gesture Recognizer ( re cognizer ) ĊĊĠĠĠĠĠĠĠ Ġval Ġarray Ġ= Ġarray ListOf < Array < Motion Event . Pointer Coords >>() ĊĊĠĠĠĠĠĠĠ Ġarray . add ( array Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPointer Coords Builder . newBuilder (). set Coords (( bounds . center X () Ġ- Ġ 1 0 ). toFloat (), Ġ( bounds . center Y () Ġ- Ġ 1 0 ). toFloat ()). build (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPointer Coords Builder . newBuilder (). set Coords (( bounds . center X () Ġ+ Ġ 1 0 ). toFloat (), Ġ( bounds . center Y () Ġ+ Ġ 1 0 ). toFloat ()). build () ĊĠĠĠĠĠĠĠ Ġ)) ĊĊĠĠĠĠĠĠĠ Ġarray . add ( array Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPointer Coords Builder . newBuilder (). set Coords (( bounds . center X () Ġ- Ġ 1 0 ). toFloat (), Ġ( bounds . center Y () Ġ- Ġ 1 0 ). toFloat ()). build (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPointer Coords Builder . newBuilder (). set Coords (( bounds . center X () Ġ+ Ġ 1 0 ). toFloat (), Ġ( bounds . center Y () Ġ+ Ġ 1 0 ). toFloat ()). build () ĊĠĠĠĠĠĠĠ Ġ)) ĊĊĠĠĠĠĠĠĠ Ġinteraction . perform Multi Pointer Gesture ( array . to Typed Array ()) ĊĊĠĠĠĠĠĠĠ Ġl atch . await ( 2 , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , Ġl atch . count ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest 1 6 Single Tap 2 F ingers Should Fail d () Ġ{ ĊĠĠĠĠĠĠĠ ĠsetTitle (" Single ĠT ap Ġ 2 Ġf ingers ") ĊĊĠĠĠĠĠĠĠ Ġdelegate . clear () ĊĊĠĠĠĠĠĠĠ Ġval Ġl atch Ġ= ĠCount DownLatch ( 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġbounds Ġ= Ġmain View . visible Bounds ĊĠĠĠĠĠĠĠ Ġval Ġre cognizer Ġ= ĠUIT ap Gesture Recognizer ( context ) ĊĠĠĠĠĠĠĠ Ġre cognizer . tap Timeout Ġ= ĠTEST _ T AP _ TIMEOUT ĊĠĠĠĠĠĠĠ Ġre cognizer . tag Ġ= Ġ" tap " ĊĠĠĠĠĠĠĠ Ġre cognizer . to uches Required Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġre cognizer . t aps Required Ġ= Ġ 1 ĊĊĠĠĠĠĠĠĠ Ġre cognizer . action Listener Ġ= Ġ{ Ġit Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . action Listener . invoke ( it ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfail (" action listener Ġnot Ġexpected ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġl atch . count Down () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdelegate . add Gesture Recognizer ( re cognizer ) ĊĊĠĠĠĠĠĠĠ Ġval Ġarray Ġ= Ġarray ListOf < Array < Motion Event . Pointer Coords >>() ĊĊĠĠĠĠĠĠĠ Ġarray . add ( array Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPointer Coords Builder . newBuilder (). set Coords (( bounds . center X () Ġ- Ġ 1 0 ). toFloat (), Ġ( bounds . center Y () Ġ- Ġ 1 0 ). toFloat ()). build (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPointer Coords Builder . newBuilder (). set Coords (( bounds . center X () Ġ+ Ġ 1 0 ). toFloat (), Ġ( bounds . center Y () Ġ+ Ġ 1 0 ). toFloat ()). build () ĊĠĠĠĠĠĠĠ Ġ)) ĊĊĠĠĠĠĠĠĠ Ġarray . add ( array Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPointer Coords Builder . newBuilder (). set Coords (( bounds . center X () Ġ- Ġ 1 0 ). toFloat (), Ġ( bounds . center Y () Ġ- Ġ 1 0 ). toFloat ()). build (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPointer Coords Builder . newBuilder (). set Coords (( bounds . center X () Ġ+ Ġ 1 0 ). toFloat (), Ġ( bounds . center Y () Ġ+ Ġ 1 0 ). toFloat ()). build () ĊĠĠĠĠĠĠĠ Ġ)) ĊĊĠĠĠĠĠĠĠ Ġinteraction . perform Multi Pointer Gesture ( array . to Typed Array ()) ĊĊĠĠĠĠĠĠĠ Ġl atch . await ( 2 , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġl atch . count ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest 1 7 Require Failure () Ġ{ ĊĠĠĠĠĠĠĠ ĠsetTitle (" Tap ĠFailure ") ĊĠĠĠĠĠĠĠ Ġval Ġl atch Ġ= ĠCount DownLatch ( 1 ) ĊĊĠĠĠĠĠĠĠ Ġdelegate . clear () ĊĊĠĠĠĠĠĠĠ Ġval Ġre cognizer 1 Ġ= ĠUIT ap Gesture Recognizer ( context ) ĊĠĠĠĠĠĠĠ Ġre cognizer 1 . tap Timeout Ġ= ĠTEST _ T AP _ TIMEOUT ĊĠĠĠĠĠĠĠ Ġre cognizer 1 . tag Ġ= Ġ" tap - 1 " ĊĠĠĠĠĠĠĠ Ġre cognizer 1 . t aps Required Ġ= Ġ 2 ĊĊĠĠĠĠĠĠĠ Ġval Ġre cognizer 2 Ġ= ĠUIT ap Gesture Recognizer ( context ) ĊĠĠĠĠĠĠĠ Ġre cognizer 2 . tap Timeout Ġ= ĠTEST _ T AP _ TIMEOUT ĊĠĠĠĠĠĠĠ Ġre cognizer 2 . tag Ġ= Ġ" tap - 2 " ĊĠĠĠĠĠĠĠ Ġre cognizer 2 . t aps Required Ġ= Ġ 1 ĊĊĠĠĠĠĠĠĠ Ġre cognizer 1 . action Listener Ġ= Ġ{ Ġit Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . action Listener . invoke ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfail () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġl atch . count Down () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġre cognizer 2 . action Listener Ġ= Ġ{ Ġit Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . action Listener . invoke ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( State . Ended , Ġit . state ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġl atch . count Down () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġre cognizer 2 . require Failure Of Ġ= Ġre cognizer 1 ĊĊĠĠĠĠĠĠĠ Ġdelegate . add Gesture Recognizer ( re cognizer 1 ) ĊĠĠĠĠĠĠĠ Ġdelegate . add Gesture Recognizer ( re cognizer 2 ) ĊĊĠĠĠĠĠĠĠ Ġon View ( View Matchers . with Id ( R . id . activity _ main )). perform ( View Actions . click ()) ĊĊĠĠĠĠĠĠĠ Ġl atch . await ( 2 , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , Ġl atch . count ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest 1 8 Double Tap 2 F ingers () Ġ{ ĊĠĠĠĠĠĠĠ ĠsetTitle (" Double ĠT ap Ġ 2 Ġf ingers ") ĊĊĠĠĠĠĠĠĠ Ġdelegate . clear () ĊĊĠĠĠĠĠĠĠ Ġval Ġl atch Ġ= ĠCount DownLatch ( 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġbounds Ġ= Ġmain View . visible Bounds ĊĠĠĠĠĠĠĠ Ġval Ġre cognizer Ġ= ĠUIT ap Gesture Recognizer ( context ) ĊĠĠĠĠĠĠĠ Ġre cognizer . tap Timeout Ġ= ĠTEST _ T AP _ TIMEOUT ĊĠĠĠĠĠĠĠ Ġre cognizer . tag Ġ= Ġ" tap " ĊĠĠĠĠĠĠĠ Ġre cognizer . to uches Required Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġre cognizer . t aps Required Ġ= Ġ 2 ĊĊĠĠĠĠĠĠĠ Ġre cognizer . action Listener Ġ= Ġ{ Ġit Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . action Listener . invoke ( it ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( State . Ended , Ġit . state ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġit . numberOf Tou ches ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġl atch . count Down () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdelegate . add Gesture Recognizer ( re cognizer ) ĊĊĠĠĠĠĠĠĠ Ġval Ġarray Ġ= Ġarray ListOf < Array < Motion Event . Pointer Coords >>() ĊĊĠĠĠĠĠĠĠ Ġarray . add ( array Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPointer Coords Builder . newBuilder (). set Coords (( bounds . center X () Ġ- Ġ 1 0 ). toFloat (), Ġ( bounds . center Y () Ġ- Ġ 1 0 ). toFloat ()). build (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPointer Coords Builder . newBuilder (). set Coords (( bounds . center X () Ġ+ Ġ 1 0 ). toFloat (), Ġ( bounds . center Y () Ġ+ Ġ 1 0 ). toFloat ()). build () ĊĠĠĠĠĠĠĠ Ġ)) ĊĊĠĠĠĠĠĠĠ Ġarray . add ( array Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPointer Coords Builder . newBuilder (). set Coords (( bounds . center X () Ġ- Ġ 1 0 ). toFloat (), Ġ( bounds . center Y () Ġ- Ġ 1 0 ). toFloat ()). build (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPointer Coords Builder . newBuilder (). set Coords (( bounds . center X () Ġ+ Ġ 1 0 ). toFloat (), Ġ( bounds . center Y () Ġ+ Ġ 1 0 ). toFloat ()). build () ĊĠĠĠĠĠĠĠ Ġ)) ĊĊĠĠĠĠĠĠĠ Ġinteraction . perform Multi Pointer Gesture ( array . to Typed Array ()) ĊĠĠĠĠĠĠĠ ĠSystem Clock . sleep ( Interaction . MOT ION _ EVENT _ IN JECTION _ DELAY _ M ILL IS . to Long ()) ĊĊĠĠĠĠĠĠĠ Ġarray . clear () ĊĊĠĠĠĠĠĠĠ Ġarray . add ( array Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPointer Coords Builder . newBuilder (). set Coords (( bounds . center X () Ġ- Ġ 1 0 ). toFloat (), Ġ( bounds . center Y () Ġ- Ġ 1 0 ). toFloat ()). build (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPointer Coords Builder . newBuilder (). set Coords (( bounds . center X () Ġ+ Ġ 1 0 ). toFloat (), Ġ( bounds . center Y () Ġ+ Ġ 1 0 ). toFloat ()). build () ĊĠĠĠĠĠĠĠ Ġ)) ĊĊĠĠĠĠĠĠĠ Ġarray . add ( array Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPointer Coords Builder . newBuilder (). set Coords (( bounds . center X () Ġ- Ġ 1 0 ). toFloat (), Ġ( bounds . center Y () Ġ- Ġ 1 0 ). toFloat ()). build (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPointer Coords Builder . newBuilder (). set Coords (( bounds . center X () Ġ+ Ġ 1 0 ). toFloat (), Ġ( bounds . center Y () Ġ+ Ġ 1 0 ). toFloat ()). build () ĊĠĠĠĠĠĠĠ Ġ)) ĊĊĠĠĠĠĠĠĠ Ġinteraction . perform Multi Pointer Gesture ( array . to Typed Array ()) ĊĊĠĠĠĠĠĠĠ Ġl atch . await ( 2 , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , Ġl atch . count ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest 1 9 Double Tap Too Far () Ġ{ ĊĠĠĠĠĠĠĠ ĠsetTitle (" Double ĠT ap ") ĊĊĠĠĠĠĠĠĠ Ġval Ġl atch Ġ= ĠCount DownLatch ( 1 ) ĊĊĠĠĠĠĠĠĠ Ġdelegate . clear () ĊĊĠĠĠĠĠĠĠ Ġval Ġre cognizer Ġ= ĠUIT ap Gesture Recognizer ( context ) ĊĠĠĠĠĠĠĠ Ġre cognizer . tap Timeout Ġ= ĠTEST _ T AP _ TIMEOUT ĊĠĠĠĠĠĠĠ Ġre cognizer . tag Ġ= Ġ" double - tap " ĊĠĠĠĠĠĠĠ Ġre cognizer . t aps Required Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġre cognizer . to uches Required Ġ= Ġ 1 ĊĊĠĠĠĠĠĠĠ Ġre cognizer . action Listener Ġ= Ġ{ Ġit Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . action Listener . invoke ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfail (" action Listener Ġunexpected ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġl atch . count Down () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdelegate . add Gesture Recognizer ( re cognizer ) ĊĊĊĠĠĠĠĠĠĠ Ġval Ġbounds Ġ= Ġmain View . visible Bounds ĊĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġbounds . center X () ĊĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġbounds . center Y () ĊĊĠĠĠĠĠĠĠ Ġinteraction . click No Sync ( x , Ġy ) ĊĠĠĠĠĠĠĠ Ġinteraction . click No Sync ( x Ġ+ Ġre cognizer . scaled Double Tap S lop , Ġy Ġ+ Ġre cognizer . scaled Double Tap S lop ) ĊĊĠĠĠĠĠĠĠ Ġl atch . await ( 2 , ĠTimeUnit . SECONDS ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġl atch . count ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest 2 0 Double Tap Not Far En ough () Ġ{ ĊĠĠĠĠĠĠĠ ĠsetTitle (" Double ĠT ap ") ĊĊĠĠĠĠĠĠĠ Ġval Ġl atch Ġ= ĠCount DownLatch ( 1 ) ĊĊĠĠĠĠĠĠĠ Ġdelegate . clear () ĊĊĠĠĠĠĠĠĠ Ġval Ġre cognizer Ġ= ĠUIT ap Gesture Recognizer ( context ) ĊĠĠĠĠĠĠĠ Ġre cognizer . tap Timeout Ġ= ĠTEST _ T AP _ TIMEOUT ĊĠĠĠĠĠĠĠ Ġre cognizer . tag Ġ= Ġ" double - tap " ĊĠĠĠĠĠĠĠ Ġre cognizer . t aps Required Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġre cognizer . to uches Required Ġ= Ġ 1 ĊĊĠĠĠĠĠĠĠ Ġre cognizer . action Listener Ġ= Ġ{ Ġit Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . action Listener . invoke ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( State . Ended , Ġit . state ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġl atch . count Down () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdelegate . add Gesture Recognizer ( re cognizer ) ĊĊĊĠĠĠĠĠĠĠ Ġval Ġbounds Ġ= Ġmain View . visible Bounds ĊĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġbounds . center X () ĊĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġbounds . center Y () ĊĊĠĠĠĠĠĠĠ Ġinteraction . click No Sync ( x , Ġy ) ĊĠĠĠĠĠĠĠ Ġinteraction . click No Sync ( x Ġ+ Ġre cognizer . scaled Double Tap S lop Ġ/ Ġ 2 , Ġy ) ĊĊĠĠĠĠĠĠĠ Ġl atch . await ( 2 , ĠTimeUnit . SECONDS ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , Ġl atch . count ) ĊĠĠĠ Ġ} Ċ Ċ } Ċ