/* ĊĊĠĠ ĠCopyright Ġ 2 0 2 2 ĠMichael ĠStr asser . ĊĊĠĠ Ġ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 Ġm js . kot est Ċ Ċ import Ġio . kot est . core . spec . Spec Ċ import Ġio . kot est . core . spec . style . Behavior Spec Ċ import Ġio . kot est . core . spec . style . scopes . Root Scope Ċ import Ġio . kot est . core . test . TestCase Ċ import Ġio . kot est . core . test . TestResult Ċ import Ġkotlin . time . Duration Ċ import Ġkotlin . time . Duration Unit Ċ Ċ /** Ċ Ġ* ĠBuild Ġa Ġ[ Spec Report ] Ġwith Ġa Ġtree Ġof Ġ[ Test Report ] Ġinstances Ġfor Ġall Ġsupplied Ċ Ġ* Ġ[ TestResult ] Ġinstances . Ċ Ġ*/ Ċ internal Ġobject ĠSpec Report Builder Ġ{ ĊĊĠĠĠ Ġprivate Ġconst Ġval ĠFAILURE Ġ= Ġ" Failure " ĊĠĠĠ Ġprivate Ġconst Ġval ĠCH ILD _ FAILURE Ġ= Ġ" Child Failure " ĊĊĠĠĠ Ġinternal Ġfun Ġreport From Results ( className : ĠString , Ġresults : ĠMap < TestCase , ĠTest Result >): ĠSpec Report Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġspec Report Ġ= ĠSpec Report ( className ) ĊĊĠĠĠĠĠĠĠ Ġval Ġreports Ġ= Ġreports From Results ( results ) ĊĠĠĠĠĠĠĠ Ġresults . keys . forEach Ġ{ Ġcase Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreport Ġ= Ġreports [ case ] !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparent Ġ= Ġcase . parent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( parent Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparent Report Ġ= Ġreports [ parent ] !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent Report . addChild Report ( report ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspec Report . description Ġ= Ġroot Scope Description ( case . spec ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspec Report . addChild Report ( report ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġset Child Failures On Containers ( spec Report ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġspec Report ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġroot Scope Description ( spec : ĠSpec ): ĠString ? Ġ= Ġwhen Ġ( spec ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠRoot Scope Ġ-> Ġspec . description ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠMap Ġ[ TestResult ] s Ġto Ġ[ Test Report ] s , Ġkey ed Ġby Ġthe Ġsame Ġ[ TestCase ] s . Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġreports From Results ( results : ĠMap < TestCase , ĠTest Result >): ĠMap < TestCase , ĠTest Report > Ġ= ĊĠĠĠĠĠĠĠ Ġresults . map Values Ġ{ Ġ( case , Ġresult ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTest Report ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġcase . reporting Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġresult . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġduration Ġ= Ġduration In Ms If Positive ( result ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġresult . error OrNull ?. stack Trace ToString (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval ĠTestCase . reporting Name : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġwhen Ġ( spec ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠBehavior Spec Ġ-> Ġwith ( name ) Ġ{ Ġ( prefix Ġ?: Ġ"") Ġ+ Ġtest Name Ġ+ Ġ( suffix Ġ?: Ġ"") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġname . test Name ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠFormat Ġa Ġpositive Ġ[ Duration ] Ġto Ġstring Ġin Ġmilliseconds , Ġelse Ġnull . Ġ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġduration In Ms If Positive ( result : ĠTest Result ): ĠString ? Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( result . duration Ġ> ĠDuration . ZERO ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . duration . toString ( Duration Unit . MILLISECONDS , Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġelse Ġnull ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSet Ġ[ Test Report . result ] Ġvalue Ġto Ġ" Child Failure " Ġif Ġany Ġof Ġits Ġdesc endant Ġreports ĊĠĠĠĠ Ġ* Ġhas Ġ" Failure ". ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġset Child Failures On Containers ( report : ĠSpec Report ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġset Child Failures ( report : ĠTest Report ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreport . reports . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Child Failures ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . result Ġ== ĠFAILURE Ġ|| Ġit . result Ġ== ĠCH ILD _ FAILURE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreport . result Ġ= ĠCH ILD _ FAILURE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreport . reports . forEach Ġ{ Ġset Child Failures ( it ) Ġ} ĊĠĠĠ Ġ} Ċ } Ċ