package Ġnam . tran . data . inter actor . auth en Ċ Ċ import Ġandroidx . arch . core . executor . testing . Instant Task Executor Rule Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġnam . tran . data . Instant App Executors Ċ import Ġnam . tran . data . local . IP reference Ċ import Ġnam . tran . data . mock Ċ import Ġnam . tran . data . model . core . StatusCode Ċ import Ġnam . tran . data . model . core . state . Error Resource Ċ import Ġnam . tran . data . model . core . state . Resource Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . runner . RunWith Ċ import Ġorg . mockito . Mockito Ċ import Ġorg . mockito . Mockito . mock Ċ import Ġorg . mockito . Mockito . verify Ċ import Ġorg . mockito . junit . Mockito JUnit Runner ĊĊ Ċ @ RunWith ( Mockito JUnit Runner :: class ) Ċ class ĠAuth en Data Bound Test Ġ{ ĊĊĠĠĠ Ġ@ Rule ĊĠĠĠ Ġ@ Jvm Field ĊĠĠĠ Ġval Ġinstant Executor Rule Ġ= ĠInstant Task Executor Rule () ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġclass UnderTest : ĠAuth en Data Bound ĊĊĠĠĠ Ġprivate Ġval Ġi Preference Ġ= Ġmock ( IP reference :: class . java ) ĊĊĊĠĠĠ Ġ@ org . junit . Before ĊĠĠĠ Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ Ġclass UnderTest Ġ= ĠAuth en Data Bound ( Instant App Executors (), Ġi Preference ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ org . junit . After ĊĠĠĠ Ġfun ĠtearDown () Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ org . junit . Test ĊĠĠĠ Ġfun Ġget Result () Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ org . junit . Test ĊĠĠĠ Ġfun Ġ` login Ġwith Ġempty Ġuser Ġname `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġusername : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġobserver Ġ= Ġmock < Observer < Resource < Boolean >> >() ĊĠĠĠĠĠĠĠ Ġclass UnderTest . result . observe Fore ver ( observer ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġwhen ĊĠĠĠĠĠĠĠ Ġclass UnderTest . empty User ( username ) ĊĠĠĠĠĠĠĠ ĠMockito . verify ( observer ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Changed ( Resource . error ( Error Resource (" User Ġnot Ġempty ", ĠStatusCode . EMPTY _ FIELD ), Ġfalse )) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ org . junit . Test ĊĠĠĠ Ġfun Ġ` login Ġwith Ġempty Ġpassword `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpassword Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġval Ġobserver Ġ= Ġmock < Observer < Resource < Boolean >> >() ĊĠĠĠĠĠĠĠ Ġclass UnderTest . result . observe Fore ver ( observer ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġwhen ĊĠĠĠĠĠĠĠ Ġclass UnderTest . empty Password ( password ) ĊĠĠĠĠĠĠĠ ĠMockito . verify ( observer ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Changed ( Resource . error ( Error Resource (" Password Ġnot Ġempty ", ĠStatusCode . EMPTY _ FIELD ), Ġfalse )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ org . junit . Test ĊĠĠĠ Ġfun Ġ` login Ġfail `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġusername Ġ= Ġ" abc " ĊĠĠĠĠĠĠĠ Ġval Ġpassword Ġ= Ġ" bcd " ĊĊĠĠĠĠĠĠĠ Ġval Ġobserver Ġ= Ġmock < Observer < Resource < Boolean >> >() ĊĠĠĠĠĠĠĠ Ġclass UnderTest . result . observe Fore ver ( observer ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġwhen ĊĠĠĠĠĠĠĠ Ġclass UnderTest . login Fail ( username , Ġpassword ) ĊĠĠĠĠĠĠĠ ĠMockito . verify ( observer ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Changed ( Resource . error ( Error Resource (" Email Ġor ĠPassword Ġnot Ġcorrect ", Ġclass UnderTest . IN CORRECT ), Ġfalse )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ org . junit . Test ĊĠĠĠ Ġfun Ġ` login Ġsuccess `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġusername Ġ= Ġ" Go Be ar " ĊĠĠĠĠĠĠĠ Ġval Ġpassword Ġ= Ġ" Go Be ar Demo " ĊĠĠĠĠĠĠĠ Ġval Ġis Remember Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġval Ġobserver Ġ= Ġmock < Observer < Resource < Boolean >> >() ĊĠĠĠĠĠĠĠ Ġclass UnderTest . result . observe Fore ver ( observer ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġwhen ĊĠĠĠĠĠĠĠ Ġclass UnderTest . login ( username , Ġpassword , Ġis Remember ) ĊĠĠĠĠĠĠĠ ĠMockito . verify ( observer ). on Changed ( Resource . loading ( null )) ĊĠĠĠĠĠĠĠ ĠMockito . verify ( observer ). on Changed ( Resource . success ( true )) ĊĠĠĠĠĠĠĠ Ġverify ( i Preference ). login ( is Remember ) ĊĠĠĠ Ġ} Ċ }