package Ġcom . a . get m imo . ui Ċ Ċ import Ġandroidx . arch . core . executor . testing . Instant Task Executor Rule Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġcom . a . get m imo . default Resource Ċ import Ġcom . a . get m imo . domain . entity . networking . Resource Ċ import Ġcom . a . get m imo . domain . entity . networking . Status Ċ import Ġcom . a . get m imo . domain . use cases . Get Less ons Ċ import Ġcom . a . get m imo . empty Resource Ċ import Ġcom . a . get m imo . three Resource Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . verify Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . wh enever Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġorg . junit . Assert . assertEquals Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ import Ġorg . mockito . Mock Ċ import Ġorg . mockito . junit . Mockito JUnit Runner Ċ Ċ @ RunWith ( Mockito JUnit Runner :: class ) Ċ class ĠMain ViewModel Test Ġ{ ĊĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġval Ġrule Ġ= ĠInstant Task Executor Rule () ĊĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġlateinit Ġvar Ġget Less ons : ĠGet Less ons ĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġlateinit Ġvar Ġobserver : ĠObserver < Main ViewModel . Ui Model > ĊĊĠĠĠ Ġlateinit Ġvar Ġmain ViewModel : ĠMain ViewModel ĊĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun Ġsetup () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġmain ViewModel Ġ= ĠMain ViewModel ( get Less ons , ĠDispatch ers . Un conf ined ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` refresh ing Ġcontent `() Ġ{ ĊĠĠĠĠĠĠĠ Ġmain ViewModel . model . observe Fore ver ( observer ) ĊĊĠĠĠĠĠĠĠ Ġverify ( observer ). on Changed ( Main ViewModel . Ui Model . Request Check Internet ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` launch ing Ġloading `() Ġ{ ĊĠĠĠĠĠĠĠ Ġmain ViewModel . model . observe Fore ver ( observer ) ĊĠĠĠĠĠĠĠ Ġmain ViewModel . my Launch () ĊĊĠĠĠĠĠĠĠ Ġverify ( observer ). on Changed ( Main ViewModel . Ui Model . Loading ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` launch ing Ġempty Ġcontent `() Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( get Less ons . invoke ()). thenReturn ( empty Resource ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmain ViewModel . model . observe Fore ver ( observer ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmain ViewModel . my Launch () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġless ons Ġ= Ġget Less ons . invoke (). data ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( observer ). on Changed ( Main ViewModel . Ui Model . Request Check Internet ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( observer ). on Changed ( Main ViewModel . Ui Model . Show Empty Data ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( lessons , Ġempty Resource . data ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` launch ing Ġnull Ġcontent Ġwith Ġsuccess Ġstatus `() Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresource Ġ= ĠResource ( Status . SUCCESS , Ġnull , Ġ"") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( get Less ons . invoke ()). thenReturn ( resource ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmain ViewModel . model . observe Fore ver ( observer ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmain ViewModel . my Launch () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġless ons Ġ= Ġget Less ons . invoke (). data ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( observer ). on Changed ( Main ViewModel . Ui Model . Request Check Internet ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( observer ). on Changed ( Main ViewModel . Ui Model . Show Error Call ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( lessons , Ġresource . data ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` launch ing Ġnull Ġcontent Ġwith Ġerror Ġstatus `() Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresource Ġ= ĠResource ( Status . ERROR , Ġnull , Ġ"") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( get Less ons . invoke ()). thenReturn ( resource ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmain ViewModel . model . observe Fore ver ( observer ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmain ViewModel . my Launch () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġless ons Ġ= Ġget Less ons . invoke (). data ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( observer ). on Changed ( Main ViewModel . Ui Model . Request Check Internet ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( observer ). on Changed ( Main ViewModel . Ui Model . Show Error Call ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( lessons , Ġresource . data ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` getting Ġless ons Ġwithout Ġinternet `() Ġ{ ĊĠĠĠĠĠĠĠ Ġmain ViewModel . model . observe Fore ver ( observer ) ĊĠĠĠĠĠĠĠ Ġmain ViewModel . check Internet ( false ) ĊĊĠĠĠĠĠĠĠ Ġverify ( observer ). on Changed ( Main ViewModel . Ui Model . Show Can Check Your Internet ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` getting Ġless ons `() Ġ{ ĊĠĠĠĠĠĠĠ Ġmain ViewModel . model . observe Fore ver ( observer ) ĊĠĠĠĠĠĠĠ Ġmain ViewModel . check Internet ( true ) ĊĊĠĠĠĠĠĠĠ Ġverify ( observer ). on Changed ( Main ViewModel . Ui Model . Loading ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` launch ing Ġone Ġcontent `() Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( get Less ons . invoke ()). thenReturn ( default Resource ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmain ViewModel . model . observe Fore ver ( observer ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmain ViewModel . my Launch () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġless ons Ġ= Ġget Less ons . invoke (). data ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( observer ). on Changed ( Main ViewModel . Ui Model . Request Check Internet ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( observer ). on Changed ( Main ViewModel . Ui Model . Loading ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( lessons , Ġdefault Resource . data !! ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` launch ing Ġthree Ġcontent `() Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( get Less ons . invoke ()). thenReturn ( three Resource ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmain ViewModel . model . observe Fore ver ( observer ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmain ViewModel . my Launch () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġless ons Ġ= Ġget Less ons . invoke (). data ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( observer ). on Changed ( Main ViewModel . Ui Model . Request Check Internet ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( observer ). on Changed ( Main ViewModel . Ui Model . Loading ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( observer ). on Changed ( Main ViewModel . Ui Model . Show Text (" text "," text ")) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( lessons , Ġthree Resource . data !! ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` checking Ġsolution `() Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( get Less ons . invoke ()). thenReturn ( three Resource ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmain ViewModel . model . observe Fore ver ( observer ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmain ViewModel . my Launch () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġless ons Ġ= Ġget Less ons . invoke (). data ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmain ViewModel . check Solution ("") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( observer ). on Changed ( Main ViewModel . Ui Model . Show Empty Input ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` checking Ġok Ġsolution `() Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( get Less ons . invoke ()). thenReturn ( three Resource ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmain ViewModel . model . observe Fore ver ( observer ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmain ViewModel . my Launch () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġless ons Ġ= Ġget Less ons . invoke (). data ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmain ViewModel . check Solution (" text ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( observer ). on Changed ( Main ViewModel . Ui Model . Request Check Internet ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( observer ). on Changed ( Main ViewModel . Ui Model . Loading ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( observer ). on Changed ( Main ViewModel . Ui Model . Show Text (" text ", Ġ" text ")) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( lessons , Ġthree Resource . data !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( observer ). on Changed ( Main ViewModel . Ui Model . Enable Button ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` checking Ġwrong Ġsolution `() Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhenever ( get Less ons . invoke ()). thenReturn ( three Resource ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmain ViewModel . model . observe Fore ver ( observer ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmain ViewModel . my Launch () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġless ons Ġ= Ġget Less ons . invoke (). data ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmain ViewModel . check Solution (" t et ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( observer ). on Changed ( Main ViewModel . Ui Model . Request Check Internet ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( observer ). on Changed ( Main ViewModel . Ui Model . Loading ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( observer ). on Changed ( Main ViewModel . Ui Model . Show Text (" text ", Ġ" text ")) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( lessons , Ġthree Resource . data !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( observer ). on Changed ( Main ViewModel . Ui Model . Disable Button ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }