package Ġcom . l uk as le ch ner . coroutine use case son android . use cases . coroutines . use case 1 0 Ċ Ċ import Ġandroidx . arch . core . executor . testing . Instant Task Executor Rule Ċ import Ġcom . l uk as le ch ner . coroutine use case son android . utils . Main Coroutine Scope Rule Ċ import Ġkotlinx . coroutines . test . run Blocking Test Ċ import Ġorg . junit . Assert Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . rules . Test Rule Ċ Ċ class ĠCalcul ation In Background ViewModel Test Ġ{ ĊĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġval Ġtest Instant Task Executor Rule : ĠTest Rule Ġ= ĠInstant Task Executor Rule () ĊĊĠĠĠ Ġ@ get : ĠRule ĊĠĠĠ Ġval Ġmain Coroutine Scope Rule : ĠMain Coroutine Scope Rule Ġ= ĠMain Coroutine Scope Rule () ĊĊĠĠĠ Ġprivate Ġval Ġreceived Ui States Ġ= Ġmutable ListOf < Ui State >() ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` perform Calculation () Ġshould Ġperform Ġcorrect Ġcalculations `() Ġ= ĊĠĠĠĠĠĠĠ Ġmain Coroutine Scope Rule . run Blocking Test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠviewModel Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCalcul ation In Background ViewModel ( main Coroutine Scope Rule . test Dispatcher ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobserve () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertTrue ( received Ui States . isEmpty ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . perform Calculation ( 1 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUi State . Loading , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreceived Ui States . first () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 1 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( received Ui States [ 1 ] Ġas ĠUi State . Success ). result ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreceived Ui States . clear () ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . perform Calculation ( 2 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUi State . Loading , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreceived Ui States . first () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 2 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( received Ui States [ 1 ] Ġas ĠUi State . Success ). result ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreceived Ui States . clear () ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . perform Calculation ( 3 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUi State . Loading , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreceived Ui States . first () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 6 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( received Ui States [ 1 ] Ġas ĠUi State . Success ). result ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠCalcul ation In Background ViewModel . observe () Ġ{ ĊĠĠĠĠĠĠĠ Ġui State (). observe Fore ver Ġ{ Ġui State Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ui State Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreceived Ui States . add ( ui State ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }