/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 2 0 Ġ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 . build . gradle . integration . common . fixture ĊĊ Ċ import Ġcom . android . build . gradle . integration . common . fixture . Gradle Test Project . Companion . DEFAULT _ N DK _ SIDE _ BY _ SIDE _ VERSION Ċ import Ġcom . android . test utils . Ass ume Util Ċ import Ġcom . google . common . truth . Truth Ċ import Ġcom . google . gson . Gson Ċ import Ġcom . google . gson . JsonObject Ċ import Ġorg . gradle . tool ing . model . Build Identifier Ċ import Ġorg . junit . Test Ċ import Ġjava . io . File Ċ import Ġjava . nio . file . Paths Ċ Ċ class ĠFile Normalizer Test Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġnormal izer Ġ= ĠFile Normalizer Impl ( ĊĠĠĠĠĠĠĠ Ġbuild Id Ġ= ĠBuild Identifier Impl ( File ("/ path / to / Project ")), ĊĠĠĠĠĠĠĠ Ġgradle User Home Ġ= ĠFile ("/ path / to / Gradle "), ĊĠĠĠĠĠĠĠ Ġgradle Cache Dir Ġ= ĠFile ("/ path / to / Gradle / cache s / transforms - 3 / "), ĊĠĠĠĠĠĠĠ Ġandroid Sdk Dir Ġ= ĠFile ("/ path / to / Sdk "), ĊĠĠĠĠĠĠĠ Ġandroid Prefs Dir Ġ= ĠFile ("/ path / to / Home "), ĊĠĠĠĠĠĠĠ Ġandroid N dk Sx S Root Ġ= ĠFile ("/ path / to / nd k Sx S Root "), ĊĠĠĠĠĠĠĠ Ġlocal Repos Ġ= ĠlistOf ( Paths . get ("/ path / to / local Repo 1 "), ĠPaths . get ("/ path / to / local Repo 2 ")), ĊĠĠĠĠĠĠĠ Ġdefault N dk Side By Side Version Ġ= ĠDEFAULT _ N DK _ SIDE _ BY _ SIDE _ VERSION ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġval Ġgson Ġ= ĠGson () ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Test ĠOut side ĠPaths `() Ġ{ ĊĠĠĠĠĠĠĠ ĠTr uth . assertThat ( normal izer . normalize ( File ("/ wrong / path "))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo ("/ wrong / path { ! }") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Test ĠProject ĠPaths `() Ġ{ ĊĠĠĠĠĠĠĠ ĠTr uth . assertThat ( normal izer . normalize ( File ("/ path / to / Project / foo "))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo ("{ PROJECT }/ foo { ! }") ĊĊĠĠĠĠĠĠĠ ĠTr uth . assertThat ( normal izer . normalize ( File ("/ wrong / path "))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo ("/ wrong / path { ! }") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Test ĠGradle ĠUser ĠHome `() Ġ{ ĊĠĠĠĠĠĠĠ ĠTr uth . assertThat ( normal izer . normalize ( File ("/ path / to / Gradle / foo "))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo ("{ GRAD LE }/ foo { ! }") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Test ĠGradle ĠTransform ĠCache `() Ġ{ ĊĠĠĠĠĠĠĠ ĠTr uth . assertThat ( normal izer . normalize ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFile ("/ path / to / Gradle / cache s / transforms - 3 / 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 / transformed / foo ") ĊĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo ("{ GRAD LE _ CACHE }/{ CHECK SUM }/ transformed / foo { ! }") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Test Ġlocal Ġrepos `() Ġ{ ĊĠĠĠĠĠĠĠ ĠTr uth . assertThat ( normal izer . normalize ( File ("/ path / to / local Repo 1 / blah "))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo ("{ LOCAL _ REPO }/ blah { ! }") ĊĠĠĠĠĠĠĠ ĠTr uth . assertThat ( normal izer . normalize ( File ("/ path / to / local Repo 2 / blah "))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo ("{ LOCAL _ REPO }/ blah { ! }") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Test Ġandroid ĠS dk `() Ġ{ ĊĠĠĠĠĠĠĠ ĠTr uth . assertThat ( normal izer . normalize ( File ("/ path / to / Sdk / foo "))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo ("{ ANDROID _ SDK }/ foo { ! }") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Test Ġandroid ĠHome `() Ġ{ ĊĠĠĠĠĠĠĠ ĠTr uth . assertThat ( normal izer . normalize ( File ("/ path / to / Home / foo "))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo ("{ ANDROID _ PRE FS }/ foo { ! }") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Test Ġandroid ĠN DK ĠRoot `() Ġ{ ĊĠĠĠĠĠĠĠ ĠTr uth . assertThat ( normal izer . normalize ( File ("/ path / to / nd k Sx S Root /$ DEFAULT _ N DK _ SIDE _ BY _ SIDE _ VERSION / foo "))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. isEqualTo ("{ ANDROID _ N DK }/ foo { ! }") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Test Ġun scr up ulo us ly Replace ( Json Element )` () Ġ{ ĊĠĠĠĠĠĠĠ ĠAssume Util . assume Not Windows () ĊĠĠĠĠĠĠĠ ĠTr uth . assertThat ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnormal izer . normalize ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgson . fromJson ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgradle User Home Ġ= Ġ"/ path / to / Gradle ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġandroid Sdk Ġ= Ġ"/ path / to / Sdk ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġandroid Home Ġ= Ġ"/ path / to / Home ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġandroid N dk Root Ġ= Ġ"/ path / to / nd k Sx S Root /$ DEFAULT _ N DK _ SIDE _ BY _ SIDE _ VERSION " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"" ", ĠJsonObject :: class . java ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ). isEqualTo ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgson . fromJson ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgradle User Home Ġ= Ġ"{ GRAD LE }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġandroid Sdk Ġ= Ġ"{ ANDROID _ SDK }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġandroid Home Ġ= Ġ"{ ANDROID _ PRE FS }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġandroid N dk Root Ġ= Ġ"{ ANDROID _ N DK }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"" ", ĠJsonObject :: class . java ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Test Ġun scr up ulo us ly Replace ( Json Element ) Ġ- Ġwindows `() Ġ{ ĊĠĠĠĠĠĠĠ ĠAssume Util . assume Windows () ĊĠĠĠĠĠĠĠ Ġval Ġnormal izer Ġ= ĠFile Normalizer Impl ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Id Ġ= ĠBuild Identifier Impl ( File (" C :\\ path \\ to \\ Project ")), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgradle User Home Ġ= ĠFile (" C :\\ path \\ to \\ Gradle "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgradle Cache Dir Ġ= ĠFile (" C :\\ path \\ to \\ Gradle \\ cache s \\ transforms - 3 "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġandroid Sdk Dir Ġ= ĠFile (" C :\\ path \\ to \\ Sdk "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġandroid Prefs Dir Ġ= ĠFile (" C :\\ path \\ to \\ Home "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġandroid N dk Sx S Root Ġ= ĠFile (" C :\\ path \\ to \\ nd k Sx S Root "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocal Repos Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPaths . get (" C :\\ path \\ to \\ local Repo 1 "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPaths . get (" C :\\ path \\ to \\ local Repo 2 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdefault N dk Side By Side Version Ġ= ĠDEFAULT _ N DK _ SIDE _ BY _ SIDE _ VERSION ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠTr uth . assertThat ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnormal izer . normalize ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgson . fromJson ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgradle User Home Ġ= Ġ" C :\\ path \\ to \\ Gradle ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġandroid Sdk Ġ= Ġ" C :\\ path \\ to \\ Sdk ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġandroid Home Ġ= Ġ" C :\\ path \\ to \\ Home ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġandroid N dk Root Ġ= Ġ" C :\\ path \\ to \\ nd k Sx S Root \\ $ DEFAULT _ N DK _ SIDE _ BY _ SIDE _ VERSION " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"" ", ĠJsonObject :: class . java ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ). isEqualTo ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgson . fromJson ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgradle User Home Ġ= Ġ"{ GRAD LE }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġandroid Sdk Ġ= Ġ"{ ANDROID _ SDK }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġandroid Home Ġ= Ġ"{ ANDROID _ PRE FS }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġandroid N dk Root Ġ= Ġ"{ ANDROID _ N DK }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"" ", ĠJsonObject :: class . java ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠBuild Identifier Impl ( private Ġval Ġroot Dir : ĠFile ) Ġ: ĠBuild Identifier Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Root Dir (): ĠFile Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġroot Dir ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ