/* Ċ Ġ* ĠCopyright Ġ 2 0 1 8 Ġ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 . activity Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroidx . lifecycle . Lifecycle Ċ import Ġandroidx . lifecycle . Lifecycle Event Observer Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . lifecycle . ViewModel Store Ċ import Ġandroidx . test . annotation . Ui Thread Test Ċ import Ġandroidx . test . ext . junit . runners . Android JUnit 4 Ċ import Ġandroidx . test . filters . Medium Test Ċ import Ġandroidx . test . rule . Activity Test Rule Ċ import Ġcom . google . common . truth . Truth . assertThat Ċ import Ġcom . google . common . truth . Truth . assert With Message Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ import Ġjava . util . concurrent . Count DownLatch Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ @ Medium Test Ċ @ RunWith ( Android JUnit 4 :: class ) Ċ class ĠComponent Activity ViewModel Test Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTIME OUT Ġ= Ġ 2 Ġ// Ġsecs ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġvar Ġactivity Rule Ġ= ĠActivity Test Rule ( ViewModel Activity :: class . java ) ĊĊĠĠĠ Ġ@ Test ( expected Ġ= ĠIllegalStateException :: class ) ĊĠĠĠ Ġ@ Ui Thread Test ĊĠĠĠ Ġfun Ġtest Not Attached Activity () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠThis Ġis Ġsimilar Ġto Ġcalling Ġget ViewModel Store Ġin ĠActivity 's Ġconstructor ĊĠĠĠĠĠĠĠ ĠComponent Activity (). viewModel Store ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Same ViewModel Store Pre Post On Create () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġactivity Ġ= Ġactivity Rule . activity ĊĠĠĠĠĠĠĠ Ġassert With Message ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Pre - onCreate () ĠViewModel Store Ġshould Ġequal Ġthe Ġpost - onCreate () ĠViewModel Store ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. that ( activity . pre On Create ViewModel Store ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. is Same As ( activity . post On Create ViewModel Store ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Same Activity ViewModels () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġactivity Model Ġ= ĠarrayOf Null s < Test ViewModel >( 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġdefault Activity Model Ġ= ĠarrayOf Null s < Test ViewModel >( 1 ) ĊĠĠĠĠĠĠĠ Ġval ĠviewModel Activity Ġ= Ġactivity Rule . activity ĊĠĠĠĠĠĠĠ Ġactivity Rule . run On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity Model [ 0 ] Ġ= ĠviewModel Activity . activity Model ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdefault Activity Model [ 0 ] Ġ= ĠviewModel Activity . default Activity Model ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( default Activity Model [ 0 ]). isNot Same As ( activity Model [ 0 ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġre created Activity Ġ= Ġrecreate Activity ( activity Rule ) ĊĠĠĠĠĠĠĠ Ġactivity Rule . run On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( re created Activity . activity Model ). is Same As ( activity Model [ 0 ]) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( re created Activity . default Activity Model ). is Same As ( default Activity Model [ 0 ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Throws ( Throwable :: class ) ĊĠĠĠ Ġfun Ġtest Activity On Cle ared () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġactivity Ġ= Ġactivity Rule . activity ĊĠĠĠĠĠĠĠ Ġval Ġl atch Ġ= ĠCount DownLatch ( 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġobserver Ġ= ĠLifecycle Event Observer Ġ{ Ġ_, Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( event Ġ== ĠLifecycle . Event . ON _ DESTROY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . window . decor View . post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( activity . activity Model . cleared ). isTrue () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( activity . default Activity Model . cleared ). isTrue () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġl atch . count Down () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġactivity Rule . run On Ui Thread Ġ{ Ġactivity . lifecycle . add Observer ( observer ) Ġ} ĊĠĠĠĠĠĠĠ Ġactivity . finish () ĊĠĠĠĠĠĠĠ ĠassertThat ( latch . await ( TIMEOUT . to Long (), ĠTimeUnit . SECONDS )). isTrue () ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠViewModel Activity Ġ: ĠComponent Activity () Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠKEY _ ACTIVITY _ MODEL Ġ= Ġ" activity - model " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġlateinit Ġvar Ġpre On Create ViewModel Store : ĠViewModel Store ĊĠĠĠ Ġlateinit Ġvar Ġpost On Create ViewModel Store : ĠViewModel Store ĊĠĠĠ Ġlateinit Ġvar Ġactivity Model : ĠTest ViewModel ĊĠĠĠ Ġlateinit Ġvar Ġdefault Activity Model : ĠTest ViewModel ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġpre On Create ViewModel Store Ġ= ĠviewModel Store ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġpost On Create ViewModel Store Ġ= ĠviewModel Store ĊĊĠĠĠĠĠĠĠ Ġval ĠviewModel Provider Ġ= ĠViewModel Provider ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠViewModel Provider . New Instance Factory () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġactivity Model Ġ= ĠviewModel Provider . get ( KEY _ ACTIVITY _ MODEL , ĠTest ViewModel :: class . java ) ĊĠĠĠĠĠĠĠ Ġdefault Activity Model Ġ= ĠviewModel Provider . get ( Test ViewModel :: class . java ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠTest ViewModel Ġ: ĠViewModel () Ġ{ ĊĠĠĠ Ġvar Ġcleared Ġ= Ġfalse ĊĊĠĠĠ Ġoverride Ġfun Ġon Cle ared () Ġ{ ĊĠĠĠĠĠĠĠ Ġcleared Ġ= Ġtrue ĊĠĠĠ Ġ} Ċ }