package Ġcom . network ed assets . g her kin . runner . report Ċ Ċ import Ġcom . network ed assets . g her kin . runner . junit . Failure Ċ import Ġcom . network ed assets . g her kin . runner . junit . Properties Ċ import Ġcom . network ed assets . g her kin . runner . junit . Test case Ċ import Ġcom . network ed assets . g her kin . runner . junit . Tests uite Ċ import Ġcom . network ed assets . g her kin . runner . report . data . Feature Report Ċ import Ġcom . network ed assets . g her kin . runner . report . data . Report Ċ import Ġcom . network ed assets . g her kin . runner . report . data . Report State Ċ import Ġcom . network ed assets . g her kin . runner . report . data . Scenario Report Ċ import Ġjava . io . String Writer Ċ import Ġjava . net . Inet Address Ċ import Ġjava . time . format . DateTime Formatter Ċ import Ġjavax . xml . bind . JAXB Context Ċ import Ġjavax . xml . bind . Marshaller Ċ Ċ class ĠJ Unit Report Exporter Ġ: ĠReport Exporter Ġ{ ĊĠĠĠ Ġoverride Ġval Ġname Ġ= Ġ" JUnit " ĊĊĠĠĠ Ġoverride Ġfun Ġexport ( report : ĠReport ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġreport . feature Reports . map (:: convert Feature Report To Tests uite ) ĊĠĠĠĠĠĠĠ Ġresult . forEach Ġ{ Ġtests uite Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjunit Report FilePath Ġ= Ġ"${ reports Dir () }/ junit / J UNIT - REPORT -${ tests uite . name }. xml " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrite ToFile ( junit Report FilePath , Ġtests uite To XML String ( tests uite )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġconvert Feature Report To Tests uite ( feature Report : ĠFeature Report ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTest suite (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġfeature Report . feature . name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtests Ġ= Ġfeature Report . getNumberOf Sc enarios (). toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġskipped Ġ= Ġ( feature Report . getNumberOf Skipped Sc enarios () Ġ+ Ġfeature Report . getNumberOf Multiple Implement ations Sc enarios () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġfeature Report . getNumberOf NotImplemented Sc enarios ()). toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfailures Ġ= Ġfeature Report . getNumberOf Failed Sc enarios (). toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerrors Ġ= Ġ" 0 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimestamp Ġ= Ġfeature Report . startTime ?. format ( DateTime Formatter . ISO _ DATE _ TIME ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhostname Ġ= ĠInet Address . getLocal Host (). host Name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Ġ= Ġ( feature Report . execution Time Ġ/ Ġ 1 0 0 0 . 0 ). toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproperties Ġ= ĠProperties () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsystem Out Ġ= Ġfeature Report . log . join ToString ("\ n ") Ġ{ Ġit . message Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsystem Err Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrepeated Sc enarios Ġ= Ġfeature Report . scenario Reports . groupBy Ġ{ Ġit . scenario . name Ġ}. filter Ġ{ Ġit . value . size Ġ> Ġ 1 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnot Repeated Sc enarios Ġ= Ġfeature Report . scenario Reports . groupBy Ġ{ Ġit . scenario . name Ġ}. filter Ġ{ Ġit . value . size Ġ== Ġ 1 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtest cases Ġ= Ġrepeated Sc enarios . flatMap Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . value . map Indexed Ġ{ Ġi , Ġscenario Report Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconvert Scenario Report To Test case ( feature Report . feature . name , Ġ"${ scenario Report . scenario . name } Ġ# ${ i Ġ+ Ġ 1 }", Ġscenario Report ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. union ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnot Repeated Sc enarios . flatMap Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . value . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconvert Scenario Report To Test case ( feature Report . feature . name , Ġit . scenario . name , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest case . addAll ( test cases ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġconvert Scenario Report To Test case ( feature Name : ĠString , Ġscenario Name : ĠString , Ġscenario Report : ĠScenario Report ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTest case (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġscenario Name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclassname Ġ= Ġfeature Name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime Ġ= Ġ( scenario Report . execution Time Ġ/ Ġ 1 0 0 0 . 0 ). toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfailures Ġ= Ġscenario Report . step Reports . filter Ġ{ Ġscenario Report . state Ġ== ĠReport State . FAILED Ġ}. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFailure (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġit . getError () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= Ġit . throw n Exception ?. let Ġ{ Ġit :: class . qualified Name Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Ġ= Ġit . getError StackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfailure . addAll ( failures ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġskipped States Ġ= ĠlistOf ( Report State . NOT _ IMPLEMENTED , ĠReport State . SKIP PED , ĠReport State . MULTIPLE _ IMPLEMENT ATIONS , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠReport State . MULTIPLE _ IMPLEMENT ATIONS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( scenario Report . state Ġin Ġskipped States ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġskipped Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtests uite To XML String ( tests uite : ĠTest suite ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjax b Context Ġ= ĠJAXB Context . newInstance ( Tests uite :: class . java ) ĊĠĠĠĠĠĠĠ Ġval Ġmarshaller Ġ= Ġjax b Context . create Marshaller () ĊĠĠĠĠĠĠĠ Ġmarshaller . setProperty ( Marshaller . JAXB _ FORMAT TED _ OUTPUT , Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġval Ġstring Writer Ġ= ĠString Writer () ĊĠĠĠĠĠĠĠ Ġstring Writer . use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmarshaller . marshal ( tests uite , Ġstring Writer ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġstring Writer . toString () ĊĠĠĠ Ġ} Ċ }