package Ġcom . github . ld en ise y . set versions . task Ċ Ċ import Ġorg . gradle . test kit . runner . Build Result Ċ import Ġorg . gradle . test kit . runner . Gradle Runner Ċ import Ġorg . gradle . test kit . runner . Task Outcome Ċ import Ġorg . junit . jupiter . api . After Each Ċ import Ġorg . junit . jupiter . api . Assertions .* Ċ import Ġorg . junit . jupiter . api . BeforeEach Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġjava . io . File Ċ Ċ internal Ġclass ĠGet Versions Mult im odule s Test Ġ: ĠAbstract Task Test () Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġsettings : ĠFile ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġmodule 1 : ĠFile ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġmodule 2 : ĠFile ĊĊĠĠĠ Ġ@ BeforeEach ĊĠĠĠ Ġfun Ġprepare () Ġ{ ĊĠĠĠĠĠĠĠ Ġsettings Ġ= ĠFile ( project Folder , Ġ" settings . gradle ") ĊĠĠĠĠĠĠĠ Ġsettings . write Text (" root Project . name Ġ= Ġ\" unit - tests \"\ n include (\" module 1 \", Ġ\" module 2 \") ") ĊĠĠĠĠĠĠĠ Ġmodule 1 Ġ= ĠFile ( project Folder , Ġ" module 1 ") ĊĠĠĠĠĠĠĠ Ġmodule 1 . mkdir () ĊĠĠĠĠĠĠĠ Ġmodule 2 Ġ= ĠFile ( project Folder , Ġ" module 2 ") ĊĠĠĠĠĠĠĠ Ġmodule 2 . mkdir () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ After Each ĊĠĠĠ Ġfun Ġclean () Ġ{ ĊĠĠĠĠĠĠĠ Ġsettings . delete () ĊĠĠĠĠĠĠĠ Ġmodule 1 . delete Re cursively () ĊĠĠĠĠĠĠĠ Ġmodule 2 . delete Re cursively () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġinternal Ġfun Ġ` Two Ġmodules Ġwith Ġhardcoded Ġversion `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmodule 1 Build File Ġ= ĠFile ( module 1 , Ġ" build . gradle ") ĊĠĠĠĠĠĠĠ Ġmodule 1 Build File . write Text ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplugins Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid (" com . github . ld en ise y . set versions ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġgroup Ġ= Ġ" com . github . ld en ise y " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġversion Ġ= Ġ" 1 . 0 . 0 - SNAPSHOT " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġmodule 2 Build File Ġ= ĠFile ( module 2 , Ġ" build . gradle . k ts ") ĊĠĠĠĠĠĠĠ Ġmodule 2 Build File . write Text ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplugins Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid (" com . github . ld en ise y . set versions ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġgroup Ġ= Ġ" com . github . ld en ise y " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġversion Ġ= Ġ" 2 . 0 . 0 - SNAPSHOT " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġresult : ĠBuild Result Ġ= ĠGradle Runner . create () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Project Dir ( project Folder ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Arguments (" get Versions ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Plugin Classpath () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Debug ( isDebug ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ ĠassertTrue ( result . output . contains (" 1 . 0 . 0 - SNAPSHOT ")) ĊĠĠĠĠĠĠĠ ĠassertTrue ( result . output . contains (" 2 . 0 . 0 - SNAPSHOT ")) ĊĠĠĠĠĠĠĠ ĠassertNull ( result . task (": get Versions ") ?. outcome ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( Task Outcome . SUCCESS , Ġresult . task (": module 1 : get Versions ") ?. outcome ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( Task Outcome . SUCCESS , Ġresult . task (": module 2 : get Versions ") ?. outcome ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġinternal Ġfun Ġ` Two Ġmodules Ġwith Ġone Ġwithout Ġversion `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmodule 1 Build File Ġ= ĠFile ( module 1 , Ġ" build . gradle ") ĊĠĠĠĠĠĠĠ Ġmodule 1 Build File . write Text ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplugins Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid (" com . github . ld en ise y . set versions ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġgroup Ġ= Ġ" com . github . ld en ise y " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġversion Ġ= Ġ" 1 . 0 . 0 - SNAPSHOT " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġmodule 2 Build File Ġ= ĠFile ( module 2 , Ġ" build . gradle . k ts ") ĊĠĠĠĠĠĠĠ Ġmodule 2 Build File . write Text ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplugins Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid (" com . github . ld en ise y . set versions ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġgroup Ġ= Ġ" com . github . ld en ise y " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġresult : ĠBuild Result Ġ= ĠGradle Runner . create () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Project Dir ( project Folder ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Arguments (" get Versions ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Plugin Classpath () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Debug ( isDebug ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ ĠassertTrue ( result . output . contains (" 1 . 0 . 0 - SNAPSHOT ")) ĊĠĠĠĠĠĠĠ ĠassertTrue ( result . output . contains (" un specified ")) ĊĠĠĠĠĠĠĠ ĠassertNull ( result . task (": get Versions ") ?. outcome ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( Task Outcome . SUCCESS , Ġresult . task (": module 1 : get Versions ") ?. outcome ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( Task Outcome . SUCCESS , Ġresult . task (": module 2 : get Versions ") ?. outcome ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġinternal Ġfun Ġ` Two Ġmodules Ġwith Ġone Ġwith Ġversion Ġin Ġlocal Ġproperties `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmodule 1 Build File Ġ= ĠFile ( module 1 , Ġ" build . gradle ") ĊĠĠĠĠĠĠĠ Ġmodule 1 Build File . write Text ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplugins Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid (" com . github . ld en ise y . set versions ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġgroup Ġ= Ġ" com . github . ld en ise y " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġversion Ġ= Ġ" 1 . 0 . 0 - SNAPSHOT " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġmodule 2 Build File Ġ= ĠFile ( module 2 , Ġ" build . gradle . k ts ") ĊĠĠĠĠĠĠĠ Ġmodule 2 Build File . write Text ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplugins Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid (" com . github . ld en ise y . set versions ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġgroup Ġ= Ġ" com . github . ld en ise y " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġversion Ġ= Ġproject . find Property (" plugin Version "). toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġmodule 2 Properties File Ġ= ĠFile ( module 2 , Ġ" gradle . properties ") ĊĠĠĠĠĠĠĠ Ġmodule 2 Properties File . write Text ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanother Version = 3 . 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplugin Version = 2 . 0 . 0 - SNAPSHOT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġresult : ĠBuild Result Ġ= ĠGradle Runner . create () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Project Dir ( project Folder ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Arguments (" get Versions ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Plugin Classpath () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Debug ( isDebug ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ ĠassertTrue ( result . output . contains (" 1 . 0 . 0 - SNAPSHOT ")) ĊĠĠĠĠĠĠĠ ĠassertTrue ( result . output . contains (" 2 . 0 . 0 - SNAPSHOT ")) ĊĠĠĠĠĠĠĠ ĠassertFalse ( result . output . contains (" 3 . 0 . 0 ")) ĊĠĠĠĠĠĠĠ ĠassertNull ( result . task (": get Versions ") ?. outcome ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( Task Outcome . SUCCESS , Ġresult . task (": module 1 : get Versions ") ?. outcome ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( Task Outcome . SUCCESS , Ġresult . task (": module 2 : get Versions ") ?. outcome ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġinternal Ġfun Ġ` Two Ġmodules Ġwith Ġone Ġwith Ġversion Ġin Ġlocal Ġproperties Ġand Ġone Ġin Ġglobal Ġproperties `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmodule 1 Build File Ġ= ĠFile ( module 1 , Ġ" build . gradle ") ĊĠĠĠĠĠĠĠ Ġmodule 1 Build File . write Text ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplugins Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid (" com . github . ld en ise y . set versions ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġgroup Ġ= Ġ" com . github . ld en ise y " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġversion Ġ= Ġproject . find Property (" plugin Version "). toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġproject Properties File Ġ= ĠFile ( project Folder , Ġ" gradle . properties ") ĊĠĠĠĠĠĠĠ Ġproject Properties File . write Text ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanother Version = 4 . 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplugin Version = 5 . 0 . 0 - SNAPSHOT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġmodule 2 Build File Ġ= ĠFile ( module 2 , Ġ" build . gradle . k ts ") ĊĠĠĠĠĠĠĠ Ġmodule 2 Build File . write Text ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplugins Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid (" com . github . ld en ise y . set versions ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġgroup Ġ= Ġ" com . github . ld en ise y " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġversion Ġ= Ġproject . find Property (" plugin Version "). toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġmodule 2 Properties File Ġ= ĠFile ( module 2 , Ġ" gradle . properties ") ĊĠĠĠĠĠĠĠ Ġmodule 2 Properties File . write Text ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanother Version = 3 . 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplugin Version = 2 . 0 . 0 - SNAPSHOT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġresult : ĠBuild Result Ġ= ĠGradle Runner . create () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Project Dir ( project Folder ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Arguments (" get Versions ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Plugin Classpath () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Debug ( isDebug ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ ĠassertTrue ( result . output . contains (" 5 . 0 . 0 - SNAPSHOT ")) ĊĠĠĠĠĠĠĠ ĠassertFalse ( result . output . contains (" 4 . 0 . 0 ")) ĊĠĠĠĠĠĠĠ ĠassertTrue ( result . output . contains (" 2 . 0 . 0 - SNAPSHOT ")) ĊĠĠĠĠĠĠĠ ĠassertFalse ( result . output . contains (" 3 . 0 . 0 ")) ĊĠĠĠĠĠĠĠ ĠassertNull ( result . task (": get Versions ") ?. outcome ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( Task Outcome . SUCCESS , Ġresult . task (": module 1 : get Versions ") ?. outcome ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( Task Outcome . SUCCESS , Ġresult . task (": module 2 : get Versions ") ?. outcome ) ĊĠĠĠ Ġ} Ċ }