/* ĠĊ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 1 ĠHu awei ĠTechnologies ĠCo ., L td . Ċ Ġ* Ċ Ġ* Ġopen Ga uss Ġis Ġlicensed Ġunder ĠMul an ĠP SL Ġv 2 . Ċ Ġ* ĠYou Ġcan Ġuse Ġthis Ġsoftware Ġaccording Ġto Ġthe Ġterms Ġand Ġconditions Ġof Ġthe ĠMul an ĠP SL Ġv 2 . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof ĠMul an ĠP SL Ġv 2 Ġat : Ċ Ġ* Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠ Ġhttp :// license . co scl . org . cn / Mul an P SL 2 Ċ Ġ* ĠĠĠĠĠĠĠĠĊ Ġ* ĠTHIS ĠSOFTWARE ĠIS ĠPROVIDED ĠON ĠAN Ġ" AS ĠIS " ĠBASIS , ĠWITHOUT ĠWARRANTIES ĠOF ĠANY ĠKIND , Ċ Ġ* ĠE IT HER ĠEXPRESS ĠOR ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠNON - INFRINGEMENT , Ċ Ġ* ĠMERCHANTABILITY ĠOR ĠF IT ĠFOR ĠA ĠPARTICULAR ĠPURPOSE . Ċ Ġ* ĠSee Ġthe ĠMul an ĠP SL Ġv 2 Ġfor Ġmore Ġdetails . Ċ Ġ*/ Ċ Ċ package Ġcom . hu awei . gauss . y at Ċ Ċ import Ġcom . hu awei . gauss . y at . common . File Locker Ċ import Ġcom . hu awei . gauss . y at . common . Y at RuntimeError Ċ import Ġcom . hu awei . gauss . y at . report . Combine Summary Report Ċ import Ġcom . hu awei . gauss . y at . report . Debug Summary Report Ċ import Ġcom . hu awei . gauss . y at . report . Json Summary Report Ċ import Ġcom . hu awei . gauss . y at . report . Log Summary Report Ċ import Ġcom . hu awei . gauss . y at . report . Summary Report Ċ import Ġcom . hu awei . gauss . y at . report . Printer Summary Report Ċ import Ġcom . hu awei . gauss . y at . scheduler . Scheduler Ċ import Ġcom . hu awei . gauss . y at . scheduler . parser . Parser Ċ import Ġcom . hu awei . gauss . y at . scheduler . parser . Schedule SyntaxError Ċ import Ġcom . hu awei . gauss . y at . scheduler . parser . Schedule Tree Ċ import Ġcom . hu awei . gauss . y at . setting . KEY _ TEST _ DIR Ċ import Ġcom . hu awei . gauss . y at . setting . Setting ParseError Ċ import Ġcom . hu awei . gauss . y at . setting . Y AT _ HOME _ ENV Ċ import Ġcom . hu awei . gauss . y at . setting . Y at Context Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġjava . io . File Ċ import Ġjava . io . Print Stream ĊĊ Ċ class ĠY at Application Ġ{ ĊĠĠĠ Ġprivate Ġval Ġcontext Ġ= ĠY at Context () ĊĊĠĠĠ Ġprivate Ġfun Ġinit Log () Ġ{ ĊĠĠĠĠĠĠĠ ĠSystem . setProperty ( KEY _ TEST _ DIR , Ġcontext . suite . v Suite . work Dir . absolute Path ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Report Stream (): ĠPrint Stream Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠPrint Stream ( context . suite . v Suite . output . y at Text Log . output Stream ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Report ( with Console : ĠBoolean Ġ= Ġtrue ): ĠSummary Report Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreports Ġ= Ġmutable ListOf < Summary Report >() ĊĠĠĠĠĠĠĠ Ġval Ġsuite Name Ġ= Ġcontext . suite . name ĊĊĠĠĠĠĠĠĠ Ġreports . add ( Printer Summary Report ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuite Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Report Stream (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . reporter . width , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . reporter . fill ing )) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( with Console ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreports . add ( Printer Summary Report ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuite Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . out , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . reporter . width , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . reporter . fill ing , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . reporter . color , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . reporter . bare )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreports . add ( Debug Summary Report ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . suite . v Suite . testCase Dir , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . suite . v Suite . expect Dir , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . suite . v Suite . output . result Dir , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . case . out Suffix )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreports . add ( Json Summary Report ( suite Name , Ġcontext . suite . v Suite . output . y at Json Log )) ĊĠĠĠĠĠĠĠ Ġreports . add ( Log Summary Report ( suite Name , Ġcontext . suite . v Suite . output . y at Redo Log )) ĊĠĠĠĠĠĠĠ Ġreturn ĠCombine Summary Report ( reports ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrun ( args : ĠArray < String >) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhome Ġ= ĠSystem . getenv ( Y AT _ HOME _ ENV ) Ġ?: Ġthrow ĠY at RuntimeError (" Y AT _ HOME Ġenv Ġnot Ġfound ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . load ( home , Ġargs ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġlog Ġinitialize Ġthen Ġthe Ġlogger Ġcan Ġbe Ġuse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit Log () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . dump () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( e ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠY at RuntimeError , Ġis ĠSetting ParseError Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( e . message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow Ġe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġlogger Ġ= ĠLoggerFactory . getLogger ( Y at Application :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġlogger . info (" ================ =========== ĠNew ĠTest ĠStarted Ġ================= ============== =") ĊĊĠĠĠĠĠĠĠ ĠFile Locker ( context . suite . v Suite . output . lock File ). use Ġ{ Ġlock er Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( locker . lock ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun Suite () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠY at RuntimeError (" Another Ġy at Ġis Ġrunning Ġon Ġthis Ġsuite Ġmaybe , Ġstop Ġnow ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( e ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠY at RuntimeError , Ġis ĠIllegalArgumentException , Ġis ĠSchedule SyntaxError Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" error : Ġ${ e . message }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" exception Ġfound : Ġ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow Ġe ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrun Suite () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġwith Console : ĠBoolean ĊĠĠĠĠĠĠĠ Ġval Ġschedule Tree Ġ= Ġif Ġ( context . action Ġ== Ġ" debug ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Console Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ ĠParser . create ( context . cases ). parse () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimport Paths Ġ= ĠarrayOf (".", Ġcontext . suite . v Suite . schedule Dir . absolute Path ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Console Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( context . schedule . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠY at RuntimeError (" can Ġnot Ġfound Ġthe Ġdefault Ġschedule Ġfile , Ġplease Ġusing Ġ- s / -- schedule Ġto Ġspecific Ġthe Ġschedule Ġfile ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠParser . create ( File ( context . schedule ), Ġimport Paths ). parse () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠCase Meta Maker ( context ). make Case Meta ( schedule Tree ) ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( context . action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" info " Ġ-> Ġprint Suite Info ( schedule Tree ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" run ", Ġ" debug " Ġ-> ĠScheduler ( schedule Tree , Ġcontext ). schedule ( get Report ( with Console )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠY at RuntimeError (" unknown Ġaction Ġcommand Ġfound ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġprint Suite Info ( schedule Tree : ĠSchedule Tree ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinfo Ġ= Ġschedule Tree . info () ĊĊĠĠĠĠĠĠĠ Ġprintln (" Test ĠSuite ĠName : Ġ${ context . suite . name }") ĊĠĠĠĠĠĠĠ Ġprintln (" Sub - Suite ĠCount : Ġ${ info . sub Suite Count }") ĊĠĠĠĠĠĠĠ Ġprintln (" Test ĠCase ĠCount : Ġ${ info . case Count }") ĊĠĠĠ Ġ} Ċ }