package Ġfail fast Ċ Ċ import Ġfail fast . internal . Context Executor Ċ import Ġfail fast . internal . Context Info Ċ import Ġfail fast . internal . Context Tree Reporter Ċ import Ġfail fast . internal . Single Test Executor Ċ import Ġkotlinx . coroutines .* Ċ import Ġjava . lang . management . Management Factory Ċ import Ġjava . util . concurrent . Executors Ċ import Ġjava . util . concurrent . TimeUnit Ċ import Ġkotlin . reflect . K Class Ċ Ċ class ĠSuite ( val Ġroot Contexts : ĠCollection < Context Provider >) Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġfrom Contexts ( root Contexts : ĠCollection < Root Context >) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSuite ( root Contexts . map Ġ{ ĠContext Provider Ġ{ Ġit Ġ} Ġ}) ĊĊĠĠĠĠĠĠĠ Ġfun Ġfrom Classes ( classes : ĠList < K Class <* >>) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSuite ( classes . map Ġ{ ĠObject Context Provider ( it ) Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( root Contexts . isEmpty ()) Ġthrow ĠEmpty Suite Exception () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( root Context : ĠRoot Context ) Ġ: ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis ( listOf ( Context Provider Ġ{ Ġroot Context Ġ})) ĊĊĠĠĠ Ġconstructor ( function : ĠContext Lambda ) Ġ: ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis ( Root Context (" root ", Ġfalse , Ġfunction )) ĊĊĠĠĠ Ġfun Ġrun ( ĊĠĠĠĠĠĠĠ Ġparallel ism : ĠInt Ġ= Ġcp us (), ĊĠĠĠĠĠĠĠ Ġsilent : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġ): ĠSuite Result Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġthread Pool Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( parallel ism Ġ> Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠExec utors . new Work Ste aling Pool ( parallel ism ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠExec utors . new Single Thread Executor () ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthread Pool . as Coroutine Dispatcher () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. use Ġ{ Ġdispatcher Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun Blocking ( dispatcher ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontext Infos Ġ= Ġfind Tests ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! silent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext Infos . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= Ġit . await () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontext Tree Reporter Ġ= ĠContext Tree Reporter () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext Tree Reporter . string Report ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . tests . values . await All (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . contexts ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. join ToString ("\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresolved Contexts Ġ= Ġcontext Infos . await All () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresults Ġ= Ġresolved Contexts . flatMap Ġ{ Ġit . tests . values Ġ}. await All () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSuite Result ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresults , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresults . filter Is Instance < Failed >(), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresolved Contexts . flatMap Ġ{ Ġit . contexts Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthread Pool . await Termination ( 1 0 0 , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthread Pool . shutdown () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġsuspend Ġfun Ġfind Tests ( ĊĠĠĠĠĠĠĠ Ġcoroutine Scope : ĠCor outine Scope , ĊĠĠĠĠĠĠĠ Ġexecute Tests : ĠBoolean Ġ= Ġtrue , ĊĠĠĠĠĠĠĠ Ġlistener : ĠExecution Listener Ġ= ĠNull Execution Listener ĊĠĠĠ Ġ): ĊĠĠĠĠĠĠĠĠĠĠĠ ĠList < Deferred < Context Info >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġroot Contexts ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcoroutine Scope . async Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= Ġit . getContext () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! context . disabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Timeout ( 2 0 0 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContext Executor ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcoroutine Scope , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ! execute Tests , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlistener ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). execute () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠTimeout Cancellation Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠFail Fast Exception (" context Ġ${ context . name } Ġtimed Ġout ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContext Info ( emptyList (), Ġmap Of ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrun Single ( test : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontext Name Ġ= Ġtest . substring Before ("> "). trim () ĊĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= Ġroot Contexts . map Ġ{ Ġit . getContext () Ġ}. single Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . name Ġ== Ġcontext Name ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġdesc Ġ= ĠContext Path . fromString ( test ) ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSingle Test Executor ( context , Ġdesc ). execute () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( result Ġis ĠFailed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( result . pretty Print ()) ĊĠĠĠĠĠĠĠ Ġ} Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ("${ result . test } ĠOK ") ĊĊĠĠĠ Ġ} Ċ } Ċ Ċ object ĠNull Execution Listener Ġ: ĠExecution Listener Ġ{ ĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġtest Started ( test Descriptor : ĠTest Description ) Ġ{} ĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġtest Finished ( test Descriptor : ĠTest Description , Ġtest Result : ĠTest Result ) Ġ{} Ċ } Ċ Ċ internal Ġfun Ġu ptime (): ĠString Ġ{ ĊĠĠĠ Ġval Ġoperating System MX Bean Ġ= ĊĠĠĠĠĠĠĠ ĠManagement Factory . get Operating System MX Bean () Ġas Ġcom . sun . management . Operating System MX Bean ĊĠĠĠ Ġval Ġu ptime Ġ= ĠManagement Factory . get Runtime MX Bean (). uptime ĊĠĠĠ Ġval Ġcpu Time Ġ= Ġoperating System MX Bean . process Cpu Time Ġ/ Ġ 1 0 0 0 0 0 0 ĊĠĠĠ Ġval Ġpercentage Ġ= Ġcpu Time Ġ* Ġ 1 0 0 Ġ/ Ġu ptime ĊĠĠĠ Ġreturn Ġ" total :${ uptime } ms Ġcpu :${ cpu Time } ms , Ġload :${ percentage } %" Ċ } Ċ Ċ private Ġfun Ġcp us () Ġ= ĠRuntime . get Runtime (). available Processors () Ċ