package Ġca . c ply on . co int ime . ui . main Ċ Ċ import Ġandroidx . arch . core . executor . testing . Instant Task Executor Rule Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġca . c ply on . co int ime . Main Coroutine Rule Ċ import Ġca . c ply on . co int ime . data . Coin Ċ import Ġca . c ply on . co int ime . data . source . Fake Coin Repository Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ import Ġorg . junit . Assert Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ Ċ class ĠCoin List ViewModel UnitTest Ġ{ ĊĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġvar Ġinstant Executor Rule Ġ= ĠInstant Task Executor Rule () ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġfake Repository : ĠFake Coin Repository ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġvm : ĠCoin List ViewModel ĊĊĠĠĠ Ġ@ Experimental Cor outines Api ĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġvar Ġmain Coroutine Rule Ġ= ĠMain Coroutine Rule () ĊĊĠĠĠ Ġprivate Ġval Ġcoins Ġ= ĠlistOf ( Coin (" Dummy ", Ġ" Dummy ", Ġ 0 , Ġ" Dummy ", Ġ" Dummy ")) ĊĊĠĠĠ Ġ@ Experimental Cor outines Api ĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun ĠsetUp ViewModel () Ġ{ ĊĠĠĠĠĠĠĠ Ġfake Repository Ġ= ĠFake Coin Repository ( coins ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġfilter Coins _ success () Ġ{ ĊĠĠĠĠĠĠĠ Ġfake Repository . set Return Error ( false ) ĊĠĠĠĠĠĠĠ Ġval Ġobserver Ġ= ĠObserver < List < Coin >> Ġ{} ĊĠĠĠĠĠĠĠ Ġvm Ġ= ĠCoin List ViewModel ( fake Repository ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvm . items . observe Fore ver ( observer ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( vm . items . value , Ġcoins ) ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvm . items . remove Observer ( observer ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġfilter Coins _ failure () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġobserver Ġ= ĠObserver < List < Coin >> Ġ{} ĊĠĠĠĠĠĠĠ Ġfake Repository . set Return Error ( true ) ĊĠĠĠĠĠĠĠ Ġvm Ġ= ĠCoin List ViewModel ( fake Repository ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvm . items . observe Fore ver ( observer ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( vm . items . value , Ġempty List < Coin >()) ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvm . items . remove Observer ( observer ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġload Image _ failure () Ġ{ ĊĠĠĠĠĠĠĠ Ġfake Repository . set Return Error ( true ) ĊĠĠĠĠĠĠĠ Ġvm Ġ= ĠCoin List ViewModel ( fake Repository ) ĊĠĠĠĠĠĠĠ ĠAssert . assertNull ( vm . load Image (" fake _ path ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġfactory _ success () Ġ{ ĊĠĠĠĠĠĠĠ Ġfake Repository . set Return Error ( false ) ĊĠĠĠĠĠĠĠ Ġval Ġobserver Ġ= ĠObserver < List < Coin >> Ġ{} ĊĠĠĠĠĠĠĠ Ġval Ġvm Ġ= ĠCoin List ViewModel Factory ( fake Repository ). create ( Coin List ViewModel :: class . java ) ĊĠĠĠĠĠĠĠ ĠAssert . assertNotNull ( vm ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvm . items . observe Fore ver ( observer ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( vm . items . value , Ġcoins ) ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvm . items . remove Observer ( observer ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ