package Ġio . eng en ious . s ift Ċ Ċ import Ġcom . android . dd m lib . I Device Ċ import Ġcom . github . tar cv . t ongs . api . result . FileType Ċ import Ġcom . github . tar cv . t ongs . api . result . Image Report Data Ċ import Ġcom . github . tar cv . t ongs . api . result . TestCase File Ċ import Ġcom . github . tar cv . t ongs . api . result . TestCase Run Result Ċ import Ġcom . github . tar cv . t ongs . api . run . Result Status Ċ import Ġcom . github . tar cv . t ongs . api . run . TestCase Run Rule Ċ import Ġcom . github . tar cv . t ongs . api . run . TestCase Run Rule After Arguments Ċ import Ġcom . github . tar cv . t ongs . api . run . TestCase Run RuleContext Ċ import Ġcom . github . tar cv . t ongs . api . run . TestCase Run Rule Factory Ċ import Ġcom . github . tar cv . t ongs . system . adb . Collect ing Shell Output Receiver Ċ import Ġio . eng en ious . s ift . run . Result Data Ċ import Ġio . eng en ious . s ift . run . Run Data Ċ import Ġjava . io . File Ċ Ċ class ĠResult Collect ing Plugin Ġ: ĊĠĠĠ ĠCon veyor . Plugin < Run Data , ĠResult Data >(), ĠTestCase Run Rule Factory < TestCase Run Rule > Ġ{ ĊĠĠĠ Ġ// ĠThis Ġplugin Ġshould Ġnot Ġadvance Ġthe Ġcon veyor Ġby Ġitself , ĊĠĠĠ Ġ// Ġinstead Ġthe Ġcon veyor Ġis Ġadvanced Ġautomatically Ġonce Ġthe Ġcurrent Ġtest Ġrun Ġis Ġcomplete ĊĊĠĠĠ Ġoverride Ġfun ĠtestCase Run Rules ( context : ĠTestCase Run RuleContext ): ĠArray < out ĠTestCase Run Rule > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠarrayOf ( Result Collect ing TestCase Run Rule ( previous Storage . enabled Tests , Ġstorage . results , Ġcontext )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinit Storage (): ĠResult Data Ġ= ĠResult Data ( previous Storage . run Id ) Ċ } Ċ Ċ open Ġclass ĠResult Collect ing TestCase Run Rule ( ĊĠĠĠ Ġprivate Ġval Ġidentifier To Id Mapping : ĠMap < Test Identifier , ĠInt >, ĊĠĠĠ Ġprivate Ġval Ġtest Results : ĠMutable Map < Test Identifier , ĠF illed TestResult >, ĊĠĠĠ Ġprivate Ġval Ġcontext : ĠTestCase Run RuleContext Ċ ) Ġ: ĠTestCase Run Rule Ġ{ ĊĠĠĠ Ġprivate Ġval Ġscreenshot Path Ġ= Ġ"/ sd card / failure . png " ĊĠĠĠ Ġprivate Ġval Ġscreenshot Data Name Ġ= Ġ" Failure Ġscreenshot " ĊĠĠĠ Ġprivate Ġval Ġdevice Ġ= Ġcontext . device . device Interface Ġas ? ĠI Device ĊĊĠĠĠ Ġoverride Ġfun Ġafter ( arguments : ĠTestCase Run Rule After Arguments ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtest Identifier Ġ= ĠTest Identifier . from TestCase ( arguments . result . testCase ) ĊĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġidentifier To Id Mapping [ test Identifier ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegalStateException (" Orche strator Ġdidn 't Ġsend Ġtest Ġid Ġfor Ġ$ test Identifier ") ĊĊĠĠĠĠĠĠĠ Ġval Ġstatus Ġ= ĠStatus . from TestCase Run Result ( arguments . result ) ĊĠĠĠĠĠĠĠ Ġval Ġscreenshot Ġ= Ġif Ġ( status Ġ== ĠStatus . FAILED Ġ|| Ġstatus Ġ== ĠStatus . ER RO RED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġattempt Index Ġ= Ġarguments . result . total Failure Count ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( device Ġ!= Ġnull ) Ġ{ Ġ// Ġis Ġa Ġlocal Ġdevice ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpull Screenshot ( device , Ġattempt Index . toString ()) ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Screenshot To Html Report ( it , Ġarguments ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . to File () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarguments . result . data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Is Instance < Image Report Data >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. last OrNull Ġ{ Ġit . title Ġ== Ġscreenshot Data Name Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . let Ġ{ ĠFile ( it . image Path ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtest Results [ test Identifier ] Ġ= ĠF illed TestResult ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠResult . from TestCase Run Result ( arguments . result , Ġscreenshot ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Screenshot To Html Report ( ĊĠĠĠĠĠĠĠ Ġlocal File : ĠTestCase File , ĊĠĠĠĠĠĠĠ Ġarguments : ĠTestCase Run Rule After Arguments ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġscreenshot Data Ġ= ĠImage Report Data ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscreenshot Data Name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocal File ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġarguments . result Ġ= Ġarguments . result . copy ( data Ġ= ĠlistOf ( screenshot Data ) Ġ+ Ġarguments . result . data ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpull Screenshot ( device Interface : ĠI Device , Ġname Suffix : ĠString ) Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlocal File Ġ= Ġcontext . file Manager . testCase File ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠScreen shot FileType , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Suffix ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġdevice Interface . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpull File ( screenshot Path , Ġlocal File . create (). absolute Path ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġlocal File ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ ĠSystem . err . println (" Failed Ġto Ġpull Ġthe Ġfailure Ġscreenshot Ġ$ screenshot Path :") Ġ// ĠTODO : Ġconvert Ġto Ġlog Ġcall ĊĠĠĠĠĠĠĠ Ġe . printStackTrace ( System . err ) ĊĠĠĠĠĠĠĠ Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġbefore () Ġ{ ĊĠĠĠĠĠĠĠ Ġdevice Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdevice . execute Shell Command ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" rm Ġ$ screenshot Path ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCollect ing Shell Output Receiver () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . err . println (" Failed Ġto Ġremove Ġold Ġscreenshot :") Ġ// ĠTODO : Ġconvert Ġto Ġlog Ġcall ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace ( System . err ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ enum Ġclass ĠStatus ( val Ġserialized : ĠString ) Ġ{ ĊĠĠĠ ĠFAILED (" failed "), ĊĠĠĠ ĠPAS SED (" passed "), ĊĠĠĠ ĠPAS SED _ AFTER _ RETRY ING (" passed _ after _ rer un "), ĊĠĠĠ ĠER RO RED (" failed "), ĊĠĠĠ ĠSKIP PED (" skipped "); ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġfrom TestCase Run Result ( result : ĠTestCase Run Result ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( result . status ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResult Status . PASS Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result . total Failure Count Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPAS SED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPAS SED _ AFTER _ RETRY ING ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResult Status . FAIL Ġ-> ĠFAILED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResult Status . ERROR Ġ-> ĠER RO RED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResult Status . IG NO RED , ĠResult Status . ASS UMP TION _ FAILED Ġ-> ĠSKIP PED ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ data Ġclass ĠResult ( ĊĠĠĠ Ġval Ġstatus : ĠStatus , ĊĠĠĠ Ġval ĠerrorMessage : ĠString , ĊĠĠĠ Ġval Ġscreenshot : ĠFile ? Ċ ) Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġfrom TestCase Run Result ( result : ĠTestCase Run Result , Ġscreenshot : ĠFile ?): ĠResult Ġ= ĠResult ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠStatus . from TestCase Run Result ( result ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . stack Tr aces ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. join ToString ("\ n \ n ") Ġ{ Ġit . full Trace Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscreenshot ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠF illed TestResult ( ĊĠĠĠ Ġval Ġid : ĠInt , ĊĠĠĠ Ġval Ġresult : ĠResult Ċ ) Ċ Ċ object ĠScreen shot FileType Ġ: ĠFile Type Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġget Directory (): ĠString Ġ= Ġ" screenshots " ĊĊĠĠĠ Ġoverride Ġfun Ġget Suffix (): ĠString Ġ= Ġ" png " Ċ } Ċ