package Ġio . kot est . engine . spec . interceptor Ċ Ċ import Ġio . kot est . core . extensions . Spec Extension Ċ import Ġio . kot est . core . spec . Spec Ċ import Ġio . kot est . core . test . TestCase Ċ import Ġio . kot est . core . test . TestResult Ċ import Ġio . kot est . mpp . log Ċ Ċ /** Ċ Ġ* ĠA Ġ[ Spec Execution Interceptor ] Ġthat Ġexecutes Ġall Ġ[ Spec Extension ] s . Ċ Ġ*/ Ċ internal Ġclass ĠSpec Intercept Extensions Interceptor ( ĊĠĠ Ġprivate Ġval Ġextensions : ĠList < Spec Extension > Ċ ) Ġ: ĠSpec Execution Interceptor Ġ{ ĊĊĠĠ Ġoverride Ġsuspend Ġfun Ġintercept ( ĊĠĠĠĠĠ Ġfn : Ġsuspend Ġ( Spec ) Ġ-> ĠMap < TestCase , ĠTest Result > ĊĠĠ Ġ): Ġsuspend Ġ( Spec ) Ġ-> ĠMap < TestCase , ĠTest Result > Ġ= Ġ{ Ġspec Ġ-> ĊĠĠĠĠĠ Ġlog Ġ{ Ġ" Spec Intercept Extensions Interceptor : ĠInter cept ing Ġspec Ġwith Ġ${ extensions . size } Ġextensions Ġ[$ extensions ]" Ġ} ĊĠĠĠĠĠ Ġvar Ġresults Ġ= Ġempty Map < TestCase , ĠTest Result >() ĊĠĠĠĠĠ Ġval Ġinitial : Ġsuspend Ġ() Ġ-> ĠUnit Ġ= Ġ{ Ġresults Ġ= Ġfn ( spec ) Ġ} ĊĠĠĠĠĠ Ġintercept Spec ( spec , Ġextensions , Ġinitial ) ĊĠĠĠĠĠ Ġresults ĊĠĠ Ġ} ĊĊĠĠ Ġprivate Ġsuspend Ġfun Ġintercept Spec ( ĊĠĠĠĠĠ Ġspec : ĠSpec , ĊĠĠĠĠĠ Ġremaining : ĠList < Spec Extension >, ĊĠĠĠĠĠ Ġrun : Ġsuspend Ġ() Ġ-> ĠUnit , ĊĠĠ Ġ) Ġ{ ĊĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠ Ġremaining . isEmpty () Ġ-> Ġrun () ĊĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremaining . first (). intercept ( spec :: class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremaining . first (). intercept ( spec ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintercept Spec ( spec , Ġremaining . drop ( 1 ), Ġrun ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠ Ġ} Ċ } Ċ