/* Ċ Ġ* ĠCopyright Ġ 2 0 1 8 ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* Ġ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 . android . tools . build . jet ifier . core . config Ċ Ċ import Ġcom . android . tools . build . jet ifier . core . type . PackageName Ċ import Ġcom . google . common . truth . Truth Ċ import Ġorg . junit . Test Ċ Ċ class ĠConfig Parser Test Ġ{ ĊĊĠĠĠ Ġ@ Test Ġfun Ġparse Config _ valid Input () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconf Str Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" {\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġrestrict To Package Prefixes : Ġ[ \" android / support / \" ], \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġreversed Restrict To Package Prefixes : Ġ[ \" android x / \" ], \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġ# ĠSample Ġcomment Ġ\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġrules : Ġ[\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠ Ġ{\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠĠĠĠĠ Ġfrom : Ġ\" android / support / v 1 4 / preferences /( .* )\ ",\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠĠĠĠĠ Ġto : Ġ\" android / jet pack / prefs / main /{ 0 } \"\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠ Ġ},\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠ Ġ{\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠĠĠĠĠ Ġfrom : Ġ\" android / support / v 1 4 / preferences /( .* )\ ",\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠĠĠĠĠ Ġto : Ġ\" android / jet pack / prefs / main /{ 0 }\ ",\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠĠĠĠĠ Ġfield Selectors : Ġ[ \" dialog _( .* )\ "] \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠ Ġ}\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġ], \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġpackage Map : Ġ[\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠ Ġ{\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠĠĠĠĠ Ġ\" from \": Ġ\" from / package \",\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠĠĠĠĠ Ġ\" to \": Ġ\" to / package \"\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠ Ġ}\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġ], \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġpom Rules : Ġ[\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠ Ġ{\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠĠĠĠĠ Ġfrom : Ġ{ groupId : Ġ\" g \", Ġartifact Id : Ġ\" a \", Ġversion : Ġ\" 1 . 0 \" }, \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠĠĠĠĠ Ġto : Ġ{ groupId : Ġ\" g \", Ġartifact Id : Ġ\" a \", Ġversion : Ġ\" 2 . 0 \" } Ġ\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠ Ġ}\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġ], \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġversions : Ġ{\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠ Ġ\" latest Released \": Ġ{\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠĠĠĠĠ Ġ\" something \": Ġ\" 1 . 0 . 0 \"\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠ Ġ}\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġ}, " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġpro Guard Map : Ġ{\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠ Ġrules : Ġ{\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠĠĠĠ Ġ\" android / support /** \": Ġ[ \" android x /** \"] \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠ Ġ}\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġ}" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" }" ĊĊĠĠĠĠĠĠĠ Ġval Ġconfig Ġ= ĠConfig Parser . parse FromString ( conf Str ) ĊĠĠĠĠĠĠĠ Ġval Ġjson Config Ġ= Ġconfig !!. toJson () ĊĊĠĠĠĠĠĠĠ ĠTr uth . assertThat ( config ). isNotNull () ĊĠĠĠĠĠĠĠ ĠTr uth . assertThat ( config . restrict To Package Prefixes . first ()). isEqualTo (" android / support /") ĊĠĠĠĠĠĠĠ ĠTr uth . assertThat ( config . reversed Restrict To Package Prefixes . first ()). isEqualTo (" android x /") ĊĠĠĠĠĠĠĠ ĠTr uth . assertThat ( config . rules Map . rewrite Rules . size ). isEqualTo ( 2 ) ĊĠĠĠĠĠĠĠ ĠTr uth . assertThat ( config . versions Map . data . size ). isEqualTo ( 1 ) ĊĠĠĠĠĠĠĠ ĠTr uth . assertThat ( config . versions Map . data [" latest Released "]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. contains Exactly (" something ", Ġ" 1 . 0 . 0 ") ĊĠĠĠĠĠĠĠ ĠTr uth . assertThat ( config . pro Guard Map . toJson (). rules . size ). isEqualTo ( 1 ) ĊĊĠĠĠĠĠĠĠ ĠTr uth ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assertThat ( config . package Map . get Package For ( PackageName . from Dot Version (" from . package "))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo ( PackageName . from Dot Version (" to . package ")) ĊĊĠĠĠĠĠĠĠ ĠTr uth . assertThat ( json Config . versions !!. size ). isEqualTo ( 1 ) ĊĠĠĠĠĠĠĠ ĠTr uth . assertThat ( json Config . versions !! [" latest Released "]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. contains Exactly (" something ", Ġ" 1 . 0 . 0 ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ( expected Ġ= ĠIllegalArgumentException :: class ) ĊĠĠĠ Ġfun Ġparse Config _ pom Missing Group _ should Fail () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconf Str Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" {\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġrestrict To Package Prefixes : Ġ[ \" android / support / \" ], \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġrules : Ġ[], \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġpackage Map : Ġ[], \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġpom Rules : Ġ[\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠ Ġ{\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠĠĠĠĠ Ġfrom : Ġ{ artifactId : Ġ\" a \", Ġversion : Ġ\" 1 . 0 \" }, \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠĠĠĠĠ Ġto : Ġ{ artifactId : Ġ\" a \", ĠgroupId : Ġ\" g \", Ġversion : Ġ\" 1 . 0 \" }\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠ Ġ}\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġ] \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" }" ĊĠĠĠĠĠĠĠ ĠConfig Parser . parse FromString ( conf Str ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ( expected Ġ= ĠIllegalArgumentException :: class ) ĊĠĠĠ Ġfun Ġparse Config _ pom Missing Artifact _ should Fail () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconf Str Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" {\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġrestrict To Package Prefixes : Ġ[ \" android / support / \" ], \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġrules : Ġ[], \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġpackage Map : Ġ[], \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġpom Rules : Ġ[\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠ Ġ{\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠĠĠĠĠ Ġfrom : Ġ{ groupId : Ġ\" g \", Ġversion : Ġ\" 1 . 0 \" }, \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠĠĠĠĠ Ġto : Ġ{ artifactId : Ġ\" a \", ĠgroupId : Ġ\" g \", Ġversion : Ġ\" 1 . 0 \" }\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠ Ġ}\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġ] \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" }" ĊĠĠĠĠĠĠĠ ĠConfig Parser . parse FromString ( conf Str ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ( expected Ġ= ĠIllegalArgumentException :: class ) ĊĠĠĠ Ġfun Ġparse Config _ pom Missing Version _ should Fail () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconf Str Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" {\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġrestrict To Package Prefixes : Ġ[ \" android / support / \" ], \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġrules : Ġ[], \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġpackage Map : Ġ[], \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġpom Rules : Ġ[\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠ Ġ{\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠĠĠĠĠ Ġfrom : Ġ{ artifactId : Ġ\" a \", ĠgroupId : Ġ\" g \" }, \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠĠĠĠĠ Ġto : Ġ{ artifactId : Ġ\" a \", ĠgroupId : Ġ\" g \" }\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠ Ġ}\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġ] \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" }" ĊĠĠĠĠĠĠĠ ĠConfig Parser . parse FromString ( conf Str ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ( expected Ġ= ĠIllegalArgumentException :: class ) ĊĠĠĠ Ġfun Ġparse Config _ d uplic ity _ should Fail () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconf Str Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" {\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġrestrict To Package Prefixes : Ġ[ \" android / support / \" ], \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġrules : Ġ[], \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġpackage Map : Ġ[], \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġpom Rules : Ġ[\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠ Ġ{\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠĠĠĠĠ Ġfrom : Ġ{ artifactId : Ġ\" a \", ĠgroupId : Ġ\" g \", Ġversion : Ġ\" 1 . 0 \" }, \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠĠĠĠĠ Ġto : Ġ{ artifactId : Ġ\" b \", ĠgroupId : Ġ\" g \", Ġversion : Ġ\" 1 . 0 \" }\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠ Ġ},\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠ Ġ{\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠĠĠĠĠ Ġfrom : Ġ{ artifactId : Ġ\" a \", ĠgroupId : Ġ\" g \", Ġversion : Ġ\" 2 . 0 \" }, \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠĠĠĠĠ Ġto : Ġ{ artifactId : Ġ\" c \", ĠgroupId : Ġ\" g \", Ġversion : Ġ\" 1 . 0 \" }\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠ Ġ}\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġ] \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" }" ĊĠĠĠĠĠĠĠ ĠConfig Parser . parse FromString ( conf Str ) ĊĠĠĠ Ġ} Ċ }