/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 0 . ĠHer man ĠChe ung Ċ Ġ* Ċ Ġ* Ġ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 Ġio . hk hc . gradle . test Ċ Ċ import Ġio . hk hc . utils . Properties Editor Ċ import Ġio . kot est . assertions . with Cl ue Ċ import Ġio . kot est . matchers . file . should Exist Ċ import Ġio . kot est . matchers . null s . should Not BeNull Ċ import Ġorg . gradle . test kit . runner . Build Result Ċ import Ġorg . gradle . test kit . runner . Gradle Runner Ċ import Ġjava . io . File Ċ import Ġjava . io . String Writer Ċ Ċ fun ĠProperties Editor . setup KeyStore ( base Dir : ĠFile ) Ġ{ ĊĠĠĠ Ġ" signing . key Id " Ġto Ġ" 6 B 7 0 FA E 3 " ĊĠĠĠ Ġ" signing . password " Ġto Ġ" password " ĊĠĠĠ Ġ" signing . secret Key Ring File " Ġto ĠFile ( base Dir , Ġ" gn upg / se cr ing . gpg "). absolute Path Ċ } Ċ Ċ fun ĠProperties Editor . setup Android Properties () Ġ{ ĊĠĠĠ Ġ" android . use Android X " Ġto Ġ" true " ĊĠĠĠ Ġ" android . enable Jet ifier " Ġto Ġ" true " ĊĠĠĠ Ġ" kotlin . code . style " Ġto Ġ" official " Ċ } Ċ Ċ fun Ġsimple P om Root () Ġ= ĊĠĠĠ Ġ""" ĊĠĠĠ Ġlicenses : ĊĠĠĠĠĠ Ġ- Ġname : ĠApache - 2 . 0 ĊĠĠĠĠĠĠĠ Ġdist : Ġrepo ĊĊĠĠĠ Ġdevelopers : ĊĠĠĠĠĠ Ġ- Ġid : Ġtest . user ĊĠĠĠĠĠĠĠ Ġname : ĠTest ĠUser ĊĠĠĠĠĠĠĠ Ġemail : Ġtest . user @ mail . com ĊĊĠĠĠ Ġsc m : ĊĠĠĠĠĠ Ġrepo Type : Ġgithub . com ĊĠĠĠĠĠ Ġrepo Name : Ġtest . user / test . repo ĊĠĠĠ Ġ""" . trim Indent () Ċ Ċ fun Ġsimple Sub Proj ( coordinate : ĠCoordinate ) Ġ= Ġwith ( coordinate ) Ġ{ ĊĠĠĠ Ġ""" ĊĠĠĠ Ġgroup : Ġ$ group ĊĠĠĠ Ġartifact Id : Ġ$ artifactId ĊĠĠĠ Ġversion : Ġ$ version ĊĠĠĠ Ġdescription : ĠTest Ġartifact Ġ$ artifactId ĊĠĠĠ Ġpackaging : Ġjar ĊĠĠĠ Ġ""" . trim Indent () Ċ } Ċ Ċ fun Ġsimple P om ( coordinate : ĠCoordinate , Ġvariant : ĠString Ġ= Ġ"", Ġpackaging : ĠString Ġ= Ġ" jar ") Ġ= Ġwith ( coordinate ) Ġ{ ĊĠĠĠ Ġval Ġpom Ġ= ĊĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠ Ġgroup : Ġ$ group ĊĠĠĠĠĠĠĠ Ġartifact Id : Ġ$ artifactId ĊĠĠĠĠĠĠĠ Ġversion : Ġ$ version ĊĠĠĠĠĠĠĠ Ġdescription : ĠTest Ġartifact ĊĠĠĠĠĠĠĠ Ġpackaging : Ġ$ packaging ĊĠĠĠĠĊĠĠĠĠĠĠĠ Ġlicenses : ĊĠĠĠĠĠĠĠĠĠ Ġ- Ġname : ĠApache - 2 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdist : Ġrepo ĊĠĠĠĠĊĠĠĠĠĠĠĠ Ġdevelopers : ĊĠĠĠĠĠĠĠĠĠ Ġ- Ġid : Ġtest . user ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname : ĠTest ĠUser ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemail : Ġtest . user @ mail . com ĊĠĠĠĠĊĠĠĠĠĠĠĠ Ġsc m : ĊĠĠĠĠĠĠĠĠĠ Ġrepo Type : Ġgithub . com ĊĠĠĠĠĠĠĠĠĠ Ġrepo Name : Ġtest . user / test . repo ĊĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĊĠĠĠ Ġif Ġ( variant Ġ!= Ġ"") Ġ{ ĊĠĠĠĠĠĠĠ Ġ" variant : Ġ$ variant \ n $ pom " ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġpom ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġsimple Two P oms ( coordinate : ĠList < Coordinate >, Ġvariant 1 : ĠString , Ġvariant 2 : ĠString , Ġpackaging : ĠString Ġ= Ġ" jar ") Ġ= ĊĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠ Ġ--- ĠĠĠĠĊĠĠĠĠĠĠĠ Ġlicenses : ĊĠĠĠĠĠĠĠĠĠ Ġ- Ġname : ĠApache - 2 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdist : Ġrepo ĊĠĠĠĠĊĠĠĠĠĠĠĠ Ġdevelopers : ĊĠĠĠĠĠĠĠĠĠ Ġ- Ġid : Ġtest . user ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname : ĠTest ĠUser ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemail : Ġtest . user @ mail . com ĊĠĠĠĠĊĠĠĠĠĠĠĠ Ġsc m : ĊĠĠĠĠĠĠĠĠĠ Ġrepo Type : Ġgithub . com ĊĠĠĠĠĠĠĠĠĠ Ġrepo Name : Ġtest . user / test . repo ĊĠĠĠĠĠĠĠ Ġ--- ĠĊĠĠĠĠĠĠĠ Ġvariant : Ġ$ variant 1 ĊĠĠĠĠĠĠĠ Ġgroup : Ġ${ coordinate [ 0 ]. group } ĊĠĠĠĠĠĠĠ Ġartifact Id : Ġ${ coordinate [ 0 ]. artifactId } ĊĠĠĠĠĠĠĠ Ġversion : Ġ${ coordinate [ 0 ]. version } ĊĠĠĠĠĠĠĠ Ġdescription : ĠTest Ġartifact ĊĠĠĠĠĠĠĠ Ġpackaging : Ġ$ packaging ĊĠĠĠĠĠĠĠ Ġ--- ĠĊĠĠĠĠĠĠĠ Ġvariant : Ġ$ variant 2 ĊĠĠĠĠĠĠĠ Ġgroup : Ġ${ coordinate [ 1 ]. group } ĊĠĠĠĠĠĠĠ Ġartifact Id : Ġ${ coordinate [ 1 ]. artifactId } ĊĠĠĠĠĠĠĠ Ġversion : Ġ${ coordinate [ 1 ]. version } ĊĠĠĠĠĠĠĠ Ġdescription : ĠTest Ġartifact ĊĠĠĠĠĠĠĠ Ġpackaging : Ġ$ packaging ĊĠĠĠ Ġ""" . trim Indent () Ċ Ċ fun Ġplugin P om ( id : ĠString , ĠclassName : ĠString ): ĠString Ġ{ ĊĠĠĠ Ġreturn Ġ""" ĊĠĠĠĠĠĠĠ Ġplugin : ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid : Ġ$ id ĊĠĠĠĠĠĠĠĠĠĠĠ ĠdisplayName : ĠTesting ĠPlugin ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimplementation Class : Ġ$ className ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtags : ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ- Ġpublish ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠ Ġ""" . trim Indent () Ċ } Ċ Ċ fun Ġplugin P om ( coordinate : ĠCoordinate ): ĠString Ġ{ ĊĊĠĠĠ Ġ@ Suppress (" Max Line Length ") ĊĠĠĠ Ġreturn Ġ""" ĊĠĠĠ Ġ<? xml Ġversion =" 1 . 0 " Ġencoding =" UTF - 8 "?> ĊĠĠĠ Ġ< project Ġxmlns =" http :// maven . apache . org / PO M / 4 . 0 . 0 " Ġxmlns : xsi =" http :// www . w 3 . org / 2 0 0 1 / XMLSchema - instance " Ġx si : schema Location =" http :// maven . apache . org / PO M / 4 . 0 . 0 Ġhttp :// maven . apache . org / xsd / maven - 4 . 0 . 0 . xsd "> ĊĠĠĠĠĠ Ġ< model Version > 4 . 0 . 0 </ model Version > ĊĠĠĠĠĠ Ġ< groupId >${ coordinate . plugin Id }</ groupId > ĊĠĠĠĠĠ Ġ< artifactId >${ coordinate . plugin Id }. gradle . plugin </ artifactId > ĊĠĠĠĠĠ Ġ< version >${ coordinate . version With Variant }</ version > ĊĠĠĠĠĠ Ġ< packaging > pom </ packaging > ĊĠĠĠĠĠ Ġ< name > test . artifact </ name > ĊĠĠĠĠĠ Ġ< description > Test Ġartifact </ description > ĊĠĠĠĠĠ Ġ< url > https :// github . com / test . user / test . repo </ url > ĊĠĠĠĠĠ Ġ< inception Year > 2 0 2 1 </ inception Year > ĊĠĠĠĠĠ Ġ< organization /> ĊĠĠĠĠĠ Ġ< licenses > ĊĠĠĠĠĠĠĠ Ġ< license > ĊĠĠĠĠĠĠĠĠĠ Ġ< name > Apache - 2 . 0 </ name > ĊĠĠĠĠĠĠĠĠĠ Ġ< url > http :// www . apache . org / licenses / LICENSE - 2 . 0 . txt </ url > ĊĠĠĠĠĠĠĠ Ġ</ license > ĊĠĠĠĠĠ Ġ</ licenses > ĊĠĠĠĠĠ Ġ< developers > ĊĠĠĠĠĠĠĠ Ġ< developer > ĊĠĠĠĠĠĠĠĠĠ Ġ< id > test . user </ id > ĊĠĠĠĠĠĠĠĠĠ Ġ< name > Test ĠUser </ name > ĊĠĠĠĠĠĠĠĠĠ Ġ< email > test . user @ mail . com </ email > ĊĠĠĠĠĠĠĠ Ġ</ developer > ĊĠĠĠĠĠ Ġ</ developers > ĊĠĠĠĠĠ Ġ< scm > ĊĠĠĠĠĠĠĠ Ġ< connection > scm : git @ github . com : test . user / test . repo </ connection > ĊĠĠĠĠĠĠĠ Ġ< developer Connection > scm : git @ github . com : test . user / test . repo . git </ developer Connection > ĊĠĠĠĠĠĠĠ Ġ< url > https :// github . com / test . user / test . repo </ url > ĊĠĠĠĠĠ Ġ</ scm > ĊĠĠĠĠĠ Ġ< issue Management > ĊĠĠĠĠĠĠĠ Ġ< system > github . com </ system > ĊĠĠĠĠĠĠĠ Ġ< url > https :// github . com / test . user / test . repo / issues </ url > ĊĠĠĠĠĠ Ġ</ issue Management > ĊĠĠĠĠĠ Ġ< dependencies > ĊĠĠĠĠĠĠĠ Ġ< dependency > ĊĠĠĠĠĠĠĠĠĠ Ġ< groupId >${ coordinate . group }</ groupId > ĊĠĠĠĠĠĠĠĠĠ Ġ< artifactId >${ coordinate . artifactId With Variant }</ artifactId > ĊĠĠĠĠĠĠĠĠĠ Ġ< version >${ coordinate . version With Variant }</ version > ĊĠĠĠĠĠĠĠ Ġ</ dependency > ĊĠĠĠĠĠ Ġ</ dependencies > ĊĠĠĠ Ġ</ project > ĊĠĠĠĠĊĠĠĠ Ġ""" . trim Indent () Ċ } Ċ Ċ // Ġj center Ġis Ġrequired Ġby Ġdok ka , Ġmaven Central Ġalone Ġis Ġnot Ġenough Ċ Ċ fun Ġcommon Setting (): ĠString Ġ{ ĊĊĠĠĠ Ġreturn Ġ""" ĊĠĠĠĠĠĠĠ Ġplugin Management Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepositories Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmaven Local () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgradle Plugin Portal () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmaven Central () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġinclude (": lib ") ĊĠĠĠ Ġ""" . trim Indent () Ċ } Ċ Ċ fun Ġrun Task ( ĊĠĠĠ Ġtask : ĠString , ĊĠĠĠ Ġproject Dir : ĠFile , ĊĠĠĠ Ġenv s : ĠMap < String , ĠString > Ġ= Ġdefault En vs ( ĊĠĠĠĠĠĠĠ Ġproject Dir ĊĠĠĠ Ġ) Ċ ): ĠBuild Result Ġ{ ĊĊĠĠĠ Ġwith Cl ue ("\" Project Ġdirectory Ġ'$ project Dir ' Ġshall Ġexist \" ") Ġ{ ĊĠĠĠĠĠĠĠ Ġproject Dir . should Exist () ĊĠĠĠ Ġ} ĊĠĠĠ Ġenv s . forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġwith Cl ue (" Environment ĠVariable Ġ'${ it . key }' Ġshould Ġhave Ġnon Ġnull Ġvalue ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . value . should Not BeNull () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn ĠGradle Runner . create () ĊĠĠĠĠĠĠĠ Ġ. with Project Dir ( project Dir ) ĊĠĠĠĠĠĠĠ Ġ. with Environment ( envs ) ĊĠĠĠĠĠĠĠ Ġ. with Arguments ("-- stack trace ", Ġ" tasks ", Ġ"-- all ", Ġtask ) ĊĠĠĠĠĠĠĠ Ġ. with Plugin Classpath () ĊĠĠĠĠĠĠĠ Ġ. forward Output () ĊĠĠĠĠĠĠĠ Ġ. build () Ċ } Ċ Ċ @ Suppress (" Spread Operator ") Ċ fun Ġrun Task With Output ( ĊĠĠĠ Ġtasks : ĠArray < String >, ĊĠĠĠ Ġproject Dir : ĠFile , ĊĠĠĠ Ġenv s : ĠMap < String , ĠString > Ġ= Ġdefault En vs ( project Dir ) Ċ ): ĠBuild Output Ġ{ ĊĊĠĠĠ Ġwith Cl ue ("\" Project Ġdirectory Ġ'$ project Dir ' Ġshall Ġexist \" ") Ġ{ ĊĠĠĠĠĠĠĠ Ġproject Dir . should Exist () ĊĠĠĠ Ġ} ĊĠĠĠ Ġenv s . forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġwith Cl ue (" Environment ĠVariable Ġ'${ it . key }' Ġshould Ġhave Ġnon Ġnull Ġvalue ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . value . should Not BeNull () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġstdout Ġ= ĠString Writer () ĊĠĠĠ Ġval Ġstderr Ġ= ĠString Writer () ĊĊĠĠĠ Ġval Ġresult Ġ= ĠGradle Runner . create () ĊĠĠĠĠĠĠĠ Ġ. with Project Dir ( project Dir ) ĊĠĠĠĠĠĠĠ Ġ. with Environment ( envs ) ĊĠĠĠĠĠĠĠ Ġ. with Arguments ("-- stack trace ", Ġ* tasks ) ĊĠĠĠĠĠĠĠ Ġ. with Plugin Classpath () ĊĠĠĠĠĠĠĠ Ġ. forward Std Output ( stdout ) ĊĠĠĠĠĠĠĠ Ġ. forward Std Error ( stderr ) ĊĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠ Ġreturn ĠBuild Output ( result , Ġstdout . toString (), Ġstderr . toString ()) Ċ } Ċ Ċ fun Ġdefault En vs ( project Dir : ĠFile ) Ġ= Ġmutable Map Of ( getTest Gradle Home Pair ( project Dir )) Ċ Ċ fun Ġget Test Gradle Home Pair ( project Dir : ĠFile ): ĠPair < String , ĠString > Ġ{ ĊĠĠĠ Ġval Ġpath Ġ= Ġ( ĊĠĠĠĠĠĠĠ ĠSystem . getenv ()[" GRAD LE _ USER _ HOME "] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: ĠSystem . getenv ()[" HOME "] Ġ?: Ġproject Dir . absolute Path ĊĠĠĠĠĠĠĠ Ġ) Ġ+ Ġ"/ . gradle " ĊĠĠĠ Ġreturn Ġ" GRAD LE _ USER _ HOME " Ġto Ġpath Ċ } Ċ Ċ fun Ġget Test Android Sdk Home Pair (): ĠPair < String , ĠString > Ġ{ ĊĠĠĠ Ġval Ġpath Ġ= Ġrequire NotNull ( System . getenv ()[" ANDROID _ HOME "] Ġ?: ĠSystem . getenv ()[" ANDROID _ SDK _ ROOT "]) Ġ{ ĊĠĠĠĠĠĠĠ Ġ" environment Ġvariable Ġ' ANDROID _ SDK _ ROOT ' Ġis Ġmissed . ĠIt Ġshall Ġcontain Ġpath Ġto ĠAndroid ĠSDK " ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġ" ANDROID _ SDK _ ROOT " Ġto Ġpath Ċ } Ċ