/* Ċ Ġ* ĠCopyright Ġ 2 0 1 6 - 2 0 1 8 ĠJetBrains Ġs . r . o . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense . Ċ Ġ*/ Ċ Ċ package Ġkotlinx . coroutines . rx 3 Ċ Ċ import Ġio . reactivex . rx java 3 . core .* Ċ import Ġkotlinx . coroutines .* Ċ import Ġorg . junit .* Ċ import Ġorg . junit . Test Ċ import Ġjava . util . concurrent .* Ċ import Ġkotlin . test .* Ċ Ċ class ĠObservable Single Test Ġ: ĠTest Base () Ġ{ ĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun Ġsetup () Ġ{ ĊĠĠĠĠĠĠĠ Ġignore Lost Threads (" Rx Computation ThreadPool -", Ġ" Rx Cached Worker Pool Ev ictor -", Ġ" Rx Scheduler Purge - ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Single No Wait () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġobservable Ġ= Ġrx Observable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsend (" OK ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcheck Single Value ( observable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" OK ", Ġit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Single Await () Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ ĠassertEquals (" OK ", ĠObservable . just (" O "). await Single () Ġ+ Ġ" K ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Single Emit And Await () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġobservable Ġ= Ġrx Observable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsend ( Observable . just (" O "). await Single () Ġ+ Ġ" K ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcheck Single Value ( observable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" OK ", Ġit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Single With Delay () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġobservable Ġ= Ġrx Observable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsend ( Observable . timer ( 5 0 , ĠTimeUnit . MILLISECONDS ). map Ġ{ Ġ" O " Ġ}. await Single () Ġ+ Ġ" K ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcheck Single Value ( observable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" OK ", Ġit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Single Exception () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġobservable Ġ= Ġrx Observable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsend ( Observable . just (" O ", Ġ" K "). await Single () Ġ+ Ġ" K ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcheck Err one ous ( observable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( it Ġis ĠIllegalArgumentException ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Await First () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġobservable Ġ= Ġrx Observable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsend ( Observable . just (" O ", Ġ"# "). await First () Ġ+ Ġ" K ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcheck Single Value ( observable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" OK ", Ġit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Await FirstOrDefault () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġobservable Ġ= Ġrx Observable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsend ( Observable . empty < String >(). await FirstOrDefault (" O ") Ġ+ Ġ" K ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcheck Single Value ( observable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" OK ", Ġit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Await FirstOrDefault With Values () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġobservable Ġ= Ġrx Observable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsend ( Observable . just (" O ", Ġ"# "). await FirstOrDefault (" !") Ġ+ Ġ" K ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcheck Single Value ( observable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" OK ", Ġit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Await First OrNull () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġobservable Ġ= Ġrx Observable < String > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsend ( Observable . empty < String >(). await First OrNull () Ġ?: Ġ" OK ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcheck Single Value ( observable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" OK ", Ġit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Await First OrNull With Values () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġobservable Ġ= Ġrx Observable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsend (( Observable . just (" O ", Ġ"# "). await First OrNull () Ġ?: Ġ" !") Ġ+ Ġ" K ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcheck Single Value ( observable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" OK ", Ġit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Await First OrElse () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġobservable Ġ= Ġrx Observable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsend ( Observable . empty < String >(). await First OrElse Ġ{ Ġ" O " Ġ} Ġ+ Ġ" K ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcheck Single Value ( observable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" OK ", Ġit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Await First OrElse With Values () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġobservable Ġ= Ġrx Observable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsend ( Observable . just (" O ", Ġ"# "). await First OrElse Ġ{ Ġ" !" Ġ} Ġ+ Ġ" K ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcheck Single Value ( observable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" OK ", Ġit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Await Last () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġobservable Ġ= Ġrx Observable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsend ( Observable . just ("# ", Ġ" O "). await Last () Ġ+ Ġ" K ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcheck Single Value ( observable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" OK ", Ġit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Exception From Observable () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġobservable Ġ= Ġrx Observable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend ( Observable . error < String >( RuntimeException (" O ")). await First ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠRuntimeException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend ( Observable . just ( e . message !! ). await Last () Ġ+ Ġ" K ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcheck Single Value ( observable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" OK ", Ġit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Exception From Coroutine () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġobservable Ġ= Ġrx Observable < String > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException ( Observable . just (" O "). await Single () Ġ+ Ġ" K ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcheck Err one ous ( observable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( it Ġis ĠIllegalStateException ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" OK ", Ġit . message ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Observable Iteration () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġobservable Ġ= Ġrx Observable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ ĠObservable . just (" O ", Ġ" K "). collect Ġ{ Ġresult Ġ+= Ġit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsend ( result ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcheck Single Value ( observable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" OK ", Ġit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Observable Iteration Failure () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġobservable Ġ= Ġrx Observable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠObservable . error < String >( RuntimeException (" OK ")). collect Ġ{ Ġfail (" Should Ġnot Ġbe Ġhere ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend (" Fail ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠRuntimeException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend ( e . message !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcheck Single Value ( observable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" OK ", Ġit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ