package Ġtw . k tr ss reader Ċ Ċ import Ġapp . cash . tur bine . test Ċ import Ġio . mock k .* Ċ import Ġio . mock k . impl . annotations . Rel ax ed Mock K Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġorg . junit . After Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . experimental . runners . En closed Ċ import Ġorg . junit . runner . RunWith Ċ import Ġtw . k tr ss reader . cache . Database R ss Cache Ċ import Ġtw . k tr ss reader . constant . Const Ċ import Ġtw . k tr ss reader . fetcher . Xml Fetcher Ċ import Ġtw . k tr ss reader . kotlin . model . channel . R ss Standard Channel Ċ import Ġtw . k tr ss reader . kotlin . model . channel . R ss Standard Channel Data Ċ import Ġtw . k tr ss reader . parser . Android R ss Standard Parser Ċ import Ġtw . k tr ss reader . provider . Kt R ss Provider Ċ import Ġtw . k tr ss reader . test . common . mock k Rel ax ed Ċ import Ġtw . k tr ss reader . test . common . never Ċ import Ġtw . k tr ss reader . test . common . shouldBe Ċ import Ġtw . k tr ss reader . utils . Thread Utils Ċ Ċ @ RunWith ( En closed :: class ) Ċ class ĠK t R ss Reader Local Test Ġ{ ĊĊĠĠĠ Ġabstract Ġclass ĠReader TestBase Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprotected Ġval Ġfake Url Ġ= Ġ" fake Url " ĊĠĠĠĠĠĠĠ Ġprotected Ġval Ġfake Type Ġ= ĠConst . RSS _ STANDARD ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġfake Xml Content Ġ= Ġ" fake Xml Content " ĊĊĠĠĠĠĠĠĠ Ġ@ Rel ax ed Mock K ĊĠĠĠĠĠĠĠ Ġprotected Ġlateinit Ġvar Ġmock R ss Cache : ĠDatabase R ss Cache < R ss Standard Channel > ĊĊĠĠĠĠĠĠĠ Ġ@ Rel ax ed Mock K ĊĠĠĠĠĠĠĠ Ġprotected Ġlateinit Ġvar Ġmock Fetcher : ĠXml Fetcher ĊĊĠĠĠĠĠĠĠ Ġ@ Rel ax ed Mock K ĊĠĠĠĠĠĠĠ Ġprotected Ġlateinit Ġvar Ġmock Exception : ĠException ĊĊĠĠĠĠĠĠĠ Ġ@ Before ĊĠĠĠĠĠĠĠ Ġfun Ġsetup () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMock K Annotations . init ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmock k Object ( Thread Utils ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmock k Object ( Kt R ss Provider ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ After ĊĠĠĠĠĠĠĠ Ġfun ĠtearDown () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclear All Mocks () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprotected Ġfun Ġmock Get Remote Channel Successfully ( block : Ġ( R ss Standard Channel ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġmock k Rel ax ed < R ss Standard Channel Data >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ ĠThread Utils . is MainThread () Ġ} Ġreturns Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ ĠK t R ss Provider . provide R ss Cache < R ss Standard Channel >() Ġ} Ġreturns Ġmock R ss Cache ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġmock R ss Cache . read Cache ( fake Url , Ġfake Type , Ġany ()) Ġ} Ġreturns Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ ĠK t R ss Provider . provide Xml Fetcher () Ġ} Ġreturns Ġmock Fetcher ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġmock Fetcher . fetch ( url Ġ= Ġfake Url , Ġcharset Ġ= Ġany ()) Ġ} Ġreturns Ġfake Xml Content ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmock k Constructor ( Android R ss Standard Parser :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġany Construct ed < Android R ss Standard Parser >(). parse ( fake Xml Content ) Ġ} Ġreturns Ġexpected ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ ĠThread Utils . run On New Thread ( any (), Ġany ()) Ġ} Ġanswers Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmock R ss Cache . save Cache ( fake Url , Ġexpected ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġblock ( expected ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprotected Ġfun Ġmock Get Remote Channel Failed ( block : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ ĠThread Utils . is MainThread () Ġ} Ġreturns Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ ĠK t R ss Provider . provide R ss Cache < R ss Standard Channel >() Ġ} Ġreturns Ġmock R ss Cache ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ ĠK t R ss Provider . provide Xml Fetcher () Ġ} Ġreturns Ġmock Fetcher ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġmock Fetcher . fetch ( url Ġ= Ġfake Url , Ġcharset Ġ= Ġany ()) Ġ} Ġthrows ĠException () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġblock () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprotected Ġfun Ġmock Get Cache Channel Successfully ( block : Ġ( R ss Standard Channel ) Ġ-> ĠUnit , Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġmock k Rel ax ed < R ss Standard Channel Data >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ ĠThread Utils . is MainThread () Ġ} Ġreturns Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ ĠK t R ss Provider . provide R ss Cache < R ss Standard Channel >() Ġ} Ġreturns Ġmock R ss Cache ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġmock R ss Cache . read Cache ( fake Url , Ġfake Type , Ġany ()) Ġ} Ġreturns Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ ĠK t R ss Provider . provide Xml Fetcher () Ġ} Ġreturns Ġmock Fetcher ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġmock Fetcher . fetch ( any (), Ġany ()) Ġ} Ġreturns Ġfake Xml Content ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmock k Constructor ( Android R ss Standard Parser :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġany Construct ed < Android R ss Standard Parser >(). parse ( fake Xml Content ) Ġ} Ġreturns Ġexpected ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġblock ( expected ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprotected Ġfun Ġmock Get Cache Channel Failed ( block : Ġ( R ss Standard Channel ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġmock k Rel ax ed < R ss Standard Channel Data >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ ĠThread Utils . is MainThread () Ġ} Ġreturns Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ ĠK t R ss Provider . provide R ss Cache < R ss Standard Channel >() Ġ} Ġreturns Ġmock R ss Cache ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġmock R ss Cache . read Cache ( fake Url , Ġfake Type , Ġany ()) Ġ} Ġreturns Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ ĠK t R ss Provider . provide Xml Fetcher () Ġ} Ġreturns Ġmock Fetcher ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġmock Fetcher . fetch ( any (), Ġany ()) Ġ} Ġreturns Ġfake Xml Content ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmock k Constructor ( Android R ss Standard Parser :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġany Construct ed < Android R ss Standard Parser >(). parse ( fake Xml Content ) Ġ} Ġreturns Ġexpected ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ ĠThread Utils . run On New Thread ( any (), Ġany ()) Ġ} Ġanswers Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmock R ss Cache . save Cache ( fake Url , Ġexpected ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġblock ( expected ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprotected Ġfun Ġmock Flush Cache ( block : Ġ( R ss Standard Channel ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġmock k Rel ax ed < R ss Standard Channel Data >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ ĠThread Utils . is MainThread () Ġ} Ġreturns Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ ĠK t R ss Provider . provide R ss Cache < R ss Standard Channel >() Ġ} Ġreturns Ġmock R ss Cache ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġmock R ss Cache . read Cache ( fake Url , Ġfake Type , Ġany ()) Ġ} Ġreturns Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ ĠK t R ss Provider . provide Xml Fetcher () Ġ} Ġreturns Ġmock Fetcher ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġmock Fetcher . fetch ( any (), Ġany ()) Ġ} Ġreturns Ġfake Xml Content ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmock k Constructor ( Android R ss Standard Parser :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġany Construct ed < Android R ss Standard Parser >(). parse ( fake Xml Content ) Ġ} Ġreturns Ġexpected ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġblock ( expected ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprotected Ġfun Ġmock Fetch Data Successfully But Save Cache Failed ( block : Ġ( R ss Standard Channel ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġmock k Rel ax ed < R ss Standard Channel Data >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ ĠThread Utils . is MainThread () Ġ} Ġreturns Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ ĠK t R ss Provider . provide R ss Cache < R ss Standard Channel >() Ġ} Ġreturns Ġmock R ss Cache ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġmock R ss Cache . read Cache ( fake Url , Ġfake Type , Ġany ()) Ġ} Ġreturns Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ ĠK t R ss Provider . provide Xml Fetcher () Ġ} Ġreturns Ġmock Fetcher ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġmock Fetcher . fetch ( any (), Ġany ()) Ġ} Ġreturns Ġfake Xml Content ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmock k Constructor ( Android R ss Standard Parser :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġany Construct ed < Android R ss Standard Parser >(). parse ( fake Xml Content ) Ġ} Ġreturns Ġexpected ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġmock R ss Cache . save Cache ( fake Url , Ġexpected ) Ġ} Ġthrows Ġmock Exception ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġblock ( expected ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠRead Test Ġ: ĠReader TestBase () Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Test ( expected Ġ= ĠException :: class ) ĊĠĠĠĠĠĠĠ Ġfun Ġ` Get Ġchannel Ġon Ġmain Ġthread Ġand Ġreturn Ġerror `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ ĠThread Utils . is MainThread () Ġ} Ġreturns Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠReader . read < R ss Standard Channel >( fake Url ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` Get Ġremote Ġchannel Ġsuccessfully `() Ġ= Ġmock Get Remote Channel Successfully Ġ{ Ġmock Item Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactual Ġ= ĠReader . read < R ss Standard Channel >( fake Url ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuse Cache Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġnever Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmock R ss Cache . read Cache ( fake Url , Ġfake Type , Ġany ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmock R ss Cache . save Cache ( fake Url , Ġmock Item ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactual ĠshouldBe Ġmock Item ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ( expected Ġ= ĠException :: class ) ĊĠĠĠĠĠĠĠ Ġfun Ġ` Get Ġremote Ġchannel Ġfailed `() Ġ= Ġmock Get Remote Channel Failed Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠReader . read < R ss Standard Channel >( fake Url ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuse Cache Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` Get Ġcache Ġchannel Ġsuccessfully `() Ġ= Ġmock Get Cache Channel Successfully Ġ{ Ġmock Item Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactual Ġ= ĠReader . read < R ss Standard Channel >( fake Url ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġactual ĠshouldBe Ġmock Item ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` Get Ġcache Ġchannel Ġfailed `() Ġ= Ġmock Get Cache Channel Failed Ġ{ Ġmock Item Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactual Ġ= ĠReader . read < R ss Standard Channel >( fake Url ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify Ġ{ Ġmock R ss Cache . save Cache ( fake Url , Ġmock Item ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactual ĠshouldBe Ġmock Item ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` Flush Ġcache Ġsuccessfully `() Ġ= Ġmock Flush Cache Ġ{ Ġmock Item Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactual Ġ= ĠReader . read < R ss Standard Channel >( fake Url ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflush Cache Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify Ġ{ Ġmock R ss Cache . remove Cache ( fake Url ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactual ĠshouldBe Ġmock Item ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` Flush Ġcache Ġfailed `() Ġ= Ġmock Flush Cache Ġ{ Ġmock Item Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġmock R ss Cache . remove Cache ( fake Url ) Ġ} Ġthrows Ġmock Exception ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactual Ġ= ĠReader . read < R ss Standard Channel >( fake Url ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflush Cache Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmock R ss Cache . remove Cache ( fake Url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmock Exception . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactual ĠshouldBe Ġmock Item ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` Fetch Ġdata Ġsuccessfully Ġbut Ġsave Ġcache Ġfailed `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmock Fetch Data Successfully But Save Cache Failed Ġ{ Ġmock Item Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactual Ġ= ĠReader . read < R ss Standard Channel >( fake Url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify Ġ{ Ġmock Exception . printStackTrace () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactual ĠshouldBe Ġmock Item ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠFlow Read Test Ġ: ĠReader TestBase () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` Get Ġchannel Ġon Ġmain Ġthread Ġand Ġreturn Ġerror `() Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ ĠThread Utils . is MainThread () Ġ} Ġreturns Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠReader . flow Read < R ss Standard Channel >( fake Url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpect Error () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` Get Ġremote Ġchannel Ġsuccessfully `() Ġ= Ġmock Get Remote Channel Successfully Ġ{ Ġmock Item Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠReader . flow Read < R ss Standard Channel >( fake Url ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuse Cache Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmock Item ĠshouldBe Ġexpect Item () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpect Complete () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` Get Ġremote Ġchannel Ġfailed `() Ġ= Ġmock Get Remote Channel Failed Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠReader . flow Read < R ss Standard Channel >( fake Url ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuse Cache Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpect Error () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` Get Ġcache Ġchannel Ġsuccessfully `() Ġ= Ġmock Get Cache Channel Successfully Ġ{ Ġmock Item Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠReader . flow Read < R ss Standard Channel >( fake Url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmock Item ĠshouldBe Ġexpect Item () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpect Complete () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` Get Ġcache Ġchannel Ġfailed `() Ġ= Ġmock Get Cache Channel Failed Ġ{ Ġmock Item Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠReader . flow Read < R ss Standard Channel >( fake Url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify Ġ{ Ġmock R ss Cache . save Cache ( fake Url , Ġmock Item ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmock Item ĠshouldBe Ġexpect Item () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpect Complete () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` Flush Ġcache Ġsuccessfully `() Ġ= Ġmock Flush Cache Ġ{ Ġmock Item Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠReader . flow Read < R ss Standard Channel >( fake Url ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflush Cache Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify Ġ{ Ġmock R ss Cache . remove Cache ( fake Url ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmock Item ĠshouldBe Ġexpect Item () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpect Complete () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` Flush Ġcache Ġfailed `() Ġ= Ġmock Flush Cache Ġ{ Ġmock Item Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġmock R ss Cache . remove Cache ( fake Url ) Ġ} Ġthrows Ġmock Exception ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠReader . flow Read < R ss Standard Channel >( fake Url ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflush Cache Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmock R ss Cache . remove Cache ( fake Url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmock Exception . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmock Item ĠshouldBe Ġexpect Item () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpect Complete () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` Fetch Ġdata Ġsuccessfully Ġbut Ġsave Ġcache Ġfailed `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmock Fetch Data Successfully But Save Cache Failed Ġ{ Ġmock Item Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠReader . flow Read < R ss Standard Channel >( fake Url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify Ġ{ Ġmock Exception . printStackTrace () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmock Item ĠshouldBe Ġexpect Item () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpect Complete () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠCor outine Read Test Ġ: ĠReader TestBase () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ@ Test ( expected Ġ= ĠException :: class ) ĊĠĠĠĠĠĠĠ Ġfun Ġ` Get Ġchannel Ġon Ġmain Ġthread Ġand Ġreturn Ġerror `() Ġ= Ġrun Blocking < Unit > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ ĠThread Utils . is MainThread () Ġ} Ġreturns Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠReader . co Read < R ss Standard Channel >( fake Url ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` Get Ġremote Ġchannel Ġsuccessfully `() Ġ= Ġmock Get Remote Channel Successfully Ġ{ Ġmock Item Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactual Ġ= ĠReader . co Read < R ss Standard Channel >( fake Url ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuse Cache Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactual ĠshouldBe Ġmock Item ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ( expected Ġ= ĠException :: class ) ĊĠĠĠĠĠĠĠ Ġfun Ġ` Get Ġremote Ġchannel Ġfailed `() Ġ= Ġmock Get Remote Channel Failed Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠReader . co Read < R ss Standard Channel >( fake Url ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuse Cache Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` Get Ġcache Ġchannel Ġsuccessfully `() Ġ= Ġmock Get Cache Channel Successfully Ġ{ Ġmock Item Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactual Ġ= ĠReader . co Read < R ss Standard Channel >( fake Url ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactual ĠshouldBe Ġmock Item ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` Get Ġcache Ġchannel Ġfailed `() Ġ= Ġmock Get Cache Channel Failed Ġ{ Ġmock Item Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactual Ġ= ĠReader . co Read < R ss Standard Channel >( fake Url ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify Ġ{ Ġmock R ss Cache . save Cache ( fake Url , Ġmock Item ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactual ĠshouldBe Ġmock Item ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` Flush Ġcache Ġsuccessfully `() Ġ= Ġmock Flush Cache Ġ{ Ġmock Item Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactual Ġ= ĠReader . co Read < R ss Standard Channel >( fake Url ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflush Cache Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify Ġ{ Ġmock R ss Cache . remove Cache ( fake Url ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactual ĠshouldBe Ġmock Item ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` Flush Ġcache Ġfailed `() Ġ= Ġmock Flush Cache Ġ{ Ġmock Item Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġmock R ss Cache . remove Cache ( fake Url ) Ġ} Ġthrows Ġmock Exception ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactual Ġ= ĠReader . co Read < R ss Standard Channel >( fake Url ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflush Cache Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmock R ss Cache . remove Cache ( fake Url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmock Exception . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactual ĠshouldBe Ġmock Item ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Test ĊĠĠĠĠĠĠĠ Ġfun Ġ` Fetch Ġdata Ġsuccessfully Ġbut Ġsave Ġcache Ġfailed `() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmock Fetch Data Successfully But Save Cache Failed Ġ{ Ġmock Item Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactual Ġ= ĠReader . co Read < R ss Standard Channel >( fake Url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify Ġ{ Ġmock Exception . printStackTrace () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactual ĠshouldBe Ġmock Item ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }