/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 ĠB Q Ċ Ġ* Ċ Ġ* Ġ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 Ġcom . bq . po editor . gradle . xml Ċ Ċ import Ġcom . bq . po editor . gradle . utils . ALL _ REGEX _ STRING Ċ import Ġcom . bq . po editor . gradle . utils . TABLE T _ REGEX _ STRING Ċ import Ġorg . junit . Assert Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Test Ċ import Ġjavax . xml . xpath . XPath Ċ import Ġjavax . xml . xpath . XPath Factory Ċ Ċ class ĠXml Post Processor Test Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġxml Post Processor : ĠXml Post Processor ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġxpath Factory : ĠXPath Factory ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġxp : ĠXPath ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ Ġxml Post Processor Ġ= ĠXml Post Processor () ĊĠĠĠĠĠĠĠ Ġxpath Factory Ġ= ĠXPath Factory . newInstance () ĊĠĠĠĠĠĠĠ Ġxp Ġ= Ġxpath Factory . new XPath () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPlugin Ġtests ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Post processing Ġpercentage Ġsymbol Ġin Ġstrings Ġworks `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠTest Ġ% Ġis Ġchanged Ġto Ġ%% ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals (" Hello Ġmy Ġfriend . ĠI Ġlove Ġyou Ġ 1 0 0 %% .", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġxml Post Processor . format Translation Xml (" Hello Ġmy Ġfriend . ĠI Ġlove Ġyou Ġ 1 0 0 %. ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Post processing Ġline Ġbreaks Ġkeeps Ġthem `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠTest Ġ\ n Ġis Ġmaintained ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals (" Hello Ġmy Ġfriend \ n How Ġare Ġyou ? .", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġxml Post Processor . format Translation Xml (" Hello Ġmy Ġfriend \ n How Ġare Ġyou ?. ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Post processing Ġplaceholders Ġworks `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠTest Ġplaceholders Ġare Ġtranslated Ġto ĠAndroid Ġformat ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals (" Hello Ġ% 1 \$ s .", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġxml Post Processor . format Translation Xml (" Hello Ġ{{ name }}. ")) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals (" Hello Ġ% 1 \$ s . ĠHow Ġare Ġyou Ġ% 1 \$ s ?", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġxml Post Processor . format Translation Xml (" Hello Ġ{{ name }}. ĠHow Ġare Ġyou Ġ{{ name }} ? ")) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals (" Hello Ġ% 1 \$ s . ĠThis Ġis Ġyour Ġscore : Ġ% 2 \$ s ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġxml Post Processor . format Translation Xml (" Hello Ġ{ 1 { name }}. ĠThis Ġis Ġyour Ġscore : Ġ{ 2 { score }} ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Post processing Ġstring ĠHTML Ġescap es Ġsequences `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠTest ĠHtml Ġtags Ġare Ġfixed ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals (" Hello Ġ< b >% 1 \$ s </ b > .", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġxml Post Processor . format Translation Xml (" Hello Ġ& lt ; b & gt ; {{ name }} & lt ;/ b & gt ;. ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Post processing Ġcomplex ĠXML Ġworks `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠTest Ġcomplete ĠXml ĊĠĠĠĠĠĠĠ Ġval Ġinput Xml String Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ< resources > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ< string Ġname =" general _ link _ show All "> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ver Ġtodo Ġ{{ name }}" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ</ string > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ< string Ġname =" general _ button _ go Top "> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ir Ġar ri ba " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ</ string > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ< string Ġname =" general _ button _ go Top _ tablet "> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ir Ġar ri ba Ġ{ 1 { name }} Ġusuario Ġ{ 2 { user _ name }}" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ</ string > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ< string Ġname =" general _ button _ go Bottom "> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ir ${ '\ n '} ab ajo " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ</ string > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ</ resources > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĊĠĠĠĠĠĠĠ Ġval Ġexpected Result Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ< resources > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ< string Ġname =" general _ link _ show All "> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ver Ġtodo Ġ% 1 ${ '$ '} s " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ</ string > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ< string Ġname =" general _ button _ go Top "> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ir Ġar ri ba " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ</ string > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ< string Ġname =" general _ button _ go Top _ tablet "> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ir Ġar ri ba Ġ% 1 ${ '$ '} s Ġusuario Ġ% 2 ${ '$ '} s " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ</ string > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ< string Ġname =" general _ button _ go Bottom "> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ir ${ '\ n '} ab ajo " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ</ string > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ</ resources > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( expected Result , Ġxml Post Processor . format Translation Xml ( input Xml String )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Split ting Ġtablet Ġtranslation Ġstrings Ġworks `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠTest Ġcomplete ĠXml ĊĠĠĠĠĠĠĠ Ġval Ġexpected Key Ġ= Ġ" general _ button _ go Top " ĊĠĠĠĠĠĠĠ Ġval Ġinput Xml String Ġ= Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ< resources > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ< string Ġname ="$ expected Key "> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ expected Key " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ</ string > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ< string Ġname ="${ expected Key }_ tablet "> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ expected Key }_ tablet " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ</ string > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ</ resources > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĊĠĠĠĠĠĠĠ Ġval Ġall Regex String Ġ= ĠALL _ REGEX _ STRING ĊĠĠĠĠĠĠĠ Ġval Ġtablet Regex String Ġ= ĠTABLE T _ REGEX _ STRING ĊĊĠĠĠĠĠĠĠ Ġval Ġsplit Translation Xml Map Ġ= Ġxml Post Processor . split Translation Xml ( input Xml String , ĠlistOf ( tablet Regex String )) ĊĊĠĠĠĠĠĠĠ Ġ// ĠCheck ĠXML Ġdocuments Ġand Ġsee Ġif Ġthe Ġfirst Ġstring Ġnode Ġhas Ġthe Ġproper Ġname Ġand Ġthe Ġproper Ġtext Ġwith ĠXPath ĊĠĠĠĠĠĠĠ Ġval Ġxp Name Path Ġ= Ġ"// resources / string [ position () = 1 ] /@ name " ĊĠĠĠĠĠĠĠ Ġval Ġxp Text Path Ġ= Ġ"// resources / string [ position () = 1 ]/ text ()" ĊĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpected Key , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġxp . evaluate ( xp Name Path , Ġsplit Translation Xml Map . getValue ( all Regex String )). trim ()) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpected Key , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġxp . evaluate ( xp Name Path , Ġsplit Translation Xml Map . getValue ( tablet Regex String )). trim ()) ĊĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\" $ expected Key \"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġxp . evaluate ( xp Text Path , Ġsplit Translation Xml Map . getValue ( all Regex String )). trim ()) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\" ${ expected Key }_ tablet \"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġxp . evaluate ( xp Text Path , Ġsplit Translation Xml Map . getValue ( tablet Regex String )). trim ()) ĊĊĠĠĠ Ġ} Ċ }