/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 1 7 ĠJetBrains Ġs . r . o . Ċ Ġ* Ċ Ġ* Ġ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 Ġorg . jetbrains . kotlin . gradle Ċ Ċ import Ġorg . gradle . api . logging . LogLevel Ċ import Ġorg . gradle . util . Gradle Version Ċ import Ġorg . jetbrains . kotlin . gradle . test base .* Ċ import Ġorg . junit . jupiter . api . DisplayName Ċ import Ġkotlin . io . path . Experimental Path Api Ċ import Ġkotlin . io . path . read Text Ċ import Ġkotlin . io . path . relative To Ċ import Ġkotlin . io . path . write Text Ċ Ċ @ Experimental Path Api Ċ @ DisplayName (" Local Ġbuild Ġcache ") Ċ @ Jvm Gradle Plugin Tests Ċ class ĠBuild Cache IT Ġ: ĠK GP Base Test () Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġdefault Build Options : ĠBuild Options Ġ= ĊĠĠĠĠĠĠĠ Ġsuper . default Build Options . copy ( build Cache Enabled Ġ= Ġtrue ) ĊĊĠĠĠ Ġprivate Ġval Ġlocal Build Cache Dir Ġget () Ġ= Ġworking Dir . resolve (" custom - jdk - build - cache ") ĊĊĠĠĠ Ġ@ DisplayName (" kotlin . caching . enabled Ġflag Ġshould Ġenable Ġcaching Ġfor ĠKotlin Ġtasks ") ĊĠĠĠ Ġ@ Gradle Test ĊĠĠĠ Ġfun Ġtest Kotlin Caching Enabled Flag ( gradle Version : ĠGradle Version ) Ġ{ ĊĠĠĠĠĠĠĠ Ġproject (" simple Project ", Ġgradle Version ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenable Local Build Cache ( local Build Cache Dir ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild (" assemble ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert Tasks Packed To Cache (": compile Kotlin ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild (" clean ", Ġ" assemble ", Ġ"- D kotlin . caching . enabled = false ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert Tasks Executed (": compile Kotlin ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ DisplayName (" Kotlin ĠJVM Ġtask Ġshould Ġbe Ġtaken Ġfrom Ġcache ") ĊĠĠĠ Ġ@ Gradle Test ĊĠĠĠ Ġfun Ġtest Cache Hit After Clean ( gradle Version : ĠGradle Version ) Ġ{ ĊĠĠĠĠĠĠĠ Ġproject (" simple Project ", Ġgradle Version ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenable Local Build Cache ( local Build Cache Dir ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild (" assemble ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert Tasks Packed To Cache (": compile Kotlin ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild (" clean ", Ġ" assemble ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert Tasks From Cache (": compile Kotlin ", Ġ": compile Java ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ DisplayName (" Should Ġcorrectly Ġhandle Ġmodification / rest or ation Ġof Ġsource Ġfile ") ĊĠĠĠ Ġ@ Gradle Test ĊĠĠĠ Ġfun Ġtest Cache Hit After Cache Hit ( gradle Version : ĠGradle Version ) Ġ{ ĊĠĠĠĠĠĠĠ Ġproject (" simple Project ", Ġgradle Version ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenable Local Build Cache ( local Build Cache Dir ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild (" assemble ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠShould Ġstore Ġthe Ġoutput Ġinto Ġthe Ġcache : ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert Tasks Packed To Cache (": compile Kotlin ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsource File Ġ= Ġkotlin Sources Dir (). resolve (" hello World . kt ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoriginal Source : ĠString Ġ= Ġsource File . read Text () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmodified Source : ĠString Ġ= Ġoriginal Source . replace (" Ġand Ġ", Ġ" Ġ+ Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsource File . write Text ( modified Source ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild (" assemble ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert Tasks Packed To Cache (": compile Kotlin ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsource File . write Text ( original Source ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild (" assemble ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠShould Ġload Ġthe Ġoutput Ġfrom Ġcache : ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert Tasks From Cache (": compile Kotlin ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsource File . write Text ( modified Source ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild (" assemble ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAnd Ġshould Ġload Ġthe Ġoutput Ġfrom Ġcache Ġagain , Ġwithout Ġcompilation : ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert Tasks From Cache (": compile Kotlin ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ DisplayName (" Debug Ġlog Ġlevel Ġshould Ġnot Ġbreak Ġbuild Ġcache ") ĊĠĠĠ Ġ@ Gradle Test ĊĠĠĠ Ġfun Ġtest Debug LogLevel Caching ( gradle Version : ĠGradle Version ) Ġ{ ĊĠĠĠĠĠĠĠ Ġproject (" simple Project ", Ġgradle Version ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenable Local Build Cache ( local Build Cache Dir ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ": assemble ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Options Ġ= Ġdefault Build Options . copy ( logLevel Ġ= ĠLogLevel . DEBUG ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert Tasks Packed To Cache (": compile Kotlin ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild (" clean ", Ġ": assemble ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert Tasks From Cache (": compile Kotlin ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// does n 't Ġwork Ġfor Ġbuild Ġhistory Ġfiles Ġapproach ĊĠĠĠ Ġ@ DisplayName (" Restore Ġfrom Ġbuild Ġcache Ġshould Ġnot Ġbreak Ġincremental Ġcompilation ") ĊĠĠĠ Ġ@ Gradle Test ĊĠĠĠ Ġfun Ġtest Incremental Compilation After Cache Hit ( gradle Version : ĠGradle Version ) Ġ{ ĊĠĠĠĠĠĠĠ Ġproject (" incremental Multi project ", Ġgradle Version , Ġbuild Options Ġ= Ġdefault Build Options . copy ( use IC Classpath Snapshot Ġ= Ġtrue )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenable Local Build Cache ( local Build Cache Dir ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild (" assemble ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild (" clean ", Ġ" assemble ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert Tasks From Cache (": lib : compile Kotlin ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert Tasks From Cache (": app : compile Kotlin ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġb Kt SourceFile Ġ= Ġproject Path . resolve (" lib / src / main / kotlin / bar / B . kt ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġb Kt SourceFile . modify Ġ{ Ġit . replace (" fun Ġb () Ġ{}", Ġ" fun Ġb () Ġ{}\ n fun Ġb 2 () Ġ{} ") Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild (" assemble ", Ġbuild Options Ġ= Ġdefault Build Options . copy ( use IC Classpath Snapshot Ġ= Ġtrue , Ġlog Level Ġ= ĠLogLevel . DEBUG )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert Output DoesNot Contain ("[ K OT LIN ] Ġ[ IC ] ĠNon - incremental Ġcompilation Ġwill Ġbe Ġperformed ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert Output Contains (" Incremental Ġcompilation Ġwith ĠABI Ġsnapshot Ġenabled ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert Compiled Kotlin Sources ( set Of ( b Kt SourceFile ). map Ġ{ Ġit . relative To ( project Path )}, Ġoutput ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ