/* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġandroidx . compose . ui . test . gest ures cope Ċ Ċ import Ġandroidx . compose . foundation . gest ures . detect Tap Gest ures Ċ import Ġandroidx . compose . foundation . layout . Box Ċ import Ġandroidx . compose . foundation . layout . fill MaxSize Ċ import Ġandroidx . compose . foundation . layout . wrap Content Size Ċ import Ġandroidx . compose . ui . Alignment Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . geometry . Offset Ċ import Ġandroidx . compose . ui . input . pointer . pointer Input Ċ import Ġandroidx . compose . ui . test . junit 4 . create Compose Rule Ċ import Ġandroidx . compose . ui . test . long Click Ċ import Ġandroidx . compose . ui . test . on Node With Tag Ċ import Ġandroidx . compose . ui . test . perform Gesture Ċ import Ġandroidx . compose . ui . test . util . Clickable Test Box Ċ import Ġandroidx . compose . ui . test . util . Clickable Test Box . default Size Ċ import Ġandroidx . compose . ui . test . util . Clickable Test Box . default Tag Ċ import Ġandroidx . compose . ui . test . util . Single Pointer Input Recorder Ċ import Ġandroidx . compose . ui . test . util . is Almost EqualTo Ċ import Ġandroidx . compose . ui . test . util . re corded Duration Millis Ċ import Ġandroidx . test . filters . Medium Test Ċ import Ġcom . google . common . truth . Truth . assertThat Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ import Ġorg . junit . runners . Parameterized Ċ Ċ /** Ċ Ġ* ĠTests Ġ[ long Click ] Ġwith Ġarguments . ĠVerifies Ġthat Ġthe Ġclick Ġis Ġin Ġthe Ġmiddle Ċ Ġ* Ġof Ġthe Ġcomponent , Ġthat Ġthe Ġgesture Ġhas Ġa Ġduration Ġof Ġ 6 0 0 Ġmilliseconds Ġand Ġthat Ġall Ġinput Ċ Ġ* Ġevents Ġwere Ġon Ġthe Ġsame Ġlocation . Ċ Ġ*/ Ċ @ Medium Test Ċ @ RunWith ( Parameterized :: class ) Ċ class ĠSend Long Click Test ( private Ġval Ġconfig : ĠTest Config ) Ġ{ ĊĠĠĠ Ġdata Ġclass ĠTest Config ( val Ġposition : ĠOffset ?, Ġval Ġduration Millis : ĠLong ?) ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġ@ Parameterized . Parameters ( name Ġ= Ġ"{ 0 }") ĊĠĠĠĠĠĠĠ Ġfun Ġcreate Test Set (): ĠList < Test Config > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmutable ListOf < Test Config >(). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( duration Ġin ĠlistOf ( null , Ġ 7 0 0 L )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( x Ġin ĠlistOf ( 1 . 0 f , Ġdefault Size Ġ/ Ġ 4 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( y Ġin ĠlistOf ( 1 . 0 f , Ġdefault Size Ġ/ Ġ 3 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( Test Config ( Offset ( x , Ġy ), Ġduration )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( Test Config ( null , Ġduration )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġval Ġrule Ġ= Ġcreate Compose Rule () ĊĊĠĠĠ Ġprivate Ġval Ġrecorded Long Click s Ġ= Ġmutable ListOf < Offset >() ĊĠĠĠ Ġprivate Ġval Ġexpected Click Position Ġ= ĊĠĠĠĠĠĠĠ Ġconfig . position Ġ?: ĠOffset ( default Size Ġ/ Ġ 2 , Ġdefault Size Ġ/ Ġ 2 ) ĊĠĠĠ Ġprivate Ġval Ġexpected Duration Ġ= Ġconfig . duration Millis Ġ?: Ġ 6 0 0 L ĊĊĠĠĠ Ġprivate Ġfun Ġrecord Long Press ( position : ĠOffset ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrecorded Long Click s . add ( position ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Long Click () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven Ġsome Ġcontent ĊĠĠĠĠĠĠĠ Ġval Ġrecorder Ġ= ĠSingle Pointer Input Recorder () ĊĠĠĠĠĠĠĠ Ġrule . setContent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBox ( Modifier . fill MaxSize (). wrap Content Size ( Alignment . Bottom End )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠClick able Test Box ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. pointer Input Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdetect Tap Gest ures ( on Long Press Ġ= Ġ:: record Long Press ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. then ( recorder ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠWhen Ġwe Ġinject Ġa Ġlong Ġclick ĊĠĠĠĠĠĠĠ Ġrule . on Node With Tag ( default Tag ). perform Gesture Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( config . position Ġ!= Ġnull Ġ&& Ġconfig . duration Millis Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlong Click ( config . position , Ġconfig . duration Millis ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( config . position Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlong Click ( config . position ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( config . duration Millis Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlong Click ( duration Millis Ġ= Ġconfig . duration Millis ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlong Click () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrule . waitFor Idle () ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen Ġwe Ġrecord Ġ 1 Ġlong Ġclick Ġat Ġthe Ġexpected Ġposition ĊĠĠĠĠĠĠĠ ĠassertThat ( re corded Long Click s ). has Size ( 1 ) ĊĠĠĠĠĠĠĠ Ġrecorded Long Click s [ 0 ]. is Almost EqualTo ( expected Click Position ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠAnd Ġthat Ġthe Ġduration Ġwas Ġas Ġexpected ĊĠĠĠĠĠĠĠ ĠassertThat ( recorder . re corded Duration Millis ). isEqualTo ( expected Duration ) ĊĠĠĠ Ġ} Ċ } Ċ