package Ġcom . example . android . architecture . blueprint s . todo app . data . source Ċ Ċ import Ġcom . example . android . architecture . blueprint s . todo app . Main Coroutine Rule Ċ import Ġcom . example . android . architecture . blueprint s . todo app . data . Result . Error Ċ import Ġcom . example . android . architecture . blueprint s . todo app . data . Result . Success Ċ import Ġcom . example . android . architecture . blueprint s . todo app . data . Task Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ import Ġkotlinx . coroutines . test . run Blocking Test Ċ import Ġorg . hamcrest . core . Is Equal Ċ import Ġorg . junit . Assert .* Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ Ċ class ĠDefault Tasks Repository Test Ġ{ ĊĠĠĠ Ġprivate Ġval Ġtask 1 Ġ= ĠTask (" Task 1 ", Ġ" description Ġ 1 ") ĊĠĠĠ Ġprivate Ġval Ġtask 2 Ġ= ĠTask (" Task 2 ", Ġ" description Ġ 2 ") ĊĠĠĠ Ġprivate Ġval Ġtask 3 Ġ= ĠTask (" Task 3 ", Ġ" description Ġ 3 ") ĊĊĠĠĠ Ġprivate Ġval Ġremote Tasks Ġ= ĠlistOf ( task 1 , Ġtask 2 ). sorted By Ġ{ Ġit . id Ġ} ĊĠĠĠ Ġprivate Ġval Ġlocal Tasks Ġ= ĠlistOf ( task 3 ). sorted By Ġ{ Ġit . id Ġ} ĊĠĠĠ Ġprivate Ġval Ġnew Tasks Ġ= ĠlistOf ( task 3 ). sorted By Ġ{ Ġit . id Ġ} ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtask Remote DataSource : ĠFake DataSource ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtask Local DataSource : ĠFake DataSource ĊĠĠĠ Ġ// Ġclass Ġto Ġtest ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtasks Repository : ĠDefault Tasks Repository ĊĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġvar Ġmain Coroutine Rule Ġ= ĠMain Coroutine Rule () ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun Ġcreate Repository (){ ĊĠĠĠĠĠĠĠ Ġtask Remote DataSource Ġ= ĠFake DataSource ( remote Tasks . to Mutable List ()) ĊĠĠĠĠĠĠĠ Ġtask Local DataSource Ġ= ĠFake DataSource ( local Tasks . to Mutable List ()) ĊĠĠĠĠĠĠĠ Ġ// Ġhere Ġwe Ġinit Ġour Ġclass Ġto Ġtest ĊĠĠĠĠĠĠĠ Ġtasks Repository = ĠDefault Tasks Repository ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtask Remote DataSource , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtask Local DataSource , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġsince Ġwe Ġare Ġusing ĠMain Coroutine Rule ĠDispatcher . Main Ġis Ġswap ed Ġwith ĠTest Coroutine Dispatcher ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDispatch ers . Main ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġ// Ġwe Ġuse ĠCor outines Api Ġto Ġrun Ġsus pended Ġfunctions Ġwith Ġrun Blocking Test , Ġwe Ġadd ĠAnnotation Ġto Ġavoid Ġlint ing Ġerrors ĊĠĠĠ Ġ@ Experimental Cor outines Api ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġget Tasks _ requests All Tasks From Remote DataSource () = Ġmain Coroutine Rule . run Blocking Test { ĊĠĠĠĠĠĠĠ Ġ// ĠWhen Ġtasks Ġare Ġrequested Ġfrom Ġthe Ġtasks Ġrepository ĊĠĠĠĠĠĠĠ Ġval Ġtasks Ġ= Ġtasks Repository . get Tasks ( true ) Ġas ĠSuccess ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen Ġtasks Ġare Ġloaded Ġfrom Ġthe Ġremote Ġdata Ġsource ĊĠĠĠĠĠĠĠ ĠassertThat ( tasks . data , ĠIs Equal ( remote Tasks )) ĊĊĠĠĠ Ġ} ĊĊĊĊ Ċ }