package Ġcom . re vol ut . d un no Ċ Ċ import Ġandroidx . arch . core . executor . testing . Instant Task Executor Rule Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġcom . re vol ut . d un no . Currency Rates Refresh er . Companion . EMPTY _ CUR RE NCY _ RATE Ċ import Ġokhttp 3 . mock webserver . Mock Response Ċ import Ġokhttp 3 . mock webserver . Mock WebServer Ċ import Ġorg . junit . Assert Ċ import Ġorg . junit . Test Ċ Ċ import Ġorg . junit . Assert .* Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Rule Ċ import Ġjava . util . concurrent . Count DownLatch Ċ import Ġjava . util . concurrent . TimeUnit Ċ import Ġjava . util . concurrent . TimeUnit . SECONDS Ċ Ċ /** Ċ Ġ* ĠExample Ġlocal Ġunit Ġtest , Ġwhich Ġwill Ġexecute Ġon Ġthe Ġdevelopment Ġmachine Ġ( host ). Ċ Ġ* Ċ Ġ* ĠSee Ġ[ testing Ġdocumentation ]( http :// d . android . com / tools / testing ). Ċ Ġ*/ Ċ class ĠCurrency Rates Refresh er Test Ġ{ ĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġprivate Ġconst Ġval ĠFA KE _ JSON Ġ= ĊĠĠĠĠĠ Ġ"{\" base \":\" EUR \",\" date \":\" 2 0 1 8 - 0 9 - 0 6 \",\" rates \":{\" AUD \": 1 . 6 1 3 7 ,\" B GN \": 1 . 9 5 2 6 ,\" B RL \": 4 . 7 8 3 9 ,\" CAD \": 1 . 5 3 1 3 ,\" CH F \": 1 . 1 2 5 6 ,\" CN Y \": 7 . 9 3 2 1 ,\" CZ K \": 2 5 . 6 7 3 ,\" DK K \": 7 . 4 4 4 5 ,\" GBP \": 0 . 8 9 6 7 7 ,\" HK D \": 9 . 1 1 7 4 ,\" HR K \": 7 . 4 2 1 9 ,\" HU F \": 3 2 5 . 9 5 ,\" IDR \": 1 7 2 9 5 . 0 ,\" IL S \": 4 . 1 6 3 8 ,\" IN R \": 8 3 . 5 8 ,\" IS K \": 1 2 7 . 5 9 ,\" J PY \": 1 2 9 . 3 4 ,\" K RW \": 1 3 0 2 . 6 ,\" MX N \": 2 2 . 3 2 9 ,\" MY R \": 4 . 8 0 4 1 ,\" NO K \": 9 . 7 6 ,\" NZ D \": 1 . 7 6 0 4 ,\" PHP \": 6 2 . 4 8 9 ,\" PL N \": 4 . 3 1 1 2 ,\" RON \": 4 . 6 3 0 9 ,\" R UB \": 7 9 . 4 4 4 ,\" SE K \": 1 0 . 5 7 3 ,\" SG D \": 1 . 5 9 7 4 ,\" THB \": 3 8 . 0 6 7 ,\" TRY \": 7 . 6 1 5 7 ,\" USD \": 1 . 1 6 1 5 ,\" Z AR \": 1 7 . 7 9 4 }}" ĊĠ Ġ} ĊĊĠ Ġ@ Rule ĊĠ Ġ@ Jvm Field ĊĠ Ġval Ġinstant Executor Rule Ġ= ĠInstant Task Executor Rule () ĊĊĠ Ġval Ġcurrency Refresh er Ġ= ĠCurrency Rates Refresh er ( Network Module . ret rofit ) ĊĊĠ Ġ@ Before ĊĠ Ġfun Ġinit () Ġ{ ĊĠĠĠ Ġcurrency Refresh er . set Currency (" EUR ") ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġ` test Ġrefresh er Ġexecutes Ġrepeated Ġtask `() Ġ{ ĊĠĠĠ Ġval Ġtimes Ġ= Ġ 5 ĊĊĠĠĠ Ġval Ġserver Ġ= ĠMock WebServer () ĊĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġtimes ) Ġ{ ĊĠĠĠĠĠ Ġserver . enqueue ( Mock Response (). set Body ( FA KE _ JSON )) ĊĠĠĠ Ġ} ĊĠĠĠ Ġserver . start () ĊĊĠĠĠ Ġval Ġl atch Ġ= ĠCount DownLatch ( times ) ĊĊĠĠĠ Ġval Ġobserver Ġ= ĠObserver < Currency Rates > Ġ{ ĊĠĠĠĠĠ Ġl atch . count Down () ĊĊĠĠĠĠĠ Ġassert Not Equals ( currency Refresh er . current Rates , ĠCurrency Rates Refresh er . EMPTY _ CUR RE NCY _ RATE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcurrency Refresh er . live Rates . observe Fore ver ( observer ) ĊĠĠĠ Ġcurrency Refresh er . start () ĊĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠ ĠassertTrue ( latch . await ( 7 , ĠSE CON DS )) ĊĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠ Ġcurrency Refresh er . live Rates . remove Observer ( observer ) ĊĠĠĠĠĠ Ġserver . shutdown () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġ` test Ġrefresh Ġstops Ġrepeated Ġtask `() Ġ{ ĊĠĠĠ Ġval Ġtimes Ġ= Ġ 5 ĊĊĠĠĠ Ġval Ġserver Ġ= ĠMock WebServer () ĊĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġtimes ) Ġ{ ĊĠĠĠĠĠ Ġserver . enqueue ( Mock Response (). set Body ( FA KE _ JSON )) ĊĠĠĠ Ġ} ĊĠĠĠ Ġserver . start () ĊĊĠĠĠ Ġval Ġl atch Ġ= ĠCount DownLatch ( times ) ĊĊĠĠĠ Ġval Ġobserver Ġ= ĠObserver < Currency Rates > Ġ{ ĊĠĠĠĠĠ Ġl atch . count Down () ĊĊĠĠĠĠĠ Ġif Ġ( latch . count Ġ== Ġ 2 L ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcurrency Refresh er . stop () ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcurrency Refresh er . live Rates . observe Fore ver ( observer ) ĊĠĠĠ Ġcurrency Refresh er . start () ĊĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠ ĠassertFalse ( latch . await ( 7 , ĠSE CON DS )) ĊĠĠĠ Ġ} Ġfinally Ġ{ ĊĊĠĠĠĠĠ Ġcurrency Refresh er . live Rates . remove Observer ( observer ) ĊĠĠĠĠĠ Ġserver . shutdown () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġ` test Ġchanging Ġcurrency Ġtriggers Ġupdate `() Ġ{ ĊĠĠĠ Ġval Ġtimes Ġ= Ġ 2 ĊĊĠĠĠ Ġval Ġserver Ġ= ĠMock WebServer () ĊĠĠĠ Ġserver . enqueue ( Mock Response (). set Body ( FA KE _ JSON )) ĊĠĠĠ Ġserver . start () ĊĊĠĠĠ Ġval Ġl atch Ġ= ĠCount DownLatch ( times ) ĊĊĠĠĠ Ġval Ġobserver Ġ= ĠObserver < Currency Rates > Ġ{ ĊĠĠĠĠĠ Ġassert Not Equals ( currency Refresh er . current Rates , ĠEMPTY _ CUR RE NCY _ RATE ) ĊĊĠĠĠĠĠ Ġl atch . count Down () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcurrency Refresh er . live Rates . observe Fore ver ( observer ) ĊĠĠĠ Ġcurrency Refresh er . set Currency (" USD ") ĊĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠ ĠassertTrue ( latch . await ( 5 , ĠSE CON DS )) ĊĠĠĠĠĠ ĠassertEquals ( currency Refresh er . current Currency , Ġ" USD ") ĊĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠ Ġcurrency Refresh er . live Rates . remove Observer ( observer ) ĊĠĠĠĠĠ Ġserver . shutdown () ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ