package Ġau . com . di us . p act . core . matchers Ċ Ċ import Ġau . com . di us . p act . core . model . matching rules . Matching Rules Ċ import Ġmu . K Logging Ċ Ċ object ĠHeader Matcher Ġ: ĠK Logging () Ġ{ ĊĊĠ Ġfun Ġmatch ContentType ( expected : ĠString , Ġactual : ĠString ): ĠHeader Mismatch ? Ġ{ ĊĠĠĠ Ġlogger . debug Ġ{ Ġ" Comp aring Ġcontent Ġtype Ġheader : Ġ'$ actual ' Ġto Ġ'$ expected '" Ġ} ĊĊĠĠĠ Ġval Ġexpected Values Ġ= Ġexpected . split (' ; '). map Ġ{ Ġit . trim () Ġ} ĊĠĠĠ Ġval Ġactual Values Ġ= Ġactual . split (' ; '). map Ġ{ Ġit . trim () Ġ} ĊĠĠĠ Ġval Ġexpected ContentType Ġ= Ġexpected Values . first () ĊĠĠĠ Ġval Ġactual ContentType Ġ= Ġactual Values . first () ĊĠĠĠ Ġval Ġexpected Parameters Ġ= Ġparse Parameters ( expected Values . drop ( 1 )) ĊĠĠĠ Ġval Ġactual Parameters Ġ= Ġparse Parameters ( actual Values . drop ( 1 )) ĊĠĠĠ Ġval Ġheader Mismatch Ġ= ĠHeader Mismatch (" Content - Type ", Ġexpected , Ġactual , ĊĠĠĠĠĠ Ġ" Expected Ġheader Ġ' Content - Type ' Ġto Ġhave Ġvalue Ġ'$ expected ' Ġbut Ġwas Ġ'$ actual '") ĊĊĠĠĠ Ġreturn Ġif Ġ( expected ContentType . equals ( actual ContentType , Ġignore Case Ġ= Ġtrue )) Ġ{ ĊĠĠĠĠĠ Ġexpected Parameters . map Ġ{ Ġentry Ġ-> ĊĠĠĠĠĠĠĠ Ġif Ġ( actual Parameters . contains ( entry . key )) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( entry . value . equals ( actual Parameters [ entry . key ], Ġignore Case Ġ= Ġtrue )) Ġnull ĊĠĠĠĠĠĠĠĠĠ Ġelse Ġheader Mismatch ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġheader Mismatch ĊĠĠĠĠĠ Ġ}. filter NotNull (). first OrNull () ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġheader Mismatch ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ@ Jvm Static ĊĠ Ġfun Ġparse Parameters ( values : ĠList < String >): ĠMap < String , ĠString > Ġ{ ĊĠĠĠ Ġreturn Ġvalues . map Ġ{ Ġit . split (' =' ). map Ġ{ Ġit . trim () Ġ} Ġ}. associate Ġ{ Ġit . first () Ġto Ġit . component 2 () Ġ} ĊĠ Ġ} ĊĊĠ Ġfun Ġstrip WhiteSpace After Com mas ( str : ĠString ): ĠString Ġ= ĠRegex (", \\ s * "). replace ( str , Ġ", ") ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠComp ares Ġthe Ġexpected Ġheader Ġvalue Ġto Ġthe Ġactual , Ġdeleg ating Ġto Ġany Ġmatching Ġrules Ġif Ġpresent ĊĠĠ Ġ*/ ĊĠ Ġ@ Jvm Static ĊĠ Ġfun Ġcompare Header ( header Key : ĠString , Ġexpected : ĠString , Ġactual : ĠString , Ġmatch ers : ĠMatch ing Rules ): ĠHeader Mismatch ? Ġ{ ĊĠĠĠ Ġlogger . debug Ġ{ Ġ" Comp aring Ġheader Ġ'$ header Key ': Ġ'$ actual ' Ġto Ġ'$ expected '" Ġ} ĊĊĠĠĠ Ġval Ġcomparator Ġ= ĠComparator < String > Ġ{ Ġa , Ġb Ġ-> Ġa . compareTo ( b , Ġignore Case Ġ= Ġtrue ) Ġ} ĊĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠ ĠMatch ers . matcher Defined (" header ", ĠlistOf ( header Key ), Ġmatch ers , Ġcomparator ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmatch Result Ġ= ĠMatch ers . dom atch ( matchers , Ġ" header ", ĠlistOf ( header Key ), Ġexpected , Ġactual , ĊĠĠĠĠĠĠĠĠĠ ĠHeader Mismatch Factory , Ġcomparator ) ĊĠĠĠĠĠĠĠ Ġreturn Ġmatch Result . fold ( null Ġas ĠHeader Mismatch ?) Ġ{ Ġacc , Ġitem Ġ-> Ġacc ?. merge ( item ) Ġ?: Ġitem Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġheader Key . equals (" Content - Type ", Ġignore Case Ġ= Ġtrue ) Ġ-> Ġmatch ContentType ( expected , Ġactual ) ĊĠĠĠĠĠ Ġstrip WhiteSpace After Com mas ( expected ) Ġ== Ġstrip WhiteSpace After Com mas ( actual ) Ġ-> Ġnull ĊĠĠĠĠĠ Ġelse Ġ-> ĠHeader Mismatch ( header Key , Ġexpected , Ġactual , Ġ" Expected Ġheader Ġ'$ header Key ' Ġto Ġhave Ġvalue Ġ" Ġ+ ĊĠĠĠĠĠĠĠ Ġ"' $ expected ' Ġbut Ġwas Ġ'$ actual '") ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ