package Ġcom . project . starter . modules Ċ Ċ import Ġcom . project . starter . With Gradle Project Test Ċ import Ġcom . project . starter . java Class Ċ import Ġcom . project . starter . kotlin Class Ċ import Ġcom . project . starter . kotlin TestClass Ċ import Ġorg . assertj . core . api . Assertions . assertThat Ċ import Ġorg . gradle . test kit . runner . Task Outcome Ċ import Ġorg . junit . jupiter . api . BeforeEach Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġjava . io . File Ċ Ċ internal Ġclass ĠAndroid Library Plugin Test Ġ: ĠWith Gradle Project Test () Ġ{ ĊĊĠĠĠ Ġlateinit Ġvar Ġroot Build Script : ĠFile ĊĠĠĠ Ġlateinit Ġvar Ġmodule 1 Root : ĠFile ĊĠĠĠ Ġlateinit Ġvar Ġmodule 2 Root : ĠFile ĊĊĠĠĠ Ġ@ BeforeEach ĊĠĠĠ Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ Ġroot Directory . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmkdir s () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresolve (" settings . gradle "). write Text (""" include Ġ": module 1 ", Ġ": module 2 " Ġ"" ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġroot Build Script Ġ= Ġresolve (" build . gradle ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodule 1 Root Ġ= Ġresolve (" module 1 ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuild Script Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġlanguage = groovy ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplugins Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid (' com . starter . library . android ') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġandroid Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Types Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdebug Ġ{ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper Type Ġ{ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrelease Ġ{ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflavor Dimensions Ġ" version " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproduct Fl avors Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdemo Ġ{ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfull Ġ{ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdependencies Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest Implementation Ġ' junit : junit : 4 . 1 3 ' ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresolve (" build . gradle ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite Text ( build Script ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresolve (" src / main / Android Manifest . xml ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite Text ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ< manifest Ġpackage =" com . example . module 1 " Ġ/> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresolve (" src / main / kotlin / Valid Kotlin File 1 . kt ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite Text ( kotlin Class (" Valid Kotlin File 1 ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresolve (" src / release / kotlin / Release Model . kt ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite Text ( kotlin Class (" Release Model ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresolve (" src / test / kotlin / Test 1 . kt ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite Text ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġlanguage = kotlin ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpackage Ġcom . example ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclass ĠTest 1 Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ org . junit . Test ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġsome Test () Ġ= ĠUnit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodule 2 Root Ġ= Ġresolve (" module 2 ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresolve (" build . gradle ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite Text ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplugins Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid (' com . starter . library . android ') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdependencies Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest Implementation Ġ' junit : junit : 4 . 1 3 ' ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresolve (" src / main / Android Manifest . xml ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite Text ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ< manifest Ġpackage =" com . example . module 1 " Ġ/> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresolve (" src / main / kotlin / Valid Kotlin File 2 . kt ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite Text ( kotlin Class (" Valid Kotlin File 2 ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresolve (" src / test / kotlin / Test 2 . kt ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite Text ( kotlin TestClass (" Test 2 ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` kotlin Ġlibrary Ġplugin Ġcompiles Ġ' src _ main _ kotlin ' Ġclasses `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġrun Task (" assemble ") ĊĊĠĠĠĠĠĠĠ ĠassertThat ( result . task (": module 1 : assemble ") ?. outcome ). isEqualTo ( Task Outcome . SUCCESS ) ĊĠĠĠĠĠĠĠ ĠassertThat ( result . task (": module 2 : assemble ") ?. outcome ). isEqualTo ( Task Outcome . SUCCESS ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` project Test Ġruns Ġtests Ġfor Ġall Ġmodules `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġrun Task (" project Test ") ĊĊĠĠĠĠĠĠĠ ĠassertThat ( result . task (": module 1 : test Demo Debug UnitTest ") !!. outcome ). isEqualTo ( Task Outcome . SUCCESS ) ĊĠĠĠĠĠĠĠ ĠassertThat ( result . task (": module 2 : test Debug UnitTest ") !!. outcome ). isEqualTo ( Task Outcome . SUCCESS ) ĊĠĠĠĠĠĠĠ ĠassertThat ( module 1 Root . resolve (" build / test - results / test Demo Debug UnitTest ")). isDirectory Containing Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . name . startsWith (" TEST - ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠassertThat ( module 2 Root . resolve (" build / test - results / test Debug UnitTest ")). isDirectory Containing Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . name . startsWith (" TEST - ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` project Coverage Ġruns Ġcoverage Ġfor Ġall Ġmodules `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġrun Task (" project Coverage ") ĊĊĠĠĠĠĠĠĠ ĠassertThat ( result . task (": module 1 : test Demo Debug UnitTest ") !!. outcome ). isEqualTo ( Task Outcome . SUCCESS ) ĊĠĠĠĠĠĠĠ ĠassertThat ( result . task (": module 2 : test Debug UnitTest ") !!. outcome ). isEqualTo ( Task Outcome . SUCCESS ) ĊĠĠĠĠĠĠĠ Ġprintln ( module 1 Root . resolve (" build / reports / "). list ()?. toList (). toString ()) ĊĠĠĠĠĠĠĠ ĠassertThat ( module 1 Root . resolve (" build / reports / jac oco / jac oco Demo Debug Test Report ")). isDirectory Containing Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . name . startsWith (" jac oco ") Ġ&& Ġit . name . endsWith (". xml ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠassertThat ( module 2 Root . resolve (" build / reports / jac oco / jac oco Debug Test Report ")). isDirectory Containing Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . name . startsWith (" jac oco ") Ġ&& Ġit . name . endsWith (". xml ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` does Ġnot Ġcontain ĠBuild Config Ġfile Ġif Ġgeneration Ġdisabled `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġrun Task (" assemble Debug ") ĊĊĠĠĠĠĠĠĠ ĠassertThat ( result . task (": module 2 : assemble Debug ") !!. outcome ). isEqualTo ( Task Outcome . SUCCESS ) ĊĠĠĠĠĠĠĠ Ġval Ġgenerated Ġ= Ġmodule 2 Root . resolve (" build / generated /") ĊĠĠĠĠĠĠĠ ĠassertThat ( generated . walk ()). matches ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġall Files Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġall Files . none Ġ{ Ġit . isFile Ġ&& Ġit . name Ġ== Ġ" Build Config . java " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Build Config Ġfile Ġfound Ġin Ġ$ generated ", ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` contains ĠBuild Config Ġfile Ġif Ġgeneration Ġenabled `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconfig Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġlanguage = groovy ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject Config Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgenerate Build Config Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġmodule 2 Root . resolve (" build . gradle "). append Text ( config ) ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġrun Task (" assemble Debug ") ĊĊĠĠĠĠĠĠĠ ĠassertThat ( result . task (": module 2 : assemble Debug ") !!. outcome ). isEqualTo ( Task Outcome . SUCCESS ) ĊĠĠĠĠĠĠĠ Ġval Ġgenerated Ġ= Ġmodule 2 Root . resolve (" build / generated /") ĊĠĠĠĠĠĠĠ ĠassertThat ( generated . walk ()). matches ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġall Files Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġall Files . any Ġ{ Ġit . isFile Ġ&& Ġit . name Ġ== Ġ" Build Config . java " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Build Config Ġfile Ġnot Ġfound Ġin Ġ$ generated ", ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` config ures Ġproject XXX Ġtasks Ġwhen Ġdefault Ġvariants Ġprovided `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconfig Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġlanguage = groovy ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject Config Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefault Variants Ġ= Ġ[" demo Debug ", Ġ" full Release "] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġmodule 1 Root . resolve (" build . gradle "). append Text ( config ) ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġrun Task (" module 1 : project Test ", Ġ" module 1 : project Lint ", Ġ" module 1 : project Coverage ") ĊĊĠĠĠĠĠĠĠ ĠassertThat ( result . task (": module 1 : test Demo Debug UnitTest ") !!. outcome ). isNot EqualTo ( Task Outcome . FAILED ) ĊĠĠĠĠĠĠĠ ĠassertThat ( result . task (": module 1 : test Full Release UnitTest ") !!. outcome ). isNot EqualTo ( Task Outcome . FAILED ) ĊĠĠĠĠĠĠĠ ĠassertThat ( result . task (": module 1 : lint Demo Debug ") !!. outcome ). isNot EqualTo ( Task Outcome . FAILED ) ĊĠĠĠĠĠĠĠ ĠassertThat ( result . task (": module 1 : lint Full Release ") !!. outcome ). isNot EqualTo ( Task Outcome . FAILED ) ĊĠĠĠĠĠĠĠ ĠassertThat ( result . task (": module 1 : jac oco Demo Debug Test Report ") !!. outcome ). isNot EqualTo ( Task Outcome . FAILED ) ĊĠĠĠĠĠĠĠ ĠassertThat ( result . task (": module 1 : jac oco Full Release Test Report ") !!. outcome ). isNot EqualTo ( Task Outcome . FAILED ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` config ures Ġandroid Ġlibrary Ġextension `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconfig Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġlanguage = groovy ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject Config Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgenerate Build Config Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjava Files Allowed Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefault Variants Ġ= Ġ[" demo Debug ", Ġ" full Release "] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcoverage Ex clusions Ġ= Ġ[" **/ view /** "] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġmodule 1 Root . resolve (" build . gradle "). append Text ( config ) ĊĊĠĠĠĠĠĠĠ Ġrun Task (" help ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` does Ġnot Ġfail Ġon Ġjava Ġsources Ġby Ġdefault `() Ġ{ ĊĠĠĠĠĠĠĠ Ġmodule 2 Root . resolve (" src / main / java / Java Allowed . java ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrite Text ( java Class ( className Ġ= Ġ" Java Allowed ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġrun Task (": module 2 : assemble Debug ") ĊĊĠĠĠĠĠĠĠ ĠassertThat ( result . task (": module 2 : assemble Debug ") ?. outcome ). isEqualTo ( Task Outcome . SUCCESS ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` fail Ġon Ġjava Ġfiles Ġif Ġsettings Ġenabled Ġat Ġproject Ġlevel `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconfig Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġlanguage = groovy ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject Config Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjava Files Allowed Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġmodule 2 Root . resolve (" build . gradle "). append Text ( config ) ĊĠĠĠĠĠĠĠ Ġmodule 2 Root . resolve (" src / main / java / Java File . java ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrite Text ( java Class ( className Ġ= Ġ" Java File ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġrun Task (": module 2 : assemble Debug ", Ġshould Fail Ġ= Ġtrue ) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( result . task (": module 2 : for bid Java Files ") ?. outcome ). isEqualTo ( Task Outcome . FAILED ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` config ures Ġquality Ġplugin Ġby Ġdefault `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġquality Enabled Ġ= Ġrun Task (" project Code Style ") ĊĊĠĠĠĠĠĠĠ ĠassertThat ( quality Enabled . task (": module 1 : project Code Style ") ?. outcome ). isNotNull () ĊĠĠĠĠĠĠĠ ĠassertThat ( quality Enabled . task (": module 2 : project Code Style ") ?. outcome ). isNotNull () ĊĠĠĠ Ġ} Ċ } Ċ