Ċ import Ġconfigurations . shouldBe Skipped Ċ import Ġjet brains . build Server . configs . kotlin . v 2 0 1 8 _ 2 . Project Ċ import Ġmodel . CI Build Model Ċ import Ġmodel . Gradle Sub project Ċ import Ġmodel . Jvm Vendor Ċ import Ġmodel . Jvm Version Ċ import Ġmodel . No Build Cache Ċ import Ġmodel . OS Ċ import Ġmodel . Specific Build Ċ import Ġmodel . Stage Ċ import Ġmodel . Stage Name Ċ import Ġmodel . Stage Names Ċ import Ġmodel . Test Coverage Ċ import Ġmodel . Test Type Ċ import Ġorg . junit . Test Ċ import Ġprojects . Root Project Ċ import Ġjava . io . File Ċ import Ġkotlin . test . assertEquals Ċ import Ġkotlin . test . assertFalse Ċ import Ġkotlin . test . assertTrue Ċ Ċ class ĠCI Config Integration Tests Ġ{ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġconfiguration Tree Can Be Generated () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġm Ġ= ĠCI Build Model () ĊĠĠĠĠĠĠĠ Ġval Ġp Ġ= ĠRoot Project ( m ) ĊĠĠĠĠĠĠĠ Ġprint Tree ( p ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( p . sub Projects . size , Ġm . stages . size Ġ+ Ġ 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun ĠmacOS Build s Subset () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġm Ġ= ĠCI Build Model () ĊĠĠĠĠĠĠĠ Ġval Ġp Ġ= ĠRoot Project ( m ) ĊĠĠĠĠĠĠĠ Ġval Ġready For Release Ġ= Ġp . sub Projects . find Ġ{ Ġit . name . contains ( Stage Names . READY _ FOR _ RELEASE . stage Name ) Ġ} !! ĊĠĠĠĠĠĠĠ Ġval ĠmacOS Ġ= Ġready For Release . sub Projects . find Ġ{ Ġit . name . contains (" Mac os ") Ġ} !! ĊĊĠĠĠĠĠĠĠ ĠmacOS . build Types . forEach Ġ{ Ġbuild Type Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertFalse ( OS . macos . ignored Sub projects . any Ġ{ Ġsub project Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Type . name . endsWith (" ($ sub project )") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġconfigurations Have Dependencies () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġm Ġ= ĠCI Build Model () ĊĠĠĠĠĠĠĠ Ġval Ġp Ġ= ĠRoot Project ( m ) ĊĠĠĠĠĠĠĠ Ġval Ġstage Pass Configs Ġ= Ġp . build Types ĊĠĠĠĠĠĠĠ Ġstage Pass Configs . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstage Number Ġ= Ġstage Pass Configs . indexOf ( it ) Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( it . id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . dependencies . items . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" --> Ġ" Ġ+ Ġit . build TypeId ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( stage Number Ġ<= Ġm . stages . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstage Ġ= Ġm . stages [ stage Number Ġ- Ġ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprev Stage Ġ= Ġif Ġ( stage Number Ġ> Ġ 1 ) Ġm . stages [ stage Number Ġ- Ġ 2 ] Ġelse Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġfunctional Test Count Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( stage . runs In dependent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ forEach ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstage . functional Tests . forEach Ġ{ Ġtest Coverage Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm . sub Projects . forEach Ġ{ Ġsub Project Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sub Project . contains Slow Tests Ġ&& Ġstage . om its Slow Projects ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ forEach ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( shouldBe Skipped ( sub Project , Ġtest Coverage )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ forEach ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sub Project . unit Tests Ġ&& Ġtest Coverage . test Type . unit Tests ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfunctional Test Count ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( sub Project . functional Tests Ġ&& Ġtest Coverage . test Type . functional Tests ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfunctional Test Count ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( sub Project . cross Version Tests Ġ&& Ġtest Coverage . test Type . cross Version Tests ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfunctional Test Count ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( test Coverage . test Type Ġ== ĠTest Type . so ak ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfunctional Test Count ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġhack y Ġway Ġto Ġconsider Ġdeferred Ġtests ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdeferred Test Count Ġ= Ġif Ġ( stage . stage Name Ġ== ĠStage Names . READY _ FOR _ N IGHT LY ) Ġ 1 0 Ġelse Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstage . specific Build s . size Ġ+ Ġfunctional Test Count Ġ+ Ġstage . performance Tests . size Ġ+ Ġ( if Ġ( prev Stage Ġ!= Ġnull ) Ġ 1 Ġelse Ġ 0 ) Ġ+ Ġdeferred Test Count , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . dependencies . items . size , Ġstage . stage Name . stage Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġit . dependencies . items . size ) Ġ// Individual ĠPerformance ĠWorker ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcan De activate Build Cache And Adjust CI Model () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġm Ġ= ĠCI Build Model ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject Prefix Ġ= Ġ" Gradle _ Build Cache De activated _", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent Build Cache Ġ= ĠNo Build Cache , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild Build Cache Ġ= ĠNo Build Cache , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstages Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStage ( Stage Names . QU ICK _ FEED BACK , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspecific Build s Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSpecific Build . Compile All , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSpecific Build . San ity Check , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSpecific Build . Build Dist ributions ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfunctional Tests Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTest Coverage ( Test Type . quick , ĠOS . linux , ĠJ vm Version . java 8 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTest Coverage ( Test Type . quick , ĠOS . windows , ĠJ vm Version . java 1 1 , Ġvendor Ġ= ĠJ vm Vendor . openjdk )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġomit s Slow Projects Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġp Ġ= ĠRoot Project ( m ) ĊĠĠĠĠĠĠĠ Ġprint Tree ( p ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( p . sub Projects . size Ġ== Ġ 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcan De fer Slow Tests To Later Stage () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠDefault Stage Name ( override Ġval Ġstage Name : ĠString , Ġoverride Ġval Ġdescription : ĠString ) Ġ: ĠStage Name ĊĊĊĠĠĠĠĠĠĠ Ġval Ġm Ġ= ĠCI Build Model ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject Prefix Ġ= Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparent Build Cache Ġ= ĠNo Build Cache , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchild Build Cache Ġ= ĠNo Build Cache , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstages Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStage ( Default Stage Name (" Stage 1 ", Ġ" Stage 1 Ġdescription "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfunctional Tests Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTest Coverage ( Test Type . quick , ĠOS . linux , ĠJ vm Version . java 8 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTest Coverage ( Test Type . quick , ĠOS . windows , ĠJ vm Version . java 8 )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġomit s Slow Projects Ġ= Ġtrue ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStage ( Default Stage Name (" Stage 2 ", Ġ" Stage 2 Ġdescription "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfunctional Tests Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTest Coverage ( Test Type . no Daemon , ĠOS . linux , ĠJ vm Version . java 8 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTest Coverage ( Test Type . no Daemon , ĠOS . windows , ĠJ vm Version . java 8 )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġomit s Slow Projects Ġ= Ġtrue ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStage ( Default Stage Name (" Stage 3 ", Ġ" Stage 3 Ġdescription "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfunctional Tests Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTest Coverage ( Test Type . platform , ĠOS . linux , ĠJ vm Version . java 8 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTest Coverage ( Test Type . platform , ĠOS . windows , ĠJ vm Version . java 8 )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġomit s Slow Projects Ġ= Ġfalse ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStage ( Default Stage Name (" Stage 4 ", Ġ" Stage 4 Ġdescription "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfunctional Tests Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTest Coverage ( Test Type . parallel , ĠOS . linux , ĠJ vm Version . java 8 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTest Coverage ( Test Type . parallel , ĠOS . windows , ĠJ vm Version . java 8 )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġomit s Slow Projects Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsub Projects Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGradle Sub project (" fast Build "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGradle Sub project (" slow Build ", Ġcontains Slow Tests Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġp Ġ= ĠRoot Project ( m ) ĊĠĠĠĠĠĠĠ ĠassertTrue (! p . has Sub Project (" Stage 1 ", Ġ" deferred ")) ĊĠĠĠĠĠĠĠ ĠassertTrue (! p . has Sub Project (" Stage 2 ", Ġ" deferred ")) ĊĠĠĠĠĠĠĠ ĠassertTrue ( Ġp . has Sub Project (" Stage 3 ", Ġ" deferred ")) ĊĠĠĠĠĠĠĠ ĠassertTrue (! p . has Sub Project (" Stage 4 ", Ġ" deferred ")) ĊĠĠĠĠĠĠĠ ĠassertTrue ( p . find Sub Project (" Stage 3 ", Ġ" deferred ") !!. has Build Type (" Quick ", Ġ" slow Build ")) ĊĠĠĠĠĠĠĠ ĠassertTrue ( p . find Sub Project (" Stage 3 ", Ġ" deferred ") !!. has Build Type (" No Daemon ", Ġ" slow Build ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠProject . has Sub Project ( var arg Ġpatterns : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfind Sub Project (* patterns ) Ġ!= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠProject . find Sub Project ( var arg Ġpatterns : ĠString ): ĠProject ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtail Ġ= Ġpatterns . drop ( 1 ). to Typed Array () ĊĠĠĠĠĠĠĠ Ġval Ġsub Ġ= Ġ Ġthis . sub Projects . find Ġ{ Ġit . name . contains ( patterns [ 0 ]) Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( sub Ġ== Ġnull Ġ|| Ġtail . isEmpty ()) Ġsub Ġelse Ġsub . find Sub Project (* tail ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠProject . has Build Type ( var arg Ġpatterns : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis . build Types . find Ġ{ Ġbuild Type Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpatterns . all Ġ{ Ġpattern Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Type . name . contains ( pattern ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġ!= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġall Sub projects Are List ed () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġknown Sub Project Names Ġ= ĠCI Build Model (). sub Projects . map Ġ{ Ġit . as DirectoryName () Ġ} ĊĠĠĠĠĠĠĠ Ġsub Project Folder List (). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . name Ġin Ġknown Sub Project Names , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Not Ġdefined : Ġ$ it " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġall Sub projects Define The ir UnitTest Property Correct ly () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprojects With UnitTests Ġ= ĠCI Build Model (). sub Projects . filter Ġ{ Ġit . unit Tests Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġproject Folders With UnitTests Ġ= Ġsub Project Folder List (). filter Ġ{ ĠFile ( it , Ġ" src / test "). exists () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġit . name Ġ!= Ġ" docs " Ġ// docs : check Ġis Ġpart Ġof ĠSan ity ĠCheck ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġit . name Ġ!= Ġ" architecture - test " Ġ// architecture Test : test Ġis Ġpart Ġof ĠSan ity ĠCheck ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠassertFalse ( project Folders With UnitTests . isEmpty ()) ĊĠĠĠĠĠĠĠ Ġproject Folders With UnitTests . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( projects With UnitTests . map Ġ{ Ġit . as DirectoryName () Ġ}. contains ( it . name ), Ġ" Contains Ġunit Ġtests : Ġ$ it ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġall Sub projects Define The ir Function Test Property Correct ly () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprojects With Functional Tests Ġ= ĠCI Build Model (). sub Projects . filter Ġ{ Ġit . functional Tests Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġproject Folders With Functional Tests Ġ= Ġsub Project Folder List (). filter Ġ{ ĠFile ( it , Ġ" src / inte g Test "). exists () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġit . name Ġ!= Ġ" distributions " Ġ// distributions : inte g Test Ġis Ġpart Ġof ĠBuild ĠDist ributions ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġit . name Ġ!= Ġ" so ak " ĠĠĠĠĠĠĠĠĠ Ġ// so ak Ġtests Ġhave Ġtheir Ġown Ġtest Ġcategory ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠassertFalse ( project Folders With Functional Tests . isEmpty ()) ĊĠĠĠĠĠĠĠ Ġproject Folders With Functional Tests . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( projects With Functional Tests . map Ġ{ Ġit . as DirectoryName () Ġ}. contains ( it . name ), Ġ" Contains Ġfunctional Ġtests : Ġ$ it ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġall Sub projects Define The ir Cross Version Test Property Correct ly () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprojects With Cross Version Tests Ġ= ĠCI Build Model (). sub Projects . filter Ġ{ Ġit . cross Version Tests Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġproject Folders With Cross Version Tests Ġ= Ġsub Project Folder List (). filter Ġ{ ĠFile ( it , Ġ" src / cross Version Test "). exists () Ġ} ĊĠĠĠĠĠĠĠ ĠassertFalse ( project Folders With Cross Version Tests . isEmpty ()) ĊĠĠĠĠĠĠĠ Ġproject Folders With Cross Version Tests . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( projects With Cross Version Tests . map Ġ{ Ġit . as DirectoryName () Ġ}. contains ( it . name ), Ġ" Contains Ġcross - version Ġtests : Ġ$ it ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġinte g Test Folder DoesNot Contain Cross Version Tests () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproject Folders With Functional Tests Ġ= Ġsub Project Folder List (). filter Ġ{ ĠFile ( it , Ġ" src / inte g Test "). exists () Ġ} ĊĠĠĠĠĠĠĠ ĠassertFalse ( project Folders With Functional Tests . isEmpty ()) ĊĠĠĠĠĠĠĠ Ġproject Folders With Functional Tests . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertFalse ( contains Src File With String ( File ( it , Ġ" src / inte g Test "), Ġ" Cross Version ", ĠlistOf (" package Ġorg . gradle . test kit " Ġ," Cross Version Performance Test "))) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġlong _ ids _ are _ short ened () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtest Coverage Ġ= ĠTest Coverage ( Test Type . quick Feedback Cross Version , ĠOS . windows , ĠJ vm Version . java 1 1 , ĠJ vm Vendor . oracle ) ĊĠĠĠĠĠĠĠ Ġval Ġshort ened Id Ġ= Ġtest Coverage . as Configuration Id ( CI Build Model (), Ġ" very Long Sub projectName Long er Than Everything We Have ") ĊĠĠĠĠĠĠĠ ĠassertTrue ( short ened Id . length Ġ< Ġ 8 0 ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( short ened Id , Ġ" Gradle _ Check _ Q ck F db ck Cr ss V rs n _ Jv 1 1 _ Or cl _ Wnd ws _ v ry Lng Sb prj ct Nm Ln gr Th n Ev ry th ng WH v ") ĊĊĠĠĠĠĠĠĠ ĠassertEquals (" Gradle _ Check _ Quick Feedback Cross Version _ Java 1 1 _ Oracle _ Windows _ i Inte g T ", Ġtest Coverage . as Configuration Id ( CI Build Model (), Ġ" internal Inte g Testing ")) ĊĊĠĠĠĠĠĠĠ ĠassertEquals (" Gradle _ Check _ Quick Feedback Cross Version _ Java 1 1 _ Oracle _ Windows _ build Cache ", Ġtest Coverage . as Configuration Id ( CI Build Model (), Ġ" build Cache ")) ĊĊĠĠĠĠĠĠĠ ĠassertEquals (" Gradle _ Check _ Quick Feedback Cross Version _ Java 1 1 _ Oracle _ Windows _ 0 ", Ġtest Coverage . as Configuration Id ( CI Build Model ())) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcontains Src File With String ( src Root : ĠFile , Ġcontent : ĠString , Ġexceptions : ĠList < String >): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġsrc Root . walk Top Down (). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . extension Ġ== Ġ" groovy " Ġ|| Ġit . extension Ġ== Ġ" java ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġit . read Text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( text . contains ( content ) Ġ&& Ġexceptions . all Ġ{ Ġ! text . contains ( it ) Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Found Ġsus pic ious Ġtest Ġfile : Ġ$ it ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsub Project Folder List () Ġ: ĠList < File > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsub project Folders Ġ= ĠFile ("../ sub projects "). list Files (). filter Ġ{ Ġit . isDirectory Ġ} ĊĠĠĠĠĠĠĠ ĠassertFalse ( sub project Folders . isEmpty ()) ĊĠĠĠĠĠĠĠ Ġreturn Ġsub project Folders ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġprint Tree ( project : ĠProject , Ġindent : ĠString Ġ= Ġ"") Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln ( indent Ġ+ Ġproject . id Ġ+ Ġ" Ġ( Project )") ĊĠĠĠĠĠĠĠ Ġproject . build Types . forEach Ġ{ Ġbt Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ("$ indent +- Ġ${ bt . id } Ġ( Config )") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġproject . sub Projects . forEach Ġ{ Ġsub Project Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprint Tree ( sub Project , Ġ"$ indent ĠĠ Ġ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ