/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠAutom ate ĠThe ĠPlan et ĠLtd . Ċ Ġ* ĠAuthor : ĠAnt on ĠAnge lov Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* ĠYou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġsolutions . bell at rix . web . infrastructure Ċ Ċ import Ġsolutions . bell at rix . core . configuration . Configuration Service Ċ import Ġsolutions . bell at rix . core . plugins . Plugin Ċ import Ġsolutions . bell at rix . core . plugins . TestResult Ċ import Ġsolutions . bell at rix . web . configuration . Web Settings Ċ import Ġjava . lang . reflect . Method Ċ Ċ class ĠBrowser Lifecycle Plugin Ġ: ĠPlugin () Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġcurrent Browser Configuration : ĠThread Local < Browser Configuration > ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġprevious Browser Configuration : ĠThread Local < Browser Configuration > ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġis Browser Started During Pre BeforeClass : ĠThread Local < Boolean > ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġis Browser Started Correct ly : ĠThread Local < Boolean > ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Browser Configuration Ġ= ĠThread Local () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprevious Browser Configuration Ġ= ĠThread Local () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Browser Started During Pre BeforeClass Ġ= ĠThread Local () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Browser Started Correct ly Ġ= ĠThread Local () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġof (): ĠBrowser Lifecycle Plugin Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠBrowser Lifecycle Plugin () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpre BeforeClass ( type : ĠClass <* >) Ġ{ ĊĠĠĠĠĠĠĠ Ġcurrent Browser Configuration . set ( get Execution Browser Class Level ( type )) ĊĠĠĠĠĠĠĠ Ġif Ġ( should Restart Browser ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrestart Browser () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO : Ġmaybe Ġwe Ġcan Ġsimplify Ġand Ġremove Ġthis Ġparameter . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Browser Started During Pre BeforeClass . set ( true ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Browser Started During Pre BeforeClass . set ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsuper . pre BeforeClass ( type ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpost After Class ( type : ĠClass <* >) Ġ{ ĊĠĠĠĠĠĠĠ Ġshutdown Browser () ĊĠĠĠĠĠĠĠ Ġis Browser Started During Pre BeforeClass . set ( false ) ĊĠĠĠĠĠĠĠ Ġsuper . pre After Class ( type ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpre Before Test ( test Result : ĠTest Result , Ġmember Info : ĠMethod ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcurrent Browser Configuration . set ( get Browser Configuration ( member Info )) ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Browser Started During Pre BeforeClass . get () Ġ&& Ġshould Restart Browser ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrestart Browser () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġis Browser Started During Pre BeforeClass . set ( false ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġpost After Test ( test Result : ĠTest Result , Ġmember Info : ĠMethod ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( current Browser Configuration . get () !!. lifecycle Ġ=== ĠLifecycle . RE START _ ON _ FAIL ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġtest Result Ġ== ĠTest Result . FAILURE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshutdown Browser () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Browser Started During Pre BeforeClass . set ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshutdown Browser () Ġ{ ĊĠĠĠĠĠĠĠ ĠDriver Service . close () ĊĠĠĠĠĠĠĠ Ġprevious Browser Configuration . set ( null ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrestart Browser () Ġ{ ĊĠĠĠĠĠĠĠ Ġshutdown Browser () ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDriver Service . start ( current Browser Configuration . get ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Browser Started Correct ly . set ( true ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Browser Started Correct ly . set ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġprevious Browser Configuration . set ( current Browser Configuration . get ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshould Restart Browser (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠTODO : ĠIs Browser Started Correct ly Ġgetter ? ĊĠĠĠĠĠĠĠ Ġval Ġprevious Configuration Ġ= Ġprevious Browser Configuration . get () ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Configuration Ġ= Ġcurrent Browser Configuration . get () ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( previous Configuration Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(! is Browser Started Correct ly . get ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( previous Configuration Ġ!= Ġcurrent Configuration ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġcurrent Configuration . lifecycle Ġ=== ĠLifecycle . RE START _ E VERY _ TIME ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Browser Configuration ( member Info : ĠMethod ): ĠBrowser Configuration ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġclass Browser Type Ġ= Ġget Execution Browser Class Level ( member Info . decl aring Class ) ĊĠĠĠĠĠĠĠ Ġval Ġmethod Browser Type Ġ= Ġget Execution Browser Method Level ( member Info ) ĊĠĠĠĠĠĠĠ Ġval Ġresult : ĠBrowser Configuration ? Ġ= Ġif Ġ( method Browser Type Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmethod Browser Type ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclass Browser Type ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Execution Browser Method Level ( member Info : ĠMethod ): ĠBrowser Configuration Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexecution Browser Annotation Ġ= Ġmember Info . getDeclared Annotation ( Execution Browser :: class . java ) Ġas ĠExecution Browser ĊĠĠĠĠĠĠĠ Ġreturn ĠBrowser Configuration ( execution Browser Annotation . browser , Ġexecution Browser Annotation . lifecycle ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Execution Browser Class Level ( type : ĠClass < *> ): ĠBrowser Configuration Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexecution Browser Annotation Ġ= Ġtype . getDeclared Annotation ( Execution Browser :: class . java ) Ġas ĠExecution Browser ĊĠĠĠĠĠĠĠ Ġif Ġ( execution Browser Annotation Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdefault Browser Ġ= ĠBrowser . from Text ( Configuration Service . get < Web Settings >(). default Browser ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdefault Lifecycle Ġ= ĠLifecycle . from Text ( Configuration Service . get < Web Settings >(). default Life Cycle ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠBrowser Configuration ( default Browser , Ġdefault Lifecycle ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠBrowser Configuration ( execution Browser Annotation . browser , Ġexecution Browser Annotation . lifecycle ) ĊĠĠĠ Ġ} Ċ }