package Ġcom . github . che ap mon . bal ala ika . data . result Ċ Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ import Ġkotlinx . coroutines . flow . Flow Ċ import Ġkotlinx . coroutines . flow . toList Ċ import Ġkotlinx . coroutines . test . run Blocking Test Ċ import Ġorg . junit . Assert . assertEquals Ċ import Ġorg . junit . Assert . assertTrue Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Test Ċ Ċ @ Opt In ( Experimental Cor outines Api :: class ) Ċ internal Ġclass ĠLoad State Test Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġsuccess : ĠList < Load State < String , ĠThrowable >> ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġerror : ĠList < Load State < String , ĠThrowable >> ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun Ġinit () Ġ= Ġrun Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġsuccess Ġ= Ġload Ġ{ Ġ" Test " Ġ}. toList () ĊĠĠĠĠĠĠĠ Ġerror Ġ= Ġload < String > Ġ{ Ġthrow ĠIllegalStateException () Ġ}. toList () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġruns Successfully () Ġ= Ġrun Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġsuccess . result () ĊĠĠĠĠĠĠĠ ĠassertTrue ( result Ġis ĠResult . Success Ġ&& Ġresult . data Ġ== Ġ" Test ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcat ches Error () Ġ= Ġrun Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġerror . result () ĊĠĠĠĠĠĠĠ ĠassertTrue ( result Ġis ĠResult . Error Ġ&& Ġresult . cause Ġis ĠIllegalStateException ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġor () Ġ= Ġrun Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsuccess List Ġ= Ġsuccess . map Ġ{ Ġit . or (" Something Ġelse ") Ġ} ĊĠĠĠĠĠĠĠ ĠassertEquals (" Something Ġelse ", Ġsuccess List [ 0 ]) ĊĠĠĠĠĠĠĠ ĠassertEquals (" Something Ġelse ", Ġsuccess List [ 1 ]) ĊĠĠĠĠĠĠĠ ĠassertEquals (" Test ", Ġsuccess List [ 2 ]) ĊĠĠĠĠĠĠĠ Ġval Ġerror List Ġ= Ġerror . map Ġ{ Ġit . or (" Something Ġelse ") Ġ} ĊĠĠĠĠĠĠĠ ĠassertEquals (" Something Ġelse ", Ġerror List [ 0 ]) ĊĠĠĠĠĠĠĠ ĠassertEquals (" Something Ġelse ", Ġerror List [ 1 ]) ĊĠĠĠĠĠĠĠ ĠassertEquals (" Something Ġelse ", Ġerror List [ 2 ]) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġmaps Data () Ġ= Ġrun Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsuccess Result Ġ= Ġsuccess . map Ġ{ Ġit . map Ġ{ Ġ 1 Ġ} Ġ}. result () ĊĠĠĠĠĠĠĠ ĠassertTrue ( success Result Ġis ĠResult . Success Ġ&& Ġsuccess Result . data Ġ== Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġerror Result Ġ= Ġerror . map Ġ{ Ġit . map Ġ{ Ġ 1 Ġ} Ġ}. result () ĊĠĠĠĠĠĠĠ ĠassertTrue ( error Result Ġis ĠResult . Error Ġ&& Ġerror Result . cause Ġis ĠIllegalStateException ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġmaps Error () Ġ= Ġrun Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsuccess Result Ġ= Ġsuccess . map Ġ{ Ġit . map Error Ġ{ Ġ 1 Ġ} Ġ}. result () ĊĠĠĠĠĠĠĠ ĠassertTrue ( success Result Ġis ĠResult . Success Ġ&& Ġsuccess Result . data Ġ== Ġ" Test ") ĊĠĠĠĠĠĠĠ Ġval Ġerror Result Ġ= Ġerror . map Ġ{ Ġit . map Error Ġ{ Ġ 1 Ġ} Ġ}. result () ĊĠĠĠĠĠĠĠ ĠassertTrue ( error Result Ġis ĠResult . Error Ġ&& Ġerror Result . cause Ġ== Ġ 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġruns On Success () Ġ= Ġrun Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcounter Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġsuccess . forEach Ġ{ Ġit . on Success Ġ{ Ġcounter ++ Ġ} Ġ} ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġcounter ) ĊĠĠĠĠĠĠĠ Ġerror . forEach Ġ{ Ġit . on Success Ġ{ Ġcounter ++ Ġ} Ġ} ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġcounter ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġruns OnError () Ġ= Ġrun Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcounter Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġsuccess . forEach Ġ{ Ġit . onError Ġ{ Ġcounter ++ Ġ} Ġ} ĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , Ġcounter ) ĊĠĠĠĠĠĠĠ Ġerror . forEach Ġ{ Ġit . onError Ġ{ Ġcounter ++ Ġ} Ġ} ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġcounter ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġ< T > Ġload ( block : Ġsuspend Ġ() Ġ-> ĠT ): ĠFlow < Load State < T , ĠThrowable >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Load ({}, Ġblock ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġ< T , ĠE > ĠList < Load State < T , ĠE >> . result (): ĠResult < T , ĠE > Ġ{ ĊĠĠĠĠĠĠĠ ĠassertTrue ( this [ 0 ] Ġis ĠLoad State . Init ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( this [ 1 ] Ġis ĠLoad State . Loading ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( this [ 2 ] Ġis ĠLoad State . Finished ) ĊĠĠĠĠĠĠĠ Ġreturn Ġ( this . last () Ġas ĠLoad State . Finished ). data ĊĠĠĠ Ġ} Ċ } Ċ