package Ġcom . project . starter . modules Ċ Ċ import Ġcom . project . starter . With Gradle Project Test Ċ import Ġcom . project . starter . commit Ċ import Ġcom . project . starter . java Class Ċ import Ġcom . project . starter . kotlin Class Ċ import Ġcom . project . starter . kotlin TestClass Ċ import Ġcom . project . starter . setup Git Ċ import Ġcom . project . starter . tag Ċ import Ġjava . io . File Ċ import Ġorg . assertj . core . api . Assertions . assertThat Ċ import Ġorg . gradle . test kit . runner . Task Outcome Ċ import Ġorg . intellij . lang . annotations . Language Ċ import Ġorg . junit . jupiter . api . BeforeEach Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . junit . jupiter . api . io . TempDir Ċ Ċ internal Ġclass ĠKotlin 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 ĊĊĠĠĠ Ġ@ TempDir ĊĠĠĠ Ġlateinit Ġvar Ġorigin : Ġ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 ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresolve (" build . gradle ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite Text ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplugins Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid (' com . starter . library . kotlin ') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdependencies Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest Implementation Ġ' junit : junit : 4 . 1 3 ' ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresolve (" src / main / kotlin / Valid Kotlin File 1 . kt ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite Text ( kotlin Class (" Valid Kotlin File 1 ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresolve (" src / test / kotlin / Test 1 . kt ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite Text ( kotlin TestClass (" Test 1 ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodule 2 Root Ġ= Ġresolve (" module 2 ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresolve (" build . gradle ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite Text ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplugins Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid (' com . starter . library . kotlin ') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdependencies Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest Implementation Ġ' junit : junit : 4 . 1 3 ' ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . 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 ") !!. outcome ). isEqualTo ( Task Outcome . SUCCESS ) ĊĠĠĠĠĠĠĠ ĠassertThat ( result . task (": module 2 : test ") !!. outcome ). isEqualTo ( Task Outcome . SUCCESS ) ĊĠĠĠĠĠĠĠ ĠassertThat ( module 1 Root . resolve (" build / test - results / test ")). 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 ") !!. outcome ). isEqualTo ( Task Outcome . SUCCESS ) ĊĠĠĠĠĠĠĠ ĠassertThat ( result . task (": module 2 : test ") !!. outcome ). isEqualTo ( Task Outcome . SUCCESS ) ĊĠĠĠĠĠĠĠ ĠassertThat ( module 1 Root . resolve (" build / reports / jac oco / test ")). isDirectory Containing Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . name Ġ== Ġ" jac oco Test Report . xml " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` does Ġnot Ġfail Ġon Ġjava Ġfiles Ġby Ġdefault `() Ġ{ ĊĠĠĠĠĠĠĠ Ġmodule 2 Root . resolve (" src / main / java / Java Class . java ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrite Text ( java Class (" Java Class ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġrun Task (": module 2 : assemble ") ĊĊĠĠĠĠĠĠĠ ĠassertThat ( result . task (": module 2 : assemble ") !!. outcome ). isEqualTo ( Task Outcome . SUCCESS ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` fail Ġon Ġjava Ġfiles Ġif Ġfailing Ġenabled `() Ġ{ ĊĠĠĠĠĠĠĠ Ġmodule 2 Root . resolve (" build . gradle "). append Text ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject Config Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjava Files Allowed Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġmodule 2 Root . resolve (" src / main / java / Java Class . java ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrite Text ( java Class (" Java Class ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġrun Task (": module 2 : assemble ", Ġ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 () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` config ures Ġversioning Ġplugin Ġby Ġdefault `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġgit Ġ= Ġsetup Git ( origin ) ĊĠĠĠĠĠĠĠ Ġgit . tag (" v 1 . 2 . 2 ") ĊĠĠĠĠĠĠĠ Ġgit . commit (" random Ġcommit ") ĊĊĠĠĠĠĠĠĠ Ġval Ġversioning Enabled Ġ= Ġrun Task (" current Version ") ĊĊĠĠĠĠĠĠĠ ĠassertThat ( version ing Enabled . output ). contains (" version : Ġ 1 . 3 . 0 - SNAPSHOT ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` does Ġnot Ġconfigure Ġversioning Ġplugin Ġif Ġdisabled Ġusing Ġconfiguration Ġplugin `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Language (" groovy ") ĊĠĠĠĠĠĠĠ Ġval Ġversioning Script Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplugins Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid (' com . starter . config ') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommon Config Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġversioning Plugin Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġroot Build Script . write Text ( version ing Script ) ĊĊĠĠĠĠĠĠĠ Ġval Ġversioning Disabled Ġ= Ġrun Task (" current Version ", Ġshould Fail Ġ= Ġtrue ) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( version ing Disabled . output ). contains (" Task Ġ' current Version ' Ġnot Ġfound Ġ") ĊĠĠĠ Ġ} Ċ } Ċ