package Ġcom . base . application Ċ Ċ import Ġandroidx . arch . core . executor . testing . Instant Task Executor Rule Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . live Data Ċ import Ġcom . base . common . ID is patch ers Ċ import Ġcom . base . common . domain . Loading Progress Result Ċ import Ġcom . base . common . domain . Loading Result Ċ import Ġcom . base . tests _ common . Main Coroutine Rule Ċ import Ġcom . base . tests _ common . Test Dispatch ers Ċ import Ġcom . base . tests _ common . capture Values Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ import Ġkotlinx . coroutines . test . advance Until Idle Ċ import Ġkotlinx . coroutines . test . run Test Ċ import Ġorg . junit . Assert Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ Ċ @ Experimental Cor outines Api Ċ class ĠExample ViewModel One Shot Test Ġ{ ĊĠĠĠ Ġ@ Experimental Cor outines Api ĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġvar Ġmain Coroutine Rule Ġ= ĠMain Coroutine Rule () ĊĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġvar Ġinstant Executor Rule Ġ= ĠInstant Task Executor Rule () ĊĊĠĠĠ Ġprivate Ġval Ġtest Dispatch ers Ġ= ĠTest Dispatch ers () ĊĠĠĠ Ġprivate Ġval Ġtest Success Ġ= ĠResult . success ( 2 ) ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠTest ViewModel ( ĊĠĠĠĠĠĠĠ Ġval Ġdispatch ers : ĠI Dispatch ers ĊĠĠĠ Ġ) Ġ: ĠViewModel () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsingle Shot Loading Result LiveData Ġ= Ġlive Data Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( Loading Result . Loading ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( Loading Result . Result ( result Ġ= Ġtest Success )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġsingle Shot Loading With Progress Result LiveData Ġ= Ġlive Data ( dispatch ers . Default ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( progress Ġin Ġ 0 .. 1 0 0 Ġstep Ġ 1 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( Loading Progress Result . Loading ( progress )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( Loading Progress Result . Result ( test Success )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Test ViewModel Ġgiven , Ġwhen Ġget Ġsingle Shot Loading Result LiveData , Ġthen Ġthe Ġlive Ġdata Ġreturn Ġloading Ġfollowed Ġby Ġresult `() Ġ= ĊĠĠĠĠĠĠĠ Ġrun Test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtest ViewModel Ġ= ĠTest ViewModel ( dispatch ers Ġ= Ġtest Dispatch ers ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtest ViewModel . single Shot Loading Result LiveData . capture Values Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadvance Until Idle () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarray ListOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLoading Result . Loading , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLoading Result . Result ( test Success ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalues ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Test ViewModel Ġgiven , Ġwhen Ġget Ġsingle Shot Loading With Progress Result LiveData , Ġthen Ġthe Ġlive Ġdata Ġreturn Ġload ings Ġwith Ġprog resses Ġfollowed Ġby Ġresult `() Ġ= ĊĠĠĠĠĠĠĠ Ġrun Test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtest ViewModel Ġ= ĠTest ViewModel ( dispatch ers Ġ= Ġtest Dispatch ers ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtest ViewModel . single Shot Loading With Progress Result LiveData . capture Values Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadvance Until Idle () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ(( index , Ġprogress ) Ġin Ġ( 0 .. 1 0 0 Ġstep Ġ 1 0 ). with Index ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( Loading Progress Result . Loading ( progress ), Ġvalues [ index ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( Loading Progress Result . Result ( test Success ), Ġvalues [ 1 1 ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ċ } Ċ