/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 2 1 Ġpan pf Ġ< pan p fp an pf @ outlook . com > Ċ Ġ* Ċ Ġ* Ġ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 Ġcom . github . pan pf . assembly adapter . recycler . test Ċ Ċ import Ġandroid . widget . Frame Layout Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . recyclerview . widget . Concat Adapter Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġandroidx . test . ext . junit . runners . Android JUnit 4 Ċ import Ġandroidx . test . platform . app . Instrumentation Registry Ċ import Ġcom . github . pan pf . assembly adapter . View Item Factory Ċ import Ġcom . github . pan pf . assembly adapter . recycler . Assembly Recycler Adapter Ċ import Ġcom . github . pan pf . assembly adapter . recycler . Assembly Single Data Recycler Adapter Ċ import Ġcom . github . pan pf . assembly adapter . recycler . internal . RecyclerView Holder Wrapper Ċ import Ġcom . github . pan pf . tools 4 j . test . k tx . assert Throw Ċ import Ġorg . junit . Assert Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ Ċ @ RunWith ( Android JUnit 4 :: class ) Ċ class ĠConcat Adapter Test Ġ{ ĊĊĠĠĠ Ġprivate Ġdata Ġclass ĠText ( val Ġtext : ĠString ) ĊĊĠĠĠ Ġprivate Ġclass ĠText Item Factory Ġ: ĠView Item Factory < Text >( Text :: class , Ġ{ Ġcontext , Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠ ĠTextView ( context ) ĊĠĠĠ Ġ}) ĊĊĠĠĠ Ġprivate Ġdata Ġclass ĠImage ( val Ġres Id : ĠInt ) ĊĊĠĠĠ Ġprivate Ġclass ĠImage Item Factory Ġ: ĠView Item Factory < Image >( Image :: class , Ġ{ Ġcontext , Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠ ĠImageView ( context ) ĊĠĠĠ Ġ}) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Config () Ġ{ ĊĠĠĠĠĠĠĠ ĠConcat Adapter . Config . DEFAULT . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( true , Ġthis . isolate View Types ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConcat Adapter . Config . Stable Id Mode . NO _ ST ABLE _ IDS , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . stable Id Mode ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠConcat Adapter . Config . Builder (). build (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( true , Ġthis . isolate View Types ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConcat Adapter . Config . Stable Id Mode . NO _ ST ABLE _ IDS , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . stable Id Mode ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠConcat Adapter . Config . Builder (). setIs olate View Types ( false ). build (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( false , Ġthis . isolate View Types ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConcat Adapter . Config . Stable Id Mode . NO _ ST ABLE _ IDS , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . stable Id Mode ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠConcat Adapter . Config . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Stable Id Mode ( Concat Adapter . Config . Stable Id Mode . IS OL ATED _ ST ABLE _ IDS ). build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( true , Ġthis . isolate View Types ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConcat Adapter . Config . Stable Id Mode . IS OL ATED _ ST ABLE _ IDS , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . stable Id Mode ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠConcat Adapter . Config . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Stable Id Mode ( Concat Adapter . Config . Stable Id Mode . SHARED _ ST ABLE _ IDS ). build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( true , Ġthis . isolate View Types ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConcat Adapter . Config . Stable Id Mode . SHARED _ ST ABLE _ IDS , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . stable Id Mode ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Constructor () Ġ{ ĊĠĠĠĠĠĠĠ ĠConcat Adapter ( Assembly Single Data Recycler Adapter ( Text Item Factory ())). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( 1 , Ġadapters . size ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠConcat Adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssembly Single Data Recycler Adapter ( Text Item Factory ()), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssembly Single Data Recycler Adapter ( Text Item Factory ()) ĊĠĠĠĠĠĠĠ Ġ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( 2 , Ġadapters . size ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠConcat Adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConcat Adapter . Config . DEFAULT , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssembly Single Data Recycler Adapter ( Text Item Factory ()) ĊĠĠĠĠĠĠĠ Ġ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( 1 , Ġadapters . size ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠConcat Adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConcat Adapter . Config . DEFAULT , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssembly Single Data Recycler Adapter ( Text Item Factory ()), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssembly Single Data Recycler Adapter ( Text Item Factory ()) ĊĠĠĠĠĠĠĠ Ġ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( 2 , Ġadapters . size ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠConcat Adapter ( listOf ( Assembly Single Data Recycler Adapter ( Text Item Factory ())) ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( 1 , Ġadapters . size ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠConcat Adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssembly Single Data Recycler Adapter ( Text Item Factory ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssembly Single Data Recycler Adapter ( Text Item Factory ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( 2 , Ġadapters . size ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠConcat Adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConcat Adapter . Config . DEFAULT , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( Assembly Single Data Recycler Adapter ( Text Item Factory ())) ĊĠĠĠĠĠĠĠ Ġ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( 1 , Ġadapters . size ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠConcat Adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConcat Adapter . Config . DEFAULT , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssembly Single Data Recycler Adapter ( Text Item Factory ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssembly Single Data Recycler Adapter ( Text Item Factory ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( 2 , Ġadapters . size ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Method Add And Remove Adapter () Ġ{ ĊĠĠĠĠĠĠĠ ĠConcat Adapter (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( 0 , Ġadapters . size ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( 0 , Ġitem Count ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ("", Ġadapters . join ToString Ġ{ Ġit . item Count . toString () Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġadapter 1 Ġ= ĠAssembly Single Data Recycler Adapter ( Text Item Factory (), ĠText (" a ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġadapter 2 Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssembly Recycler Adapter ( listOf ( Text Item Factory ()), ĠlistOf ( Text (" b "), ĠText (" c "))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġadapter 3 Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssembly Recycler Adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( Text Item Factory ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( Text (" d "), ĠText (" e "), ĠText (" f ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Adapter ( adapter 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( 1 , Ġadapters . size ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( 1 , Ġitem Count ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals (" 1 ", Ġadapters . join ToString Ġ{ Ġit . item Count . toString () Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Adapter ( adapter 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( 2 , Ġadapters . size ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( 4 , Ġitem Count ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals (" 1 , Ġ 3 ", Ġadapters . join ToString Ġ{ Ġit . item Count . toString () Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Adapter ( 1 , Ġadapter 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( 3 , Ġadapters . size ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( 6 , Ġitem Count ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals (" 1 , Ġ 2 , Ġ 3 ", Ġadapters . join ToString Ġ{ Ġit . item Count . toString () Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġremove Adapter ( adapter 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( 2 , Ġadapters . size ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( 5 , Ġitem Count ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals (" 2 , Ġ 3 ", Ġadapters . join ToString Ġ{ Ġit . item Count . toString () Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġremove Adapter ( adapter 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( 1 , Ġadapters . size ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( 2 , Ġitem Count ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals (" 2 ", Ġadapters . join ToString Ġ{ Ġit . item Count . toString () Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Method GetItem ViewType () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠI sol ate View Types Ġtrue ĊĠĠĠĠĠĠĠ ĠConcat Adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssembly Single Data Recycler Adapter ( Text Item Factory (), ĠText (" a ")), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssembly Recycler Adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( Text Item Factory (), ĠImage Item Factory ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImage ( android . R . drawable . alert _ dark _ frame ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText (" c "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImage ( android . R . drawable . arrow _ up _ float ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssembly Single Data Recycler Adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImage Item Factory (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImage ( android . R . drawable . btn _ plus ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Throw ( Index OutOfBoundsException :: class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetItem ViewType (- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( 0 , ĠgetItem ViewType ( 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( 1 , ĠgetItem ViewType ( 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( 2 , ĠgetItem ViewType ( 2 )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( 1 , ĠgetItem ViewType ( 3 )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( 3 , ĠgetItem ViewType ( 4 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Throw ( IllegalArgumentException :: class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetItem ViewType ( 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠI sol ate View Types Ġfalse ĊĠĠĠĠĠĠĠ ĠConcat Adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConcat Adapter . Config . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setIs olate View Types ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssembly Single Data Recycler Adapter ( Text Item Factory (), ĠText (" a ")), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssembly Recycler Adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( Text Item Factory (), ĠImage Item Factory ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImage ( android . R . drawable . alert _ dark _ frame ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText (" c "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImage ( android . R . drawable . arrow _ up _ float ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssembly Single Data Recycler Adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImage Item Factory (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImage ( android . R . drawable . btn _ plus ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Throw ( Index OutOfBoundsException :: class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetItem ViewType (- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( 0 , ĠgetItem ViewType ( 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( 1 , ĠgetItem ViewType ( 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( 0 , ĠgetItem ViewType ( 2 )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( 1 , ĠgetItem ViewType ( 3 )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( 0 , ĠgetItem ViewType ( 4 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Throw ( IllegalArgumentException :: class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetItem ViewType ( 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Method Get ItemId () Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠcurrentTime Millis Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠ Ġval Ġdata 0 Ġ= ĠText ( currentTimeMillis . toString ()) ĊĠĠĠĠĠĠĠ Ġval Ġdata 1 Ġ= ĠText (( currentTimeMillis Ġ+ Ġ 1 ). toString ()) ĊĠĠĠĠĠĠĠ Ġval Ġdata 2 Ġ= ĠText (( currentTimeMillis Ġ+ Ġ 2 ). toString ()) ĊĠĠĠĠĠĠĠ Ġval Ġdata 0 ItemId Ġ= Ġdata 0 . hashCode (). to Long () ĊĠĠĠĠĠĠĠ Ġval Ġdata 1 ItemId Ġ= Ġdata 1 . hashCode (). to Long () ĊĠĠĠĠĠĠĠ Ġval Ġdata 2 ItemId Ġ= Ġdata 2 . hashCode (). to Long () ĊĊĠĠĠĠĠĠĠ Ġ// ĠNO _ ST ABLE _ IDS ĊĠĠĠĠĠĠĠ ĠConcat Adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssembly Single Data Recycler Adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Factory Ġ= ĠText Item Factory (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinit Data Ġ= Ġdata 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssembly Recycler Adapter < Any >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Factory List Ġ= ĠlistOf ( Text Item Factory ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinit DataList Ġ= ĠlistOf ( data 2 , Ġdata 1 , Ġdata 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssembly Single Data Recycler Adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Factory Ġ= ĠText Item Factory (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinit Data Ġ= Ġdata 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals (- 1 L , ĠgetItem Id (- 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals (- 1 L , ĠgetItem Id ( 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals (- 1 L , ĠgetItem Id ( 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals (- 1 L , ĠgetItem Id ( 2 )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals (- 1 L , ĠgetItem Id ( 3 )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals (- 1 L , ĠgetItem Id ( 4 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Throw ( IllegalArgumentException :: class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetItem Id ( 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠIS OL ATED _ ST ABLE _ IDS ĊĠĠĠĠĠĠĠ ĠConcat Adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConcat Adapter . Config . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Stable Id Mode ( Concat Adapter . Config . Stable Id Mode . IS OL ATED _ ST ABLE _ IDS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssembly Single Data Recycler Adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Factory Ġ= ĠText Item Factory (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinit Data Ġ= Ġdata 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). apply Ġ{ Ġset Has Stable Ids ( true ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssembly Recycler Adapter < Any >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Factory List Ġ= ĠlistOf ( Text Item Factory ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinit DataList Ġ= ĠlistOf ( data 2 , Ġdata 1 , Ġdata 2 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). apply Ġ{ Ġset Has Stable Ids ( true ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssembly Single Data Recycler Adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Factory Ġ= ĠText Item Factory (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinit Data Ġ= Ġdata 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). apply Ġ{ Ġset Has Stable Ids ( true ) Ġ} ĊĠĠĠĠĠĠĠ Ġ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Throw ( Index OutOfBoundsException :: class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetItem Id (- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( 0 L , ĠgetItem Id ( 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( 1 L , ĠgetItem Id ( 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( 2 L , ĠgetItem Id ( 2 )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( 1 L , ĠgetItem Id ( 3 )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( 3 L , ĠgetItem Id ( 4 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Throw ( IllegalArgumentException :: class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetItem Id ( 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠSHARE D _ ST ABLE _ IDS ĊĠĠĠĠĠĠĠ ĠConcat Adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConcat Adapter . Config . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Stable Id Mode ( Concat Adapter . Config . Stable Id Mode . SHARED _ ST ABLE _ IDS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssembly Single Data Recycler Adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Factory Ġ= ĠText Item Factory (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinit Data Ġ= Ġdata 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). apply Ġ{ Ġset Has Stable Ids ( true ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssembly Recycler Adapter < Any >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Factory List Ġ= ĠlistOf ( Text Item Factory ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinit DataList Ġ= ĠlistOf ( data 2 , Ġdata 1 , Ġdata 2 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). apply Ġ{ Ġset Has Stable Ids ( true ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssembly Single Data Recycler Adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Factory Ġ= ĠText Item Factory (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinit Data Ġ= Ġdata 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). apply Ġ{ Ġset Has Stable Ids ( true ) Ġ}, ĊĠĠĠĠĠĠĠ Ġ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Throw ( Index OutOfBoundsException :: class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetItem Id (- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( data 0 ItemId , ĠgetItem Id ( 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( data 2 ItemId , ĠgetItem Id ( 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( data 1 ItemId , ĠgetItem Id ( 2 )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( data 2 ItemId , ĠgetItem Id ( 3 )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( data 1 ItemId , ĠgetItem Id ( 4 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Throw ( IllegalArgumentException :: class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetItem Id ( 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Method Create And Bind ViewHolder () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= ĠInstrument ation Registry . get Instrumentation (). context ĊĠĠĠĠĠĠĠ Ġval Ġparent Ġ= ĠFrame Layout ( context ) ĊĠĠĠĠĠĠĠ ĠConcat Adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssembly Single Data Recycler Adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Factory Ġ= ĠText Item Factory (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinit Data Ġ= ĠText (" a "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssembly Recycler Adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Factory List Ġ= ĠlistOf ( Text Item Factory (), ĠImage Item Factory ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinit DataList Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImage ( android . R . drawable . bottom _ bar ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText (" b "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImage ( android . R . drawable . btn _ plus ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssembly Single Data Recycler Adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Factory Ġ= ĠImage Item Factory (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinit Data Ġ= ĠImage ( android . R . drawable . alert _ dark _ frame ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Throw ( IllegalArgumentException :: class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonCreate ViewHolder ( parent , Ġ- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertTrue ( onCreate ViewHolder ( parent , ĠgetItem ViewType ( 0 )). item View Ġis ĠTextView ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertTrue ( onCreate ViewHolder ( parent , ĠgetItem ViewType ( 1 )). item View Ġis ĠImageView ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertTrue ( onCreate ViewHolder ( parent , ĠgetItem ViewType ( 2 )). item View Ġis ĠTextView ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertTrue ( onCreate ViewHolder ( parent , ĠgetItem ViewType ( 3 )). item View Ġis ĠImageView ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertTrue ( onCreate ViewHolder ( parent , ĠgetItem ViewType ( 4 )). item View Ġis ĠImageView ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Throw ( IllegalArgumentException :: class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Bind ViewHolder ( object Ġ: ĠRecyclerView . ViewHolder ( TextView ( context )) Ġ{}, Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Bind ViewHolder ( onCreate ViewHolder ( parent , ĠgetItem ViewType ( 0 )), Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Bind ViewHolder ( onCreate ViewHolder ( parent , ĠgetItem ViewType ( 1 )), Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Bind ViewHolder ( onCreate ViewHolder ( parent , ĠgetItem ViewType ( 2 )), Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Bind ViewHolder ( onCreate ViewHolder ( parent , ĠgetItem ViewType ( 3 )), Ġ 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Bind ViewHolder ( onCreate ViewHolder ( parent , ĠgetItem ViewType ( 4 )), Ġ 4 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Method Get Count () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġheader Adapter Ġ= ĠAssembly Single Data Recycler Adapter ( item Factory Ġ= ĠText Item Factory ()) ĊĠĠĠĠĠĠĠ Ġval Ġbody Adapter Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssembly Recycler Adapter < Any >( listOf ( Text Item Factory (), ĠImage Item Factory ())) ĊĠĠĠĠĠĠĠ Ġval Ġfooter Header Ġ= ĠAssembly Single Data Recycler Adapter ( item Factory Ġ= ĠImage Item Factory ()) ĊĠĠĠĠĠĠĠ ĠConcat Adapter ( header Adapter , Ġbody Adapter , Ġfooter Header ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( 0 , Ġitem Count ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġheader Adapter . data Ġ= ĠText (" hello ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( 1 , Ġitem Count ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbody Adapter . submit List ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImage ( android . R . drawable . bottom _ bar ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText (" world "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImage ( android . R . drawable . btn _ plus ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( 4 , Ġitem Count ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfooter Header . data Ġ= ĠImage ( android . R . drawable . btn _ default ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( 5 , Ġitem Count ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbody Adapter . submit List ( listOf ( Text (" world "))) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( 3 , Ġitem Count ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbody Adapter . submit List ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( 2 , Ġitem Count ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfooter Header . data Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( 1 , Ġitem Count ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġheader Adapter . data Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( 0 , Ġitem Count ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Method Has Stable Ids () Ġ{ ĊĠĠĠĠĠĠĠ ĠConcat Adapter ( Assembly Single Data Recycler Adapter ( Text Item Factory ())). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertFalse ( has Stable Ids ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠConcat Adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConcat Adapter . Config . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Stable Id Mode ( Concat Adapter . Config . Stable Id Mode . SHARED _ ST ABLE _ IDS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssembly Single Data Recycler Adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Factory Ġ= ĠText Item Factory (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). apply Ġ{ Ġset Has Stable Ids ( true ) Ġ} ĊĠĠĠĠĠĠĠ Ġ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertTrue ( has Stable Ids ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠConcat Adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConcat Adapter . Config . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Stable Id Mode ( Concat Adapter . Config . Stable Id Mode . IS OL ATED _ ST ABLE _ IDS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssembly Single Data Recycler Adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Factory Ġ= ĠText Item Factory (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). apply Ġ{ Ġset Has Stable Ids ( true ) Ġ} ĊĠĠĠĠĠĠĠ Ġ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertTrue ( has Stable Ids ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Nested Adapter Position () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcount 1 Adapter Ġ= ĠAssembly Single Data Recycler Adapter ( Text Item Factory (), ĠText (" a ")) ĊĠĠĠĠĠĠĠ Ġval Ġcount 3 Adapter Ġ= ĠAssembly Recycler Adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( Text Item Factory ()), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( Text (" a "), ĠText (" a "), ĠText (" a ")) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġcount 5 Adapter Ġ= ĠAssembly Recycler Adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( Text Item Factory ()), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( Text (" a "), ĠText (" a "), ĠText (" a "), ĠText (" a "), ĠText (" a ")) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġcount 7 Adapter Ġ= ĠAssembly Recycler Adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( Text Item Factory ()), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( Text (" a "), ĠText (" a "), ĠText (" a "), ĠText (" a "), ĠText (" a "), ĠText (" a "), ĠText (" a ")) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġconcat Count 9 Adapter Ġ= ĠConcat Adapter ( count 1 Adapter , Ġcount 3 Adapter , Ġcount 5 Adapter ) ĊĠĠĠĠĠĠĠ Ġval Ġconcat Count 1 1 Adapter Ġ= ĠConcat Adapter ( count 1 Adapter , Ġcount 3 Adapter , Ġcount 7 Adapter ) ĊĠĠĠĠĠĠĠ Ġval Ġconcat Count 1 3 Adapter Ġ= ĠConcat Adapter ( count 1 Adapter , Ġcount 5 Adapter , Ġcount 7 Adapter ) ĊĠĠĠĠĠĠĠ Ġval Ġconcat N esting Count 1 6 Adapter Ġ= ĠConcat Adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcount 1 Adapter , ĠConcat Adapter ( count 3 Adapter , Ġcount 5 Adapter ), Ġcount 7 Adapter ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠAssert . assertEquals (" count 1 Adapter . item Count ", Ġ 1 , Ġcount 1 Adapter . item Count ) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals (" count 3 Adapter . item Count ", Ġ 3 , Ġcount 3 Adapter . item Count ) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals (" count 5 Adapter . item Count ", Ġ 5 , Ġcount 5 Adapter . item Count ) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals (" count 7 Adapter . item Count ", Ġ 7 , Ġcount 7 Adapter . item Count ) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals (" count 7 Adapter . item Count ", Ġ 9 , Ġconcat Count 9 Adapter . item Count ) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals (" count 7 Adapter . item Count ", Ġ 1 1 , Ġconcat Count 1 1 Adapter . item Count ) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals (" count 1 2 Adapter . item Count ", Ġ 1 3 , Ġconcat Count 1 3 Adapter . item Count ) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals (" count 1 5 Adapter . item Count ", Ġ 1 6 , Ġconcat N esting Count 1 6 Adapter . item Count ) ĊĊĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= ĠInstrument ation Registry . get Instrumentation (). context ĊĠĠĠĠĠĠĠ Ġval Ġparent Ġ= ĠRecyclerView ( context ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Manager Ġ= ĠLinearLayoutManager ( context ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġverify Adapter Position : Ġ( RecyclerView . Adapter < RecyclerView . ViewHolder >, ĠInt , ĠInt , ĠInt ) Ġ-> ĠUnit Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġadapter , Ġposition , Ġexpected Binding Adapter Position , Ġexpected Absolute Adapter Position Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Type Ġ= Ġadapter . getItem ViewType ( position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠviewHolder Ġ= Ġadapter . create ViewHolder ( parent , Ġitem Type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . bind ViewHolder ( view Holder , Ġposition ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġ( view Holder Ġas ĠRecyclerView Holder Wrapper < *> ). wrapped Item ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" count ${ adapter . item Count } Adapter . Ġposition (${ position }). Ġitem . binding Adapter Position ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpected Binding Adapter Position , Ġitem . binding Adapter Position ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" count ${ adapter . item Count } Adapter . Ġposition (${ position }). Ġitem . absolute Adapter Position ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpected Absolute Adapter Position , Ġitem . absolute Adapter Position ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/* Ġadapter , Ġposition , Ġbinding Adapter Position , Ġabsolute Adapter Position Ġ*/ ĊĠĠĠĠĠĠĠ Ġverify Adapter Position ( count 1 Adapter , Ġ 0 , Ġ 0 , Ġ 0 ) ĊĊĠĠĠĠĠĠĠ Ġverify Adapter Position ( count 3 Adapter , Ġ 0 , Ġ 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġverify Adapter Position ( count 3 Adapter , Ġ 1 , Ġ 1 , Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġverify Adapter Position ( count 3 Adapter , Ġ 2 , Ġ 2 , Ġ 2 ) ĊĊĠĠĠĠĠĠĠ Ġverify Adapter Position ( count 5 Adapter , Ġ 0 , Ġ 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġverify Adapter Position ( count 5 Adapter , Ġ 1 , Ġ 1 , Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġverify Adapter Position ( count 5 Adapter , Ġ 2 , Ġ 2 , Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġverify Adapter Position ( count 5 Adapter , Ġ 3 , Ġ 3 , Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġverify Adapter Position ( count 5 Adapter , Ġ 4 , Ġ 4 , Ġ 4 ) ĊĊĠĠĠĠĠĠĠ Ġverify Adapter Position ( count 7 Adapter , Ġ 0 , Ġ 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġverify Adapter Position ( count 7 Adapter , Ġ 1 , Ġ 1 , Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġverify Adapter Position ( count 7 Adapter , Ġ 2 , Ġ 2 , Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġverify Adapter Position ( count 7 Adapter , Ġ 3 , Ġ 3 , Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġverify Adapter Position ( count 7 Adapter , Ġ 4 , Ġ 4 , Ġ 4 ) ĊĠĠĠĠĠĠĠ Ġverify Adapter Position ( count 7 Adapter , Ġ 5 , Ġ 5 , Ġ 5 ) ĊĠĠĠĠĠĠĠ Ġverify Adapter Position ( count 7 Adapter , Ġ 6 , Ġ 6 , Ġ 6 ) ĊĊĠĠĠĠĠĠĠ Ġverify Adapter Position ( concat Count 9 Adapter , Ġ 0 , Ġ 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġverify Adapter Position ( concat Count 9 Adapter , Ġ 1 , Ġ 0 , Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġverify Adapter Position ( concat Count 9 Adapter , Ġ 2 , Ġ 1 , Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġverify Adapter Position ( concat Count 9 Adapter , Ġ 3 , Ġ 2 , Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġverify Adapter Position ( concat Count 9 Adapter , Ġ 4 , Ġ 0 , Ġ 4 ) ĊĠĠĠĠĠĠĠ Ġverify Adapter Position ( concat Count 9 Adapter , Ġ 5 , Ġ 1 , Ġ 5 ) ĊĠĠĠĠĠĠĠ Ġverify Adapter Position ( concat Count 9 Adapter , Ġ 6 , Ġ 2 , Ġ 6 ) ĊĠĠĠĠĠĠĠ Ġverify Adapter Position ( concat Count 9 Adapter , Ġ 7 , Ġ 3 , Ġ 7 ) ĊĠĠĠĠĠĠĠ Ġverify Adapter Position ( concat Count 9 Adapter , Ġ 8 , Ġ 4 , Ġ 8 ) ĊĊĠĠĠĠĠĠĠ Ġverify Adapter Position ( concat Count 1 1 Adapter , Ġ 0 , Ġ 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġverify Adapter Position ( concat Count 1 1 Adapter , Ġ 1 , Ġ 0 , Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġverify Adapter Position ( concat Count 1 1 Adapter , Ġ 2 , Ġ 1 , Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġverify Adapter Position ( concat Count 1 1 Adapter , Ġ 3 , Ġ 2 , Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġverify Adapter Position ( concat Count 1 1 Adapter , Ġ 4 , Ġ 0 , Ġ 4 ) ĊĠĠĠĠĠĠĠ Ġverify Adapter Position ( concat Count 1 1 Adapter , Ġ 5 , Ġ 1 , Ġ 5 ) ĊĠĠĠĠĠĠĠ Ġverify Adapter Position ( concat Count 1 1 Adapter , Ġ 6 , Ġ 2 , Ġ 6 ) ĊĠĠĠĠĠĠĠ Ġverify Adapter Position ( concat Count 1 1 Adapter , Ġ 7 , Ġ 3 , Ġ 7 ) ĊĠĠĠĠĠĠĠ Ġverify Adapter Position ( concat Count 1 1 Adapter , Ġ 8 , Ġ 4 , Ġ 8 ) ĊĠĠĠĠĠĠĠ Ġverify Adapter Position ( concat Count 1 1 Adapter , Ġ 9 , Ġ 5 , Ġ 9 ) ĊĠĠĠĠĠĠĠ Ġverify Adapter Position ( concat Count 1 1 Adapter , Ġ 1 0 , Ġ 6 , Ġ 1 0 ) ĊĊĠĠĠĠĠĠĠ Ġverify Adapter Position ( concat Count 1 3 Adapter , Ġ 0 , Ġ 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġverify Adapter Position ( concat Count 1 3 Adapter , Ġ 1 , Ġ 0 , Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġverify Adapter Position ( concat Count 1 3 Adapter , Ġ 2 , Ġ 1 , Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġverify Adapter Position ( concat Count 1 3 Adapter , Ġ 3 , Ġ 2 , Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġverify Adapter Position ( concat Count 1 3 Adapter , Ġ 4 , Ġ 3 , Ġ 4 ) ĊĠĠĠĠĠĠĠ Ġverify Adapter Position ( concat Count 1 3 Adapter , Ġ 5 , Ġ 4 , Ġ 5 ) ĊĠĠĠĠĠĠĠ Ġverify Adapter Position ( concat Count 1 3 Adapter , Ġ 6 , Ġ 0 , Ġ 6 ) ĊĠĠĠĠĠĠĠ Ġverify Adapter Position ( concat Count 1 3 Adapter , Ġ 7 , Ġ 1 , Ġ 7 ) ĊĠĠĠĠĠĠĠ Ġverify Adapter Position ( concat Count 1 3 Adapter , Ġ 8 , Ġ 2 , Ġ 8 ) ĊĠĠĠĠĠĠĠ Ġverify Adapter Position ( concat Count 1 3 Adapter , Ġ 9 , Ġ 3 , Ġ 9 ) ĊĠĠĠĠĠĠĠ Ġverify Adapter Position ( concat Count 1 3 Adapter , Ġ 1 0 , Ġ 4 , Ġ 1 0 ) ĊĠĠĠĠĠĠĠ Ġverify Adapter Position ( concat Count 1 3 Adapter , Ġ 1 1 , Ġ 5 , Ġ 1 1 ) ĊĠĠĠĠĠĠĠ Ġverify Adapter Position ( concat Count 1 3 Adapter , Ġ 1 2 , Ġ 6 , Ġ 1 2 ) ĊĊĠĠĠĠĠĠĠ Ġverify Adapter Position ( concat N esting Count 1 6 Adapter , Ġ 0 , Ġ 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġverify Adapter Position ( concat N esting Count 1 6 Adapter , Ġ 1 , Ġ 0 , Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġverify Adapter Position ( concat N esting Count 1 6 Adapter , Ġ 2 , Ġ 1 , Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġverify Adapter Position ( concat N esting Count 1 6 Adapter , Ġ 3 , Ġ 2 , Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġverify Adapter Position ( concat N esting Count 1 6 Adapter , Ġ 4 , Ġ 0 , Ġ 4 ) ĊĠĠĠĠĠĠĠ Ġverify Adapter Position ( concat N esting Count 1 6 Adapter , Ġ 5 , Ġ 1 , Ġ 5 ) ĊĠĠĠĠĠĠĠ Ġverify Adapter Position ( concat N esting Count 1 6 Adapter , Ġ 6 , Ġ 2 , Ġ 6 ) ĊĠĠĠĠĠĠĠ Ġverify Adapter Position ( concat N esting Count 1 6 Adapter , Ġ 7 , Ġ 3 , Ġ 7 ) ĊĠĠĠĠĠĠĠ Ġverify Adapter Position ( concat N esting Count 1 6 Adapter , Ġ 8 , Ġ 4 , Ġ 8 ) ĊĠĠĠĠĠĠĠ Ġverify Adapter Position ( concat N esting Count 1 6 Adapter , Ġ 9 , Ġ 0 , Ġ 9 ) ĊĠĠĠĠĠĠĠ Ġverify Adapter Position ( concat N esting Count 1 6 Adapter , Ġ 1 0 , Ġ 1 , Ġ 1 0 ) ĊĠĠĠĠĠĠĠ Ġverify Adapter Position ( concat N esting Count 1 6 Adapter , Ġ 1 1 , Ġ 2 , Ġ 1 1 ) ĊĠĠĠĠĠĠĠ Ġverify Adapter Position ( concat N esting Count 1 6 Adapter , Ġ 1 2 , Ġ 3 , Ġ 1 2 ) ĊĠĠĠĠĠĠĠ Ġverify Adapter Position ( concat N esting Count 1 6 Adapter , Ġ 1 3 , Ġ 4 , Ġ 1 3 ) ĊĠĠĠĠĠĠĠ Ġverify Adapter Position ( concat N esting Count 1 6 Adapter , Ġ 1 4 , Ġ 5 , Ġ 1 4 ) ĊĠĠĠĠĠĠĠ Ġverify Adapter Position ( concat N esting Count 1 6 Adapter , Ġ 1 5 , Ġ 6 , Ġ 1 5 ) ĊĠĠĠ Ġ} Ċ }