package Ġbr . com . con cre tes olution s . k app ucc ino . custom . re cyclerView Ċ Ċ import Ġandroidx . annotation . Id Res Ċ import Ġandroidx . test . espress o . No Matching View Exception Ċ import Ġandroidx . test . espress o . Perform Exception . Builder Ċ import Ġandroidx . test . espress o . Ui Controller Ċ import Ġandroidx . test . espress o . View Action Ċ import Ġandroidx . test . espress o . View Assertion Ċ import Ġandroidx . test . espress o . action . View Actions Ċ import Ġandroidx . test . espress o . matcher . View Matchers Ċ import Ġandroidx . test . espress o . util . Human Read ables Ċ import Ġandroid . view . View Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġorg . hamcrest . Matcher Ċ import Ġorg . hamcrest . Matchers Ċ Ċ internal Ġobject ĠRecyclerView Item Interactions Ġ{ ĊĊĠĠĠ Ġinternal Ġconst Ġval Ġroot View Id Ġ= Ġ- 1 ĊĊĠĠĠ Ġinternal Ġfun Ġaction On Item View At Position ( position : ĠInt , Ġ@ Id Res Ġview Id : ĠInt , Ġview Action : ĠView Action ): ĠView Action Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠAction On Item View At Position View Action ( position , Ġview Id , Ġview Action ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġassertion On Item View At Position ( position : ĠInt , Ġ@ Id Res Ġview Id : ĠInt Ġ= Ġroot View Id , Ġview Assertion : ĠView Assertion ): ĠView Assertion Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠAssertion On Item View At Position ( position , Ġview Id , Ġview Assertion ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠAction On Item View At Position View Action Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġposition : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Id Res Ġprivate Ġval Ġview Id : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġview Action : ĠView Action ) Ġ: ĠView Action Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Constraints (): ĠMatcher < View > Ġ= Ġcreate Constraints () ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetDescription (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" action On Item At Position Ġperforming ĠView Action : Ġ${ view Action . description } Ġon Ġitem Ġat Ġposition : Ġ$ position " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġperform ( ui Controller : ĠUi Controller , Ġview : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġre cyclerView Ġ= Ġview Ġas ĠRecyclerView ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠScroll To Position View Action ( position ). perform ( ui Controller , Ġview ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġui Controller . loop MainThread Until Idle () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtarget View Ġ= Ġre cyclerView . getChild At ( position ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( view Id Ġ== Ġroot View Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroot View ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfindViewById < View >( view Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( target View Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Action Description ( this . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with View Description ( Human Read ables . describe ( view )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Cause ( IllegalStateException (" No Ġview Ġwith Ġid Ġ$ view Id Ġfound Ġat Ġposition : Ġ$ position ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Action . perform ( ui Controller , Ġtarget View ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠAssertion On Item View At Position ( private Ġval Ġposition : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Id Res Ġprivate Ġval Ġview Id : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġview Assertion : ĠView Assertion ) Ġ: ĠView Assertion Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcheck ( view : ĠView ?, Ġno View Found Exception : ĠNo Matching View Exception ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġre cyclerView Ġ= Ġview Ġas ĠRecyclerView ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction On Item View At Position ( position , Ġview Id , ĠView Actions . scrollTo ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild At Ġ= Ġre cyclerView . getChild At ( position ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtarget View Ġ= Ġchild At . findViewById < View >( view Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠBuilder (). with Cause ( no View Found Exception ). build () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Assertion . check ( target View , Ġno View Found Exception ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠScroll To Position View Action ( private Ġval Ġposition : ĠInt ) Ġ: ĠView Action Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Constraints (): ĠMatcher < View > Ġ= Ġcreate Constraints () ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetDescription (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" scroll ĠRecyclerView Ġto Ġposition : Ġ$ position " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġperform ( ui Controller : ĠUi Controller , Ġview : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġre cyclerView Ġ= Ġview Ġas ĠRecyclerView ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView . scrollTo Position ( position ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Constraints () Ġ= ĠMatch ers . all Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠView Matchers . isAssignableFrom ( RecyclerView :: class . java ), ĠView Matchers . is Displayed ()) Ċ }