/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġkotlinx . coroutines . test Ċ Ċ import Ġkotlinx . coroutines . Coroutine ExceptionHandler Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ import Ġkotlin . coroutines . Continuation Interceptor Ċ import Ġkotlin . coroutines . Coroutine Context Ċ import Ġkotlin . coroutines . Empty Coroutine Context Ċ Ċ @ Experimental Cor outines Api Ġ// ĠSince Ġ 1 . 2 . 1 , Ġtent atively Ġtill Ġ 1 . 3 . 0 Ċ public Ġinterface ĠTest Coroutine Scope : ĠCor outine Scope , ĠUn caught Exception Captor , ĠDelay Controller Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCall Ġafter Ġthe Ġtest Ġcompletes . ĊĠĠĠĠ Ġ* ĠCalls Ġ[ Un caught Exception Captor . cleanup Test Cor outines ] Ġand Ġ[ Delay Controller . cleanup Test Cor outines ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ throws ĠThrowable Ġthe Ġfirst Ġun caught Ġexception , Ġif Ġthere Ġare Ġany Ġun caught Ġexceptions . ĊĠĠĠĠ Ġ* Ġ@ throws ĠUn completed Cor outines Error Ġif Ġany Ġpending Ġtasks Ġare Ġactive , Ġhowever Ġit Ġwill Ġnot Ġthrow Ġfor Ġsus pended ĊĠĠĠĠ Ġ* Ġcor outines . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġoverride Ġfun Ġcleanup Test Cor outines () Ċ } Ċ Ċ private Ġclass ĠTest Coroutine Scope Impl Ġ( ĊĠĠĠ Ġoverride Ġval Ġcoroutine Context : ĠCor outine Context Ċ ): ĊĠĠĠ ĠTest Coroutine Scope , ĊĠĠĠ ĠUn caught Exception Captor Ġby Ġcoroutine Context . unc a ught Exception Captor , ĊĠĠĠ ĠDelay Controller Ġby Ġcoroutine Context . delay Controller Ċ { ĊĠĠĠ Ġoverride Ġfun Ġcleanup Test Cor outines () Ġ{ ĊĠĠĠĠĠĠĠ Ġcoroutine Context . unc a ught Exception Captor . cleanup Test Cor outines () ĊĠĠĠĠĠĠĠ Ġcoroutine Context . delay Controller . cleanup Test Cor outines () ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠA Ġscope Ġwhich Ġprovides Ġdetailed Ġcontrol Ġover Ġthe Ġexecution Ġof Ġcor outines Ġfor Ġtests . Ċ Ġ* Ċ Ġ* ĠIf Ġthe Ġprovided Ġcontext Ġdoes Ġnot Ġprovide Ġa Ġ[ Continuation Interceptor ] Ġ( Dispatcher ) Ġor Ġ[ Coroutine ExceptionHandler ], Ġthe Ċ Ġ* Ġscope Ġadds Ġ[ Test Coroutine Dispatcher ] Ġand Ġ[ Test Coroutine ExceptionHandler ] Ġautomatically . Ċ Ġ* Ċ Ġ* Ġ@ param Ġcontext Ġan Ġoptional Ġcontext Ġthat ĠMAY Ġprovide Ġ[ Un caught Exception Captor ] Ġand / or Ġ[ Delay Controller ] Ċ Ġ*/ Ċ @ Suppress (" FunctionName ") Ċ @ Experimental Cor outines Api Ġ// ĠSince Ġ 1 . 2 . 1 , Ġtent atively Ġtill Ġ 1 . 3 . 0 Ċ public Ġfun ĠTest Coroutine Scope ( context : ĠCor outine Context Ġ= ĠEmpty Coroutine Context ): ĠTest Coroutine Scope Ġ{ ĊĠĠĠ Ġvar Ġsafe Context Ġ= Ġcontext ĊĠĠĠ Ġif Ġ( context [ Continuation Interceptor ] Ġ== Ġnull ) Ġsafe Context Ġ+= ĠTest Coroutine Dispatcher () ĊĠĠĠ Ġif Ġ( context [ Coroutine ExceptionHandler ] Ġ== Ġnull ) Ġsafe Context Ġ+= ĠTest Coroutine ExceptionHandler () ĊĠĠĠ Ġreturn ĠTest Coroutine Scope Impl ( safe Context ) Ċ } Ċ Ċ private Ġinline Ġval ĠCor outine Context . unc a ught Exception Captor : ĠUn caught Exception Captor ĊĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġhandler Ġ= Ġthis [ Coroutine ExceptionHandler ] ĊĠĠĠĠĠĠĠ Ġreturn Ġhandler Ġas ? ĠUn caught Exception Captor Ġ?: Ġthrow ĠIllegalArgumentException ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" kotlin x . coroutines . test . Test Coroutine Scope Ġrequires Ġa ĠUn caught Exception Captor Ġsuch Ġas Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Test Coroutine ExceptionHandler Ġas Ġthe ĠCor outine ExceptionHandler " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ Ċ private Ġinline Ġval ĠCor outine Context . delay Controller : ĠDelay Controller ĊĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġhandler Ġ= Ġthis [ Continuation Interceptor ] ĊĠĠĠĠĠĠĠ Ġreturn Ġhandler Ġas ? ĠDelay Controller Ġ?: Ġthrow ĠIllegalArgumentException ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" kotlin x . coroutines . test . Test Coroutine Scope Ġrequires Ġa Ġkotlinx . coroutines . test . Delay Controller Ġsuch Ġas ĠTest Coroutine Dispatcher Ġas Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" the ĠContinu ation Interceptor Ġ( Dispatcher )" ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ}