package Ġio . kot est . core . config Ċ Ċ import Ġio . github . class graph . Class Graph Ċ import Ġio . kot est . core . extensions . Extension Ċ import Ġio . kot est . core . filters . Filter Ċ import Ġio . kot est . core . listeners . Listener Ċ import Ġio . kot est . core . listeners . Project Listener Ċ import Ġio . kot est . core . spec . Auto Scan Ċ import Ġio . kot est . fp . to Option Ċ import Ġkotlin . math . max Ċ Ċ /** Ċ Ġ* ĠLoads Ġa Ġconfig Ġobject Ġfrom Ġthe Ġunderlying Ġtarget Ġby Ġscanning Ġthe Ġclasspath Ċ Ġ* Ġfor Ġinstances Ġof Ġ[ Abstract Project Config ]. Ċ Ġ*/ Ċ actual Ġfun Ġdetect Config (): ĠProject Conf Ġ{ ĊĊĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠ Ġfun Ġ< T > Ġinstantiate ( klass : ĠClass < T >): ĠT Ġ= ĊĠĠĠĠĠ Ġwhen Ġ( val Ġfield Ġ= Ġklass . declared Fields . find Ġ{ Ġit . name Ġ== Ġ" INSTANCE " Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠ Ġ// Ġif Ġthe Ġstatic Ġfield Ġfor Ġan Ġobject Ġcannot Ġbe Ġfound , Ġthen Ġinstantiate ĊĠĠĠĠĠĠĠĠ Ġnull Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġzero ArgsConstructor Ġ= Ġklass . construct ors . find Ġ{ Ġit . parameter Count Ġ== Ġ 0 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalArgumentException (" Class Ġ${ klass . name } Ġshould Ġhave Ġa Ġzero - arg Ġconstructor ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġzero ArgsConstructor . newInstance () Ġas ĠT ĊĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠ Ġ// Ġif Ġthe Ġstatic Ġfield Ġcan Ġbe Ġfound Ġthen Ġuse Ġit ĊĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfield . get ( null ) Ġas ĠT ĊĠĠĠĠĠ Ġ} ĊĊĠĠ Ġfun Ġfrom ( fq n : ĠString ): ĠProject Conf Ġ{ ĊĠĠĠĠĠ Ġval Ġconf Class Ġ= Ġinstantiate ( Class . forName ( fq n ) Ġas ĠClass < Abstract Project Config >) ĊĠĠĠĠĠ Ġval Ġbefore After All Listener Ġ= Ġobject Ġ: ĠProject Listener Ġ{ ĊĠĠĠĠĠĠĠĠ Ġoverride Ġsuspend Ġfun Ġbefore Project () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconf Class . before All () ĊĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠ Ġoverride Ġsuspend Ġfun Ġafter Project () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconf Class . after All () ĊĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġreturn ĠProject Conf ( ĊĠĠĠĠĠĠĠĠ Ġextensions Ġ= Ġconf Class . extensions (), ĊĠĠĠĠĠĠĠĠ Ġlisteners Ġ= Ġconf Class . listeners () Ġ+ Ġconf Class . project Listeners () Ġ+ ĠlistOf ( before After All Listener ), ĊĠĠĠĠĠĠĠĠ Ġfilters Ġ= Ġconf Class . filters (), ĊĠĠĠĠĠĠĠĠ Ġisolation Mode Ġ= Ġconf Class . is olation Mode Ġ?: Ġconf Class . is olation Mode (), ĊĠĠĠĠĠĠĠĠ Ġassertion Mode Ġ= Ġconf Class . assertion Mode , ĊĠĠĠĠĠĠĠĠ ĠtestCase Order Ġ= Ġconf Class . testCase Order Ġ?: Ġconf Class . testCase Order (), ĊĠĠĠĠĠĠĠĠ Ġspec Execution Order Ġ= Ġconf Class . spec Execution Order Ġ?: Ġconf Class . spec Execution Order (), ĊĠĠĠĠĠĠĠĠ Ġfail On Ignored Tests Ġ= Ġconf Class . fail On Ignored Tests , ĊĠĠĠĠĠĠĠĠ Ġglobal Assert Soft ly Ġ= Ġconf Class . global Assert Soft ly , ĊĠĠĠĠĠĠĠĠ Ġauto Scan Enabled Ġ= Ġconf Class . auto Scan Enabled Ġ?: Ġtrue , ĊĠĠĠĠĠĠĠĠ Ġauto Scan Ignored Classes Ġ= Ġconf Class . auto Scan Ignored Classes , ĊĠĠĠĠĠĠĠĠ Ġwrite Spec Failure File Ġ= Ġconf Class . write Spec Failure File Ġ?: Ġconf Class . write Spec Failure File (), ĊĠĠĠĠĠĠĠĠ Ġparallel ism Ġ= Ġmax ( conf Class . parallel ism , Ġconf Class . parallel ism ()), ĊĠĠĠĠĠĠĠĠ Ġtimeout Ġ= Ġconf Class . timeout , ĊĠĠĠĠĠĠĠĠ ĠtestCase Config Ġ= Ġconf Class . default TestCase Config , ĊĠĠĠĠĠĠĠĠ Ġinclude Test Scope Prefixes Ġ= Ġconf Class . include Test Scope Prefixes , ĊĠĠĠĠĠĠĠĠ Ġtest Name Case Ġ= Ġconf Class . test Name Case ĊĠĠĠĠĠ Ġ) ĊĠĠ Ġ} ĊĊĠĠ Ġval Ġscan Result Ġ= ĠClass Graph () ĊĠĠĠĠĠ Ġ. enable Class Info () ĊĠĠĠĠĠ Ġ. enable Annotation Info () ĊĠĠĠĠĠ Ġ. enable External Classes () ĊĠĠĠĠĠ Ġ. blacklist Packages (" java .* ", Ġ" javax .* ", Ġ" sun .* ", Ġ" com . sun .* ", Ġ" kotlin .* ", Ġ" kotlin x .* ") ĊĠĠĠĠĠ Ġ. scan () ĊĊĠĠ Ġval Ġconf Ġ= Ġscan Result ĊĠĠĠĠĠ Ġ. getSub classes ( Abstract Project Config :: class . java . name ) ĊĠĠĠĠĠ Ġ. map Ġ{ Ġit . name Ġ} ĊĠĠĠĠĠ Ġ. first OrNull () ĊĠĠĠĠĠ Ġ. to Option () ĊĠĠĠĠĠ Ġ. fold ({ ĠProject Conf () Ġ}, Ġ{ Ġfrom ( it ) Ġ}) ĊĊĠĠ Ġval Ġaut osc anned Ġ= Ġif Ġ( conf . auto Scan Enabled ) Ġ{ ĊĠĠĠĠĠ Ġscan Result ĊĠĠĠĠĠĠĠĠ Ġ. get Classes With Annotation ( Auto Scan :: class . java . name ) ĊĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠClass . forName ( it . name ) Ġ} ĊĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġinstantiate ( it ) Ġ} ĊĠĠ Ġ} Ġelse Ġempty List () ĊĊĠĠ Ġreturn Ġconf . copy ( ĊĠĠĠĠĠ Ġlisteners Ġ= Ġ( conf . listeners Ġ+ Ġaut osc anned . filter Is Instance < Listener > ()). distinct By Ġ{ Ġit :: class . java . name Ġ}, ĊĠĠĠĠĠ Ġfilters Ġ= Ġconf . filters Ġ+ Ġaut osc anned . filter Is Instance < Filter >(). distinct By Ġ{ Ġit :: class . java . name Ġ}, ĊĠĠĠĠĠ Ġextensions Ġ= Ġconf . extensions Ġ+ Ġaut osc anned . filter Is Instance < Extension >(). distinct By Ġ{ Ġit :: class . java . name Ġ} ĊĠĠ Ġ) Ċ } Ċ