/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠGoogle ĠLLC Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 2 0 ĠJetBrains Ġs . r . o . Ġand ĠKotlin ĠProgramming ĠLanguage Ġcontributors . Ċ Ġ* Ċ Ġ* Ġ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 . google . devtools . k sp . gradle . testing Ċ Ċ import Ġjava . io . File Ċ Ċ /** Ċ Ġ* ĠSimp ler Ġwrapper Ġthat Ġrepresents Ġa Ġmodule Ġin Ġa Ġtest Ġproject . Ċ Ġ* Ċ Ġ* ĠIt Ġhas Ġhelper Ġmethods Ġto Ġadd Ġplugins , Ġdependencies Ġor Ġsources Ġto Ġthe Ġproject . Ċ Ġ* Ċ Ġ* ĠIt Ġis Ġloose ly Ġstructured , Ġwhich Ġmeans Ġit Ġwon 't Ġcheck Ġits Ġintegrity . Ġ( e . g . Ġyou Ġcan Ġadd Ġandroid Ċ Ġ* Ġsources Ġw / o Ġadding Ġandroid Ġplugin ). ĠIt Ġis Ġmeant Ġto Ġserve Ġas Ġa Ġconvenient Ġway Ġto Ġconfigure Ċ Ġ* Ġmodules . Ċ Ġ*/ Ċ class ĠTest Module ( ĊĠĠĠ Ġval Ġmodule Root : ĠFile , ĊĠĠĠ Ġplugins : ĠList < Plugin Declaration > Ġ= Ġempty List (), ĊĠĠĠ Ġdependencies : ĠList < Dependency Declaration > Ġ= Ġempty List () Ċ ) Ġ{ ĊĠĠĠ Ġval Ġplugins Ġ= ĠLinked HashSet ( plugins ) ĊĠĠĠ Ġval Ġdependencies Ġ= ĠLinked HashSet ( dependencies ) ĊĠĠĠ Ġval Ġbuild File Add itions Ġ= ĠLinked HashSet < String >() ĊĠĠĠ Ġval Ġname Ġ= Ġmodule Root . name ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġmodule Root . mkdir s () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdds Ġthe Ġgiven Ġsource Ġfile Ġto Ġthe Ġmain Ġsource Ġset . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġadd Source ( name : ĠString , Ġcontents : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsrc Dir Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname . endsWith (". kt ") Ġ-> Ġkotlin Source Dir ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname . endsWith (". java ") Ġ-> Ġjava Source Dir ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerror (" must Ġprovide Ġjava Ġor Ġkotlin Ġfile ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsrc Dir . resolve ( name ). write Text ( contents ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdds Ġthe Ġgiven Ġsource Ġfile Ġto Ġthe Ġtest Ġsource Ġset . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġadd Test Source ( name : ĠString , Ġcontents : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsrc Dir Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname . endsWith (". kt ") Ġ-> Ġkotlin Test Source Dir ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname . endsWith (". java ") Ġ-> Ġjava Test Source Dir ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerror (" must Ġprovide Ġjava Ġor Ġkotlin Ġfile ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsrc Dir . resolve ( name ). write Text ( contents ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdds Ġthe Ġgiven Ġsource Ġfile Ġto Ġthe ĠAndroid Test Ġsource Ġset . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġadd Android Test Source ( name : ĠString , Ġcontents : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsrc Dir Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname . endsWith (". kt ") Ġ-> Ġkotlin Android Test Source Dir ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname . endsWith (". java ") Ġ-> Ġjava Android Test Source Dir ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerror (" must Ġprovide Ġjava Ġor Ġkotlin Ġfile ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsrc Dir . resolve ( name ). write Text ( contents ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġkotlin Source Dir ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġmodule Root . resolve (" src / main / kotlin "). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . mkdir s () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġjava Source Dir ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġmodule Root . resolve (" src / main / java "). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . mkdir s () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġkotlin Test Source Dir ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġmodule Root . resolve (" src / test / kotlin "). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . mkdir s () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġjava Test Source Dir ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġmodule Root . resolve (" src / test / java "). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . mkdir s () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġkotlin Android Test Source Dir ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġmodule Root . resolve (" src / android Test / kotlin "). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . mkdir s () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġjava Android Test Source Dir ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġmodule Root . resolve (" src / android Test / java "). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . mkdir s () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġservices Dir ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġmodule Root . resolve (" src / main / resources / META - INF / services / "). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . mkdir s () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġk sp Services File ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġservices Dir . resolve (" com . google . devtools . k sp . processing . Symbol Processor Provider ") ĊĊĠĠĠ Ġprivate Ġval Ġbuild File ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġmodule Root . resolve (" build . gradle . k ts ") ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠWrites Ġthe Ġbuild Ġfile . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġwrite Build File () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontents Ġ= Ġbuild String Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend ln (" plugins Ġ{ ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplugins . forEach Ġ{ Ġplugin Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ln ( plugin . to Code (). prepend Indent (" ĠĠĠ Ġ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend ln (" }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend ln (" dependencies Ġ{ ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdependencies . forEach Ġ{ Ġdependency Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ln ( dependency . to Code (). prepend Indent (" ĠĠĠ Ġ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend ln (" }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild File Add itions . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ln ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbuild File . write Text ( contents ) ĊĠĠĠ Ġ} Ċ } Ċ