/* Ċ Ġ* ĠCopyright Ġ 2 0 1 6 - 2 0 2 0 ĠJetBrains Ġs . r . o . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense . Ċ Ġ*/ Ċ Ċ import Ġkotlinx . coroutines .* Ċ import Ġkotlinx . coroutines . debug .* Ċ import Ġkotlinx . coroutines . debug . internal .* Ċ import Ġorg . junit .* Ċ Ċ /** Ċ Ġ* ĠThis Ġis Ġfast Ġbut Ġfrag ile Ġversion Ġof Ġ[ Debug Le aks St ress Test ] Ġthat Ġcheck Ġreach ability Ġof Ġa Ġcaptured Ġobject Ċ Ġ* Ġin Ġ[ Debug Prob es Impl ] Ġvia Ġ[ Field Walker ]. Ċ Ġ*/ Ċ @ Suppress (" IN VISIBLE _ MEMBER ", Ġ" IN VISIBLE _ REFERENCE ") Ċ class ĠDebug Le aks Test Ġ: ĠDebug TestBase () Ġ{ ĊĠĠĠ Ġprivate Ġclass ĠCapt ured ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Iterator Leak () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcaptured Ġ= ĠCapt ured () ĊĠĠĠĠĠĠĠ Ġiterator Ġ{ Ġyield ( captured ) Ġ} ĊĠĠĠĠĠĠĠ Ġassert No Capt ured Reference () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Lazy Global Coroutine Leak () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcaptured Ġ= ĠCapt ured () ĊĠĠĠĠĠĠĠ ĠGlobal Scope . launch ( start Ġ= ĠCor outine Start . LA ZY ) Ġ{ Ġprintln ( captured ) Ġ} ĊĠĠĠĠĠĠĠ Ġassert No Capt ured Reference () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Lazy Cancelled Child Coroutine Leak () Ġ= Ġrun Test Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcaptured Ġ= ĠCapt ured () ĊĠĠĠĠĠĠĠ Ġcoroutine Scope Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild Ġ= Ġlaunch ( start Ġ= ĠCor outine Start . LA ZY ) Ġ{ Ġprintln ( captured ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchild . cancel () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġassert No Capt ured Reference () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Ab and oned Global Coroutine Leak () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcaptured Ġ= ĠCapt ured () ĊĠĠĠĠĠĠĠ ĠGlobal Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuspend Fore ver () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( captured ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġassert No Capt ured Reference () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġsuspend Fore ver () Ġ= Ġsuspend C ancellable Coroutine < Unit > Ġ{ Ġ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġassert No Capt ured Reference () Ġ{ ĊĠĠĠĠĠĠĠ ĠField Walker . assert Reach able Count ( 0 , ĠDebug Prob es Impl , Ġroot Statics Ġ= Ġtrue ) Ġ{ Ġit Ġis ĠCapt ured Ġ} ĊĠĠĠ Ġ} Ċ }