/* Ċ Ġ* Ġ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 . debug Ċ Ċ import Ġkotlinx . coroutines .* Ċ import Ġkotlinx . coroutines . channels .* Ċ import Ġorg . junit .* Ċ import Ġorg . junit . Test Ċ import Ġkotlin . coroutines .* Ċ import Ġkotlin . test .* Ċ Ċ class ĠToString Test Ġ: ĠTest Base () Ġ{ ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ Ġbefore () ĊĠĠĠĠĠĠĠ ĠDebug Prob es . sanitize Stack Tr aces Ġ= Ġfalse ĊĠĠĠĠĠĠĠ ĠDebug Prob es . install () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ After ĊĠĠĠ Ġfun ĠtearDown () Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDebug Prob es . uninstall () ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Completion () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġsuspend Ġfun ĠCor outine Scope . launch Nested Scopes (): ĠJob Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġlaunch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcoroutine Scope Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpect ( 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch Delayed () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsupervisor Scope Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpect ( 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch Delayed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠCor outine Scope . launch Delayed (): ĠJob Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġlaunch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( Long . MAX _ VALUE ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Print Hierarchy With Scopes () Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtab Ġ= Ġ'\ t ' ĊĠĠĠĠĠĠĠ Ġval Ġexpected String Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠ Ġ" coroutine ": Standalone Coroutine { Active }, Ġcontinuation Ġis ĠS US PEN DED Ġat Ġline ĠToString Test ${ '$ '} launch Nested Scopes $ 2 $ 1 . invoke Suspend ( ToString Test . kt ) ĊĠĠĠĠĠĠĠĠĠ Ġ$ tab " coroutine ": Standalone Coroutine { Active }, Ġcontinuation Ġis ĠS US PEN DED Ġat Ġline ĠToString Test ${ '$ '} launch Delayed $ 1 . invoke Suspend ( ToString Test . kt ) ĊĠĠĠĠĠĠĠĠĠ Ġ$ tab " coroutine ": Standalone Coroutine { Active }, Ġcontinuation Ġis ĠS US PEN DED Ġat Ġline ĠToString Test ${ '$ '} launch Delayed $ 1 . invoke Suspend ( ToString Test . kt ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĊĠĠĠĠĠĠĠ Ġval Ġjob Ġ= Ġlaunch Nested Scopes () ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat ( 5 ) Ġ{ Ġyield () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġexpected String . trim StackTrace (). trim Package () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect ( 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( expected , ĠDebug Prob es . job ToString ( job ). trim End (). trim StackTrace (). trim Package ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( expected , ĠDebug Prob es . scope ToString ( Coroutine Scope ( job )). trim End (). trim StackTrace (). trim Package ()) ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinish ( 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjob . cancel And Join () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Comp leting Hierarchy () Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtab Ġ= Ġ'\ t ' ĊĠĠĠĠĠĠĠ Ġval Ġexpected String Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" coroutine # 2 ": Standalone Coroutine { Comp leting } ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ$ tab " foo # 3 ": Deferred Coroutine { Active }, Ġcontinuation Ġis ĠS US PEN DED Ġat Ġline ĠToString Test ${ '$ '} launch Hierarchy ${ '$ '} 1 ${ '$ '} 1 . invoke Suspend ( ToString Test . kt : 3 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ$ tab " coroutine # 4 ": Actor Coroutine { Active }, Ġcontinuation Ġis ĠS US PEN DED Ġat Ġline ĠToString Test ${ '$ '} launch Hierarchy ${ '$ '} 1 ${ '$ '} 2 ${ '$ '} 1 . invoke Suspend ( ToString Test . kt : 4 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ$ tab $ tab " coroutine # 5 ": Standalone Coroutine { Active }, Ġcontinuation Ġis ĠS US PEN DED Ġat Ġline ĠToString Test ${ '$ '} launch Hierarchy ${ '$ '} 1 ${ '$ '} 2 ${ '$ '} job $ 1 . invoke Suspend ( ToString Test . kt : 3 7 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĊĠĠĠĠĠĠĠ Ġcheck Hierarchy ( is Comp leting Ġ= Ġtrue , Ġexpected String Ġ= Ġexpected String ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Active Hierarchy () Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtab Ġ= Ġ'\ t ' ĊĠĠĠĠĠĠĠ Ġval Ġexpected String Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" coroutine # 2 ": Standalone Coroutine { Active }, Ġcontinuation Ġis ĠS US PEN DED Ġat Ġline ĠToString Test ${ '$ '} launch Hierarchy ${ '$ '} 1 . invoke Suspend ( ToString Test . kt : 9 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ$ tab " foo # 3 ": Deferred Coroutine { Active }, Ġcontinuation Ġis ĠS US PEN DED Ġat Ġline ĠToString Test ${ '$ '} launch Hierarchy ${ '$ '} 1 ${ '$ '} 1 . invoke Suspend ( ToString Test . kt : 3 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ$ tab " coroutine # 4 ": Actor Coroutine { Active }, Ġcontinuation Ġis ĠS US PEN DED Ġat Ġline ĠToString Test ${ '$ '} launch Hierarchy ${ '$ '} 1 ${ '$ '} 2 ${ '$ '} 1 . invoke Suspend ( ToString Test . kt : 4 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ$ tab $ tab " coroutine # 5 ": Standalone Coroutine { Active }, Ġcontinuation Ġis ĠS US PEN DED Ġat Ġline ĠToString Test ${ '$ '} launch Hierarchy ${ '$ '} 1 ${ '$ '} 2 ${ '$ '} job $ 1 . invoke Suspend ( ToString Test . kt : 3 7 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġcheck Hierarchy ( is Comp leting Ġ= Ġfalse , Ġexpected String Ġ= Ġexpected String ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun ĠCor outine Scope . check Hierarchy ( is Comp leting : ĠBoolean , Ġexpected String : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġroot Ġ= Ġlaunch Hierarchy ( is Comp leting ) ĊĠĠĠĠĠĠĠ Ġrepeat ( 4 ) Ġ{ Ġyield () Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġexpected String . trim StackTrace (). trim Package () ĊĠĠĠĠĠĠĠ Ġexpect ( 6 ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected , ĠDebug Prob es . job ToString ( root ). trim End (). trim StackTrace (). trim Package ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected , ĠDebug Prob es . scope ToString ( Coroutine Scope ( root )). trim End (). trim StackTrace (). trim Package ()) ĊĊĠĠĠĠĠĠĠ Ġroot . cancel And Join () ĊĠĠĠĠĠĠĠ Ġfinish ( 7 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠCor outine Scope . launch Hierarchy ( is Comp leting : ĠBoolean ): ĠJob Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġlaunch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġasync ( Coroutine Name (" foo ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpect ( 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( Long . MAX _ VALUE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġactor < Int > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpect ( 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjob Ġ= Ġlaunch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpect ( 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( Long . MAX _ VALUE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( wrapper Dispatcher ( coroutine Context )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpect ( 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjob . join () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Comp leting ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( Long . MAX _ VALUE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġwrapper Dispatcher ( context : ĠCor outine Context ): ĠCor outine Context Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdispatcher Ġ= Ġcontext [ Continuation Interceptor ] Ġas ĠCor outine Dispatcher ĊĠĠĠĠĠĠĠ Ġreturn Ġobject Ġ: ĠCor outine Dispatcher () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdispatch ( context : ĠCor outine Context , Ġblock : ĠRunnable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdispatcher . dispatch ( context , Ġblock ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ