package Ġcom . be ust . k ob alt . internal Ċ Ċ import Ġcom . be ust . k ob alt .* Ċ import Ġcom . be ust . k ob alt . api .* Ċ import Ġcom . be ust . k ob alt . misc . K Files Ċ import Ġcom . be ust . k ob alt . misc . log Ċ import Ġjava . io . File Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* ĠBase Ġclass Ġfor Ġtesting Ġframeworks Ġthat Ġare Ġinvoked Ġfrom Ġa Ġmain Ġclass Ġwith Ġarguments . ĠTest Ġrun ners Ġcan Ċ Ġ* Ġsubclass Ġthis Ġclass Ġand Ġoverride Ġmain Class , Ġargs Ġand Ġthe Ġname Ġof Ġthe Ġdependency Ġthat Ġshould Ġtrigger Ġthis Ġrunner . Ċ Ġ*/ Ċ abstract Ġclass ĠGeneric TestRunner Ġ: ĠI TestRunner Contributor Ġ{ ĊĠĠĠ Ġabstract Ġval Ġdependency Name Ġ: ĠString ĊĠĠĠ Ġabstract Ġval Ġmain Class : ĠString ĊĠĠĠ Ġabstract Ġfun Ġargs ( project : ĠProject , Ġclasspath : ĠList < IC lass path Dependency >, Ġtest Config : ĠTest Config ) Ġ: ĠList < String > ĊĊĠĠĠ Ġoverride Ġfun Ġrun ( project : ĠProject , Ġcontext : ĠK ob alt Context , Ġconfig Name : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclasspath : ĠList < IC lass path Dependency >) ĊĠĠĠĠĠĠĠ Ġ= ĠTask Result ( run Tests ( project , Ġclasspath , Ġconfig Name )) ĊĊĠĠĠ Ġoverride Ġfun Ġaff inity ( project : ĠProject , Ġcontext : ĠK ob alt Context ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( project . test Dependencies . any Ġ{ Ġit . id . contains ( dependency Name )}) ĠI Affinity . DEFAULT _ POSITIVE _ AFF INITY ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ 0 ĊĊĠĠĠ Ġprotected Ġfun Ġfind Test Classes ( project : ĠProject , Ġtest Config : ĠTest Config ): ĠList < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpath Ġ= ĠK Files . join Dir ( project . build Directory , ĠK Files . TEST _ CLASSES _ DIR ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFile ( this ). mkdir s () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠI File Spec . Glob Spec ( to Class Paths ( test Config . test Includes )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Files ( project . directory , Ġpath , Ġtest Config . test Exclude s . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠG lob ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}). map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . toString (). replace ("/", Ġ". "). replace ("\\ ", Ġ". "). replace (". class ", Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġlog ( 2 , Ġ" Found Ġ${ result . size } Ġtest Ġclasses ") ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġto Class Paths ( paths : ĠList < String >): ĠArrayList < String > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpaths . map Ġ{ Ġif Ġ( it . endsWith (" class ")) Ġit Ġelse Ġit Ġ+ Ġ" class " Ġ}. to Collection ( ArrayList ()) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ return Ġtrue Ġif Ġall Ġthe Ġtests Ġpassed ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġrun Tests ( project : ĠProject , Ġclasspath : ĠList < IC lass path Dependency >, Ġconfig Name : ĠString ) Ġ: ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġj vm Ġ= ĠJava Info . create ( File ( System Properties . java Base )) ĊĠĠĠĠĠĠĠ Ġval Ġjava Ġ= Ġj vm . java Executable ĊĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġval Ġtest Config Ġ= Ġproject . test Configs . first OrNull Ġ{ Ġit . name Ġ== Ġconfig Name Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( test Config Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġargs Ġ= Ġargs ( project , Ġclasspath , Ġtest Config ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( args . size Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġall Args Ġ= Ġarray ListOf < String >(). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( java !!. absolute Path ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd All ( test Config . jvm Args ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd ("- classpath ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( classpath . map Ġ{ Ġit . jar File . get (). absolute Path Ġ}. join ToString ( File . path Separator )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( main Class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd All ( args ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpb Ġ= ĠProcess Builder ( all Args ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpb . directory ( File ( project . directory )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpb . inherit IO () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog ( 1 , Ġ" Running Ġtests Ġwith Ġclasspath Ġsize Ġ${ classpath . size }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog ( 2 , Ġ" Launch ing Ġ" Ġ+ Ġall Args . join ToString (" Ġ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprocess Ġ= Ġpb . start () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠerrorCode Ġ= Ġprocess . waitFor () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( errorCode Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog ( 1 , Ġ" All Ġtests Ġpassed ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog ( 1 , Ġ" Test Ġfailures ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġresult Ġ|| ĠerrorCode Ġ== Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog ( 2 , Ġ" Couldn 't Ġfind Ġany Ġtest Ġclasses ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠK ob alt Exception (" Couldn 't Ġfind Ġa Ġtest Ġconfiguration Ġnamed Ġ\"$ config Name \" ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} Ċ } ĊĊ