package Ġcom . av ito . instrumentation . report Ċ Ċ import Ġcom . av ito . instrumentation . Test Run Result Ċ import Ġcom . av ito . report . Report Viewer Ċ import Ġcom . av ito . report . model . Report Coordinates Ċ import Ġcom . av ito . report . model . St ability Ċ import Ġcom . av ito . report . model . Status Ċ import Ġorg . apache . commons . text . String Escape Utils Ċ import Ġjava . io . File Ċ Ċ class ĠJ Unit Report Writer ( private Ġval Ġreport Viewer : ĠReport Viewer ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġestimated Test Record Size Ġ= Ġ 1 5 0 ĊĊĠĠĠ Ġfun Ġwrite ( ĊĠĠĠĠĠĠĠ Ġreport Coordinates : ĠReport Coordinates , ĊĠĠĠĠĠĠĠ Ġtest Run Result : ĠTest Run Result , ĊĠĠĠĠĠĠĠ Ġdestination : ĠFile ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtest Count Overall Ġ= Ġtest Run Result . test Count () ĊĠĠĠĠĠĠĠ Ġval Ġtest Count Success Ġ= Ġtest Run Result . success Count () ĊĠĠĠĠĠĠĠ Ġval Ġtest Count Failures Ġ= Ġtest Run Result . failure Count () ĊĠĠĠĠĠĠĠ Ġval Ġtest Count Errors Ġ= Ġtest Run Result . not Reported Count () ĊĠĠĠĠĠĠĠ Ġval Ġtest Count Skipped Ġ= Ġtest Run Result . skipped Count () ĊĊĠĠĠĠĠĠĠ Ġrequire ( test Count Overall Ġ== Ġtest Count Success Ġ+ Ġtest Count Failures Ġ+ Ġtest Count Skipped Ġ+ Ġtest Count Errors ) ĊĊĠĠĠĠĠĠĠ Ġval Ġxml Ġ= Ġbuild String ( test Count Overall Ġ* Ġestimated Test Record Size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend ln (""" <? xml Ġversion =" 1 . 0 " Ġencoding =" UTF - 8 "?> """) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend ("< tests uite Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend (""" name ="${ report Coordinates . plan Slug }_${ report Coordinates . job Slug }" Ġ"" ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend (""" tests ="$ test Count Overall " Ġ"" ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend (""" failures ="$ test Count Failures " Ġ"" ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend (""" errors ="$ test Count Errors " Ġ"" ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend (""" skipped ="$ test Count Skipped " Ġ"" ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend (""" time ="${ test Run Result . tests Duration }" Ġ"" ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend ln ("> ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend ln ("< properties /> ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtest Run Result . reported Tests . forEach Ġ{ Ġtest Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ("< testcase Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (""" classname ="${ test . className }" Ġ"" ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (""" name ="${ test . methodName }" Ġ"" ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (""" case Id ="${ test . testCase Id }" Ġ"" ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (""" time ="${ test . last Attempt Duration InSeconds } """ ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ln ("> ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( test . st ability Ġis ĠSt ability . Fl aky ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ln ("< system - out >") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend Esc aped Line (" Fl aky Ġtest . ĠSuccess Ġruns : Ġ${ ( test . st ability Ġas ĠSt ability . Fl aky ). success Count } Ġout Ġof Ġ${ ( test . st ability Ġas ĠSt ability . Fl aky ). attempts Count }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ln ("</ system - out >") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( test . status ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠStatus . Skipped Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ln ("< skipped /> ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( test . skip Reason Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ln ("< system - out >") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend Esc aped Line (" Ð¢ ÐµÑģÑĤ ĠÐ½Ðµ ĠÐ·Ð°Ð¿ ÑĥÑģ Ðº Ð°Ð» ÑģÑı : Ġ${ test . skip Reason }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ln ("</ system - out >") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠStatus . Failure Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ln ("< failure >") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend Esc aped Line (( test . status Ġas ĠStatus . Failure ). ver dict ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ln (" Report ĠViewer : Ġ${ report Viewer . generate Single Test Run Url ( test . id )} ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ln ("</ failure >") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠStatus . Lost Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ln ("< error >") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ln (" LO ST Ġ( no Ġinfo Ġin Ġreport )") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ln (" Report ĠViewer : Ġ${ report Viewer . generate Single Test Run Url ( test . id )} ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ln ("</ error >") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStatus . Success Ġ-> Ġ{ Ġ/* Ġdo Ġnothing Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStatus . Manual Ġ-> Ġ{ Ġ/* Ġdo Ġnothing Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ln ("</ testcase >") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtest Run Result . not Reported . lost Tests . forEach Ġ{ Ġtest Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ("< testcase Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (""" classname ="${ test . name . className }" Ġ"" ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (""" name ="${ test . name . methodName }" Ġ"" ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (""" case Id ="${ test . testCase Id }" Ġ"" ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (""" time =" unknown """ ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ln ("> ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ln ("< error >") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ln (" Not Ġreported ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ln ("</ error >") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ln ("</ testcase >") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend ln ("</ tests uite >") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdestination . write Text ( xml ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠStringBuilder . append Esc aped Line ( line : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġappend ln ( String Escape Utils . escape Xml 1 0 ( line )) ĊĠĠĠ Ġ} Ċ } Ċ