/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 7 - 2 0 1 9 ĠHERE ĠEurope ĠB . V . Ċ Ġ* Ċ Ġ* Ġ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 Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttps :// 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 . Ċ Ġ* Ċ Ġ* ĠSPDX - License - Identifier : ĠApache - 2 . 0 Ċ Ġ* ĠLicense - Filename : ĠLICENSE Ċ Ġ*/ Ċ Ċ package Ġorg . oss review toolkit . utils . test Ċ Ċ import Ġcom . fasterxml . jackson . module . kotlin . readValue Ċ Ċ import Ġio . kot est . matchers . Matcher Ċ import Ġio . kot est . matchers . maps . Map Contains Matcher Ċ Ċ import Ġjava . io . File Ċ import Ġjava . time . Instant Ċ Ċ import Ġorg . oss review toolkit . model . Or t Result Ċ import Ġorg . oss review toolkit . model . config . Analyzer Configuration Ċ import Ġorg . oss review toolkit . model . config . Repository Configuration Ċ import Ġorg . oss review toolkit . model . mapper Ċ import Ġorg . oss review toolkit . model . yaml Mapper Ċ Ċ val ĠDEFAULT _ ANAL YZ ER _ CONFIGURATION Ġ= ĠAnalyzer Configuration ( allow Dynamic Versions Ġ= Ġfalse ) Ċ val ĠDEFAULT _ REPOSITORY _ CONFIGURATION Ġ= ĠRepository Configuration () Ċ Ċ val ĠUSER _ DIR Ġ= ĠFile ( System . getProperty (" user . dir ")) Ċ Ċ private Ġval ĠOR T _ VERSION _ REGEX Ġ= ĠRegex ("( ort _ version ): Ġ\ ". * \" ") Ċ private Ġval ĠJAVA _ VERSION _ REGEX Ġ= ĠRegex ("( java _ version ): Ġ\ ". * \" ") Ċ private Ġval ĠENV _ VAR _ REGEX Ġ= ĠRegex ("( \\ s { 4 } variables :) \\ n (?: \\ s { 6 }. + )+ ") Ċ private Ġval ĠENV _ TOOL _ REGEX Ġ= ĠRegex ("( \\ s { 4 } tool _ versions :) \\ n (?: \\ s { 6 }. + )+ ") Ċ private Ġval ĠSTART _ AND _ END _ TIME _ REGEX Ġ= ĠRegex (" (( start | end )_ time ): Ġ\ ". * \" ") Ċ private Ġval ĠTIMESTAMP _ REGEX Ġ= ĠRegex ("( timestamp ): Ġ\ ". * \" ") Ċ Ċ fun Ġ< K , ĠV > Ġcontain Exactly ( var arg Ġexpected : ĠPair < K , ĠV >): ĠMatcher < Map < K , ĠV >> Ġ= ĠMap Contains Matcher ( expected . toMap ()) Ċ Ċ fun Ġpatch Expected Result ( ĊĠĠĠ Ġresult : ĠFile , ĊĠĠĠ Ġcustom : ĠMap < String , ĠString > Ġ= Ġempty Map (), ĊĠĠĠ Ġdefinition FilePath : ĠString ? Ġ= Ġnull , ĊĠĠĠ Ġurl : ĠString ? Ġ= Ġnull , ĊĠĠĠ Ġrevision : ĠString ? Ġ= Ġnull , ĊĠĠĠ Ġpath : ĠString ? Ġ= Ġnull , ĊĠĠĠ Ġurl Processed : ĠString ? Ġ= Ġnull Ċ ): ĠString Ġ{ ĊĠĠĠ Ġfun ĠString . replace If NotNull ( oldValue : ĠString , ĠnewValue : ĠString ?) Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( newValue Ġ!= Ġnull ) Ġreplace ( oldValue , ĠnewValue ) Ġelse Ġthis ĊĊĠĠĠ Ġreturn Ġcustom . entries . fold ( result . read Text ()) Ġ{ Ġtext , Ġentry Ġ-> Ġtext . replace If NotNull ( entry . key , Ġentry . value ) Ġ} ĊĠĠĠĠĠĠĠ Ġ. replace If NotNull ("< REPLACE _ JAVA >", ĠSystem . getProperty (" java . version ")) ĊĠĠĠĠĠĠĠ Ġ. replace If NotNull ("< REPLACE _ OS >", ĠSystem . getProperty (" os . name ")) ĊĠĠĠĠĠĠĠ Ġ. replace If NotNull ("\" < REPLACE _ PROCESS ORS > \"", ĠRuntime . get Runtime (). available Processors (). toString ()) ĊĠĠĠĠĠĠĠ Ġ. replace If NotNull ("\" < REPLACE _ MAX _ MEMORY > \"", ĠRuntime . get Runtime (). max Memory (). toString ()) ĊĠĠĠĠĠĠĠ Ġ. replace If NotNull ("< REPLACE _ DEFINITION _ FILE _ PATH >", Ġdefinition FilePath ) ĊĠĠĠĠĠĠĠ Ġ. replace If NotNull ("< REPLACE _ URL >", Ġurl ) ĊĠĠĠĠĠĠĠ Ġ. replace If NotNull ("< REPLACE _ REVISION >", Ġrevision ) ĊĠĠĠĠĠĠĠ Ġ. replace If NotNull ("< REPLACE _ PATH >", Ġpath ) ĊĠĠĠĠĠĠĠ Ġ. replace If NotNull ("< REPLACE _ URL _ PROC ES SED >", Ġurl Processed ) Ċ } Ċ Ċ fun Ġpatch Actual Result ( ĊĠĠĠ Ġresult : ĠString , ĊĠĠĠ Ġpatch Start And EndTime : ĠBoolean Ġ= Ġfalse Ċ ): ĠString Ġ{ ĊĠĠĠ Ġfun ĠString . replace If ( condition : ĠBoolean , Ġregex : ĠRegex , Ġtransform : Ġ( Match Result ) Ġ-> ĠCharSequence ) Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( condition ) Ġreplace ( regex , Ġtransform ) Ġelse Ġthis ĊĊĠĠĠ Ġreturn Ġresult ĊĠĠĠĠĠĠĠ Ġ. replace ( ORT _ VERSION _ REGEX ) Ġ{ Ġ"${ it . group Values [ 1 ]} : Ġ\" HEAD \"" Ġ} ĊĠĠĠĠĠĠĠ Ġ. replace ( JAVA _ VERSION _ REGEX ) Ġ{ Ġ"${ it . group Values [ 1 ]} : Ġ\" ${ System . getProperty (" java . version ") }\ "" Ġ} ĊĠĠĠĠĠĠĠ Ġ. replace ( ENV _ VAR _ REGEX ) Ġ{ Ġ"${ it . group Values [ 1 ]} Ġ{} " Ġ} ĊĠĠĠĠĠĠĠ Ġ. replace ( ENV _ TOOL _ REGEX ) Ġ{ Ġ"${ it . group Values [ 1 ]} Ġ{} " Ġ} ĊĠĠĠĠĠĠĠ Ġ. replace ( TIMESTAMP _ REGEX ) Ġ{ Ġ"${ it . group Values [ 1 ]} : Ġ\" ${ Instant . EPOCH }\ "" Ġ} ĊĠĠĠĠĠĠĠ Ġ. replace If ( patch Start And EndTime , ĠSTART _ AND _ END _ TIME _ REGEX ) Ġ{ Ġ"${ it . group Values [ 1 ]} : Ġ\" ${ Instant . EPOCH }\ "" Ġ} Ċ } Ċ Ċ fun Ġpatch Actual Result ( ĊĠĠĠ Ġresult : ĠO rt Result , ĊĠĠĠ Ġpatch Start And EndTime : ĠBoolean Ġ= Ġfalse Ċ ): ĠString Ġ= ĊĠĠĠ Ġpatch Actual Result ( yaml Mapper . writeValue AsString ( result ), Ġpatch Start And EndTime ) Ċ Ċ fun Ġpatch Actual Result Object ( result : ĠO rt Result , Ġpatch Start And EndTime : ĠBoolean Ġ= Ġfalse ): ĠO rt Result Ġ= ĊĠĠĠ Ġyaml Mapper . readValue ( patch Actual Result ( result , Ġpatch Start And EndTime )) Ċ Ċ fun Ġread Or t Result ( file : ĠString ) Ġ= Ġread Or t Result ( File ( file )) Ċ Ċ fun Ġread Or t Result ( file : ĠFile ) Ġ= Ġfile . mapper (). readValue < Or t Result >( patch Expected Result ( file )) Ċ