/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 1 6 Ġ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 . api . logging . configuration . Warning Mode Ċ import Ġorg . gradle . util . Gradle Version Ċ import Ġorg . jetbrains . kotlin . gradle . plugin . MULTIPLE _ K OT LIN _ PLUGIN S _ LOADED _ WARNING Ċ import Ġorg . jetbrains . kotlin . gradle . plugin . MULTIPLE _ K OT LIN _ PLUGIN S _ SPEC IFIC _ PROJECT S _ WARNING Ċ import Ġorg . jetbrains . kotlin . gradle . script ing . internal . Script ing Gradle Sub plugin Ċ import Ġorg . jetbrains . kotlin . gradle . tasks . USING _ JVM _ INCREMENT AL _ COMPI L ATION _ MESSAGE Ċ import Ġorg . jetbrains . kotlin . gradle . util .* Ċ import Ġorg . jetbrains . kotlin . test . util . Kt TestUtil Ċ import Ġorg . junit . Test Ċ import Ġjava . io . File Ċ import Ġjava . nio . file . FileSystem Exception Ċ import Ġjava . nio . file . Files Ċ import Ġjava . util . zip . Zip File Ċ import Ġkotlin . test . assertEquals Ċ import Ġkotlin . test . assertNot Equals Ċ import Ġkotlin . test . assertNotNull Ċ import Ġkotlin . test . assertTrue Ċ Ċ class ĠKotlin Gradle IT Ġ: ĠBase Gradle IT () Ġ{ ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Cross Compile () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproject Ġ= ĠProject (" kotlin Java Project ") ĊĊĠĠĠĠĠĠĠ Ġproject . build (" compile Deploy Kotlin ", Ġ" build ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Successful () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Report Exists () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Tasks Executed (": compile Kotlin ", Ġ": compile Test Kotlin ", Ġ": compile Deploy Kotlin ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġproject . build (" compile Deploy Kotlin ", Ġ" build ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Successful () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Tasks Up ToDate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ": compile Kotlin ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ": compile Test Kotlin ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ": compile Deploy Kotlin ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ": compile Java " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Running In Different Dir () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġwd 0 Ġ= Ġworking Dir ĊĠĠĠĠĠĠĠ Ġval Ġwd 1 Ġ= ĠFile ( wd 0 , Ġ" subdir "). apply Ġ{ Ġmkdir s () Ġ} ĊĠĠĠĠĠĠĠ Ġworking Dir Ġ= Ġwd 1 ĊĠĠĠĠĠĠĠ Ġval Ġproject 1 Ġ= ĠProject (" kotlin Java Project ") ĊĊĠĠĠĠĠĠĠ Ġproject 1 . build (" assemble ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Successful () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġwd 2 Ġ= Ġcreate TempDir (" test Running In Different Dir ") ĊĠĠĠĠĠĠĠ Ġwd 1 . copy Re cursively ( wd 2 ) ĊĠĠĠĠĠĠĠ Ġwd 1 . delete Re cursively () ĊĠĠĠĠĠĠĠ Ġif Ġ( wd 1 . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfiles Ġ= Ġbuild String Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwd 1 . walk (). forEach Ġ{ Ġappend ln (" Ġ Ġ" Ġ+ Ġit . relative To ( wd 1 ). path ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror (" Some Ġfiles Ġin Ġ$ wd 1 Ġwere Ġnot Ġremoved :\ n $ files ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwd 0 . set Writable ( false ) ĊĠĠĠĠĠĠĠ Ġworking Dir Ġ= Ġwd 2 ĊĊĠĠĠĠĠĠĠ Ġproject 1 . build (" test ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Successful () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Kotlin Only Compile () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproject Ġ= ĠProject (" kotlin Project ") ĊĊĠĠĠĠĠĠĠ Ġproject . build (" build ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Successful () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert File Exists ( kotlin Classes Dir () Ġ+ Ġ" META - INF / kotlin Project . kotlin _ module ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Report Exists () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Tasks Executed (": compile Kotlin ", Ġ": compile Test Kotlin ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Not Contains (" For cing ĠSystem . gc ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġproject . build (" build ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Successful () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Tasks Up ToDate (": compile Kotlin ", Ġ": compile Test Kotlin ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Kotlin Compile In Folder With Spaces () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproject Ġ= ĠProject ( projectName Ġ= Ġ" Project ĠPath ĠWith ĠSp aces ") ĊĊĠĠĠĠĠĠĠ Ġproject . build (" build ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Successful () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Report Exists () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Tasks Executed (": compile Kotlin ", Ġ": compile Test Kotlin ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Not Contains (" For cing ĠSystem . gc ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest LogLevel Force GC () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdebug Project Ġ= ĠProject (" simple Project ", Ġmin LogLevel Ġ= ĠLogLevel . LI FE CYCLE ) ĊĠĠĠĠĠĠĠ Ġdebug Project . build (" build ", Ġ"- D kotlin . gradle . test . report . memory . usage = true ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Contains (" For cing ĠSystem . gc () ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġinfo Project Ġ= ĠProject (" simple Project ", Ġmin LogLevel Ġ= ĠLogLevel . QUI ET ) ĊĠĠĠĠĠĠĠ Ġinfo Project . build (" clean ", Ġ" build ", Ġ"- D kotlin . gradle . test . report . memory . usage = true ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Not Contains (" For cing ĠSystem . gc () ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Kotlin Classpath () Ġ{ ĊĠĠĠĠĠĠĠ ĠProject (" classpath Test "). build (" build ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Successful () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Report Exists () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Tasks Executed (": compile Kotlin ", Ġ": compile Test Kotlin ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Multi project Plugin Classpath () Ġ{ ĊĠĠĠĠĠĠĠ ĠProject (" multi project Class Path Test "). build (" build ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Successful () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Report Exists (" sub project ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Tasks Executed (": sub project : compile Kotlin ", Ġ": sub project : compile Test Kotlin ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Kotlin Gradle Build Services () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Incremental () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproject Ġ= ĠProject (" kotlin Project ") ĊĠĠĠĠĠĠĠ Ġval Ġoptions Ġ= Ġdefault Build Options (). copy ( incremental Ġ= Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġproject . build (" build ", Ġoptions Ġ= Ġoptions ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Successful () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert No Warnings () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġg reet er Kt Ġ= Ġproject . project Dir . getFile ByName (" G reet er . kt ") ĊĠĠĠĠĠĠĠ Ġg reet er Kt . modify Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . replace (" greeting : ĠString ", Ġ" greeting : ĠCharSequence ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġproject . build (" build ", Ġoptions Ġ= Ġoptions ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Successful () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert No Warnings () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaffected Sources Ġ= Ġproject . project Dir . get Files By Names ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" G reet er . kt ", Ġ" Kotlin G reeting Join er . kt ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Test G reet er . kt ", Ġ" Test Kotlin G reeting Join er . kt " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Compiled Kotlin Sources ( project . rel ativ ize ( affected Sources )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Many Classes IC () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproject Ġ= ĠProject (" many Classes ") ĊĠĠĠĠĠĠĠ Ġval Ġoptions Ġ= Ġdefault Build Options (). copy ( incremental Ġ= Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġproject . setup Working Dir () ĊĠĠĠĠĠĠĠ Ġval Ġclasses Kt Ġ= Ġproject . project File (" classes . kt ") ĊĠĠĠĠĠĠĠ Ġclasses Kt . write Text (( 0 .. 1 0 2 4 ). join ToString ("\ n ") Ġ{ Ġ" class ĠClass $ it Ġ{ Ġfun Ġf () Ġ= Ġ$ it Ġ}" Ġ}) ĊĊĠĠĠĠĠĠĠ Ġproject . build (" build ", Ġoptions Ġ= Ġoptions ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Successful () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert No Warnings () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġdummy Kt Ġ= Ġproject . project File (" dummy . kt ") ĊĠĠĠĠĠĠĠ Ġdummy Kt . modify Ġ{ Ġ"$ it Ġ" Ġ} ĊĠĠĠĠĠĠĠ Ġproject . build (" build ", Ġoptions Ġ= Ġoptions ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Successful () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Compiled Kotlin Sources ( project . rel ativ ize ( dummy Kt )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Simple Multi project Incremental () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġincremental Ġ= Ġdefault Build Options (). copy ( incremental Ġ= Ġtrue ) ĊĊĠĠĠĠĠĠĠ ĠProject (" multi project With Dependency "). build (" assemble ", Ġoptions Ġ= Ġincremental ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Successful () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Report Exists (" proj A ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Report Exists (" proj B ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Tasks Executed (": proj A : compile Kotlin ", Ġ": proj B : compile Kotlin ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠProject (" multi project With Dependency "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġold Src Ġ= ĠFile ( this . project Dir , Ġ" proj A / src / main / kotlin / a . kt ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Src Ġ= ĠFile ( this . project Dir , Ġ" proj A / src / main / kotlin / a . kt . new ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġold Src . exists () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġnew Src . exists () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Src . copy To ( old Src , Ġoverwrite Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ}. build (" assemble ", Ġoptions Ġ= Ġincremental ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Successful () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Report Exists (" proj A ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Report Exists (" proj B ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Tasks Executed (": proj A : compile Kotlin ", Ġ": proj B : compile Kotlin ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Kotlin In Java Root () Ġ{ ĊĠĠĠĠĠĠĠ ĠProject (" kotlin In Java Root "). build (" build ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Successful () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Report Exists () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Tasks Executed (": compile Kotlin ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Contains (": compile Test Kotlin ĠNO - SOURCE ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Incremental Property From Local Properties File () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproject Ġ= ĠProject (" kotlin Project ") ĊĠĠĠĠĠĠĠ Ġproject . setup Working Dir () ĊĊĠĠĠĠĠĠĠ Ġval Ġlocal Property File Ġ= ĠFile ( project . project Dir , Ġ" local . properties ") ĊĠĠĠĠĠĠĠ Ġlocal Property File . write Text (" kotlin . incremental = true ") ĊĊĠĠĠĠĠĠĠ Ġproject . build (" build ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Contains ( USING _ JVM _ INCREMENT AL _ COMPI L ATION _ MESSAGE ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Incremental Compilation LogLevel () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinfo Project Ġ= ĠProject (" kotlin Project ", Ġmin LogLevel Ġ= ĠLogLevel . INFO ) ĊĠĠĠĠĠĠĠ Ġinfo Project . build (" build ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Contains ( USING _ JVM _ INCREMENT AL _ COMPI L ATION _ MESSAGE ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġlifecycle Project Ġ= ĠProject (" kotlin Project ", Ġmin LogLevel Ġ= ĠLogLevel . LI FE CYCLE ) ĊĠĠĠĠĠĠĠ Ġlifecycle Project . build (" build ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Not Contains ( USING _ JVM _ INCREMENT AL _ COMPI L ATION _ MESSAGE ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Convert Java To Kotlin () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproject Ġ= ĠProject (" convert Between Java And Kotlin ") ĊĠĠĠĠĠĠĠ Ġproject . setup Working Dir () ĊĊĠĠĠĠĠĠĠ Ġval Ġbar Kt Ġ= Ġproject . project Dir . getFile ByName (" Bar . kt ") ĊĠĠĠĠĠĠĠ Ġval Ġbar Kt Content Ġ= Ġbar Kt . read Text () ĊĠĠĠĠĠĠĠ Ġbar Kt . delete () ĊĊĠĠĠĠĠĠĠ Ġproject . build (" build ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Successful () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġbar Class Ġ= Ġproject . project Dir . getFile ByName (" Bar . class ") ĊĠĠĠĠĠĠĠ Ġval Ġbar Class Timestamp Ġ= Ġbar Class . lastModified () ĊĊĠĠĠĠĠĠĠ Ġval Ġbar Java Ġ= Ġproject . project Dir . getFile ByName (" Bar . java ") ĊĠĠĠĠĠĠĠ Ġbar Java . delete () ĊĠĠĠĠĠĠĠ Ġbar Kt . write Text ( bar Kt Content ) ĊĊĠĠĠĠĠĠĠ Ġproject . build (" build ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Successful () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Not Contains (": compile Kotlin ĠUP - TO - DATE ", Ġ": compile Java ĠUP - TO - DATE ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Not Equals ( bar Class Timestamp , Ġbar Class . lastModified (), Ġ" Bar . class Ġtimestamp Ġhasn 't Ġbeen Ġupdated ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Move Class To Other Module () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproject Ġ= ĠProject (" move Class To Other Module ") ĊĊĠĠĠĠĠĠĠ Ġproject . build (" build ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Successful () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Contains (" Connected Ġto Ġdaemon ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġproject . perform Mod ifications () ĊĠĠĠĠĠĠĠ Ġproject . build (" build ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Successful () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Contains (" Connected Ġto Ġdaemon ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Type Alias Incremental () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproject Ġ= ĠProject (" type Alias ") ĊĠĠĠĠĠĠĠ Ġval Ġoptions Ġ= Ġdefault Build Options (). copy ( incremental Ġ= Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġproject . build (" build ", Ġoptions Ġ= Ġoptions ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Successful () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġcur ry Kt Ġ= Ġproject . project Dir . getFile ByName (" Cur ry . kt ") ĊĠĠĠĠĠĠĠ Ġval Ġuse Cur ry Kt Ġ= Ġproject . project Dir . getFile ByName (" Use Cur ry . kt ") ĊĊĠĠĠĠĠĠĠ Ġcur ry Kt . modify Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . replace (" class ĠCur ry ", Ġ" internal Ġclass ĠCur ry ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġproject . build (" build ", Ġoptions Ġ= Ġoptions ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Successful () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Compiled Kotlin Sources ( project . rel ativ ize ( cur ry Kt , Ġuse Cur ry Kt )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Kotlin Built ins () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproject Ġ= ĠProject (" kotlin Built ins ") ĊĊĠĠĠĠĠĠĠ Ġproject . build (" build ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Successful () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Custom Compiler File () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproject Ġ= ĠProject (" custom Compiler File ") ĊĠĠĠĠĠĠĠ Ġproject . setup Working Dir () ĊĊĠĠĠĠĠĠĠ Ġ// Ġcopy Ġcompiler Ġembed d able Ġto Ġproject Ġdir Ġusing Ġcustom Ġname ĊĠĠĠĠĠĠĠ Ġval Ġclasspath Ġ= ĠSystem . getProperty (" java . class . path "). split ( File . path Separator ) ĊĠĠĠĠĠĠĠ Ġval Ġkotlin Embed d able Jar Ġ= ĠFile ( classpath . find Ġ{ Ġit . contains (" kotlin - compiler - embed d able ") Ġ}) ĊĠĠĠĠĠĠĠ Ġval Ġcompiler Jar Ġ= ĠFile ( project . project Dir , Ġ" compiler . jar ") ĊĠĠĠĠĠĠĠ Ġkotlin Embed d able Jar . copy To ( compiler Jar ) ĊĊĠĠĠĠĠĠĠ Ġproject . build (" build ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Successful () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Contains (" Kotlin Ġcompiler Ġclasspath : Ġ$ compiler Jar ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Free Compiler Args () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproject Ġ= ĠProject (" kotlin Project ") ĊĠĠĠĠĠĠĠ Ġproject . setup Working Dir () ĊĊĠĠĠĠĠĠĠ Ġval Ġcustom ModuleName Ġ= Ġ" custom _ module _ name " ĊĊĠĠĠĠĠĠĠ ĠFile ( project . project Dir , Ġ" build . gradle "). modify Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit Ġ+ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompile Kotlin Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkotlin Options . free Compiler Args Ġ= Ġ[ Ġ"- module - name ", Ġ"$ custom ModuleName " Ġ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} """ ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġproject . build (" build ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Successful () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert File Exists ( kotlin Classes Dir () Ġ+ Ġ" META - INF /$ custom ModuleName . kotlin _ module ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Down grade Plugin Version () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproject Ġ= ĠProject (" kotlin Project ") ĊĠĠĠĠĠĠĠ Ġval Ġoptions Ġ= Ġdefault Build Options (). copy ( incremental Ġ= Ġtrue , Ġwith Daemon Ġ= Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġproject . build (" assemble ", Ġoptions Ġ= Ġoptions ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Successful () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġproject . build (" clean ", Ġ" assemble ", Ġoptions Ġ= Ġoptions . copy ( kotlin Version Ġ= Ġ" 1 . 3 . 4 1 ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Successful () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest O mitted Std lib Version () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproject Ġ= ĠProject (" kotlin Project ") ĊĠĠĠĠĠĠĠ Ġproject . setup Working Dir () ĊĠĠĠĠĠĠĠ ĠFile ( project . project Dir , Ġ" build . gradle "). modify Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . replace (" kotlin - stdlib :\ $ kotlin _ version ", Ġ" kotlin - stdlib "). apply Ġ{ Ġcheck (! equals ( it )) Ġ} Ġ+ Ġ"\ n " Ġ+ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapply Ġplugin : Ġ' maven - publish ' ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġgroup Ġ= Ġ" com . example " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġversion Ġ= Ġ" 1 . 0 " ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġpublishing Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublications Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy Library ( Maven Publication ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfrom Ġcomponents . kotlin ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepositories Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmaven Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl Ġ= Ġ"${ '$ '} build Dir / repo " ĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġproject . build ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" build ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" publish All Public ations To Maven Repository ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoptions Ġ= Ġdefault Build Options (). copy ( warning Mode Ġ= ĠWarning Mode . Summary ) ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Successful () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Tasks Executed (": compile Kotlin ", Ġ": compile Test Kotlin ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpom Lines Ġ= ĠFile ( project . project Dir , Ġ" build / publications / my Library / pom - default . xml "). read Lines () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstdlib Version LineNumber Ġ= Ġpom Lines . indexOf First Ġ{ Ġ"< artifactId > kotlin - stdlib </ artifactId >" Ġin Ġit Ġ} Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġversion Line Ġ= Ġpom Lines [ stdlib Version LineNumber ] ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġ"< version >${ default Build Options (). kotlin Version }</ version >" Ġin Ġversion Line Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Clean After Incremental Build () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproject Ġ= ĠProject (" kotlin Project ") ĊĠĠĠĠĠĠĠ Ġval Ġoptions Ġ= Ġdefault Build Options (). copy ( incremental Ġ= Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġproject . build (" build ", Ġ" clean ", Ġoptions Ġ= Ġoptions ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Successful () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Incremental Test Compile () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproject Ġ= ĠProject (" kotlin Project ") ĊĠĠĠĠĠĠĠ Ġval Ġoptions Ġ= Ġdefault Build Options (). copy ( incremental Ġ= Ġtrue ) ĊĊĠĠĠĠĠĠĠ Ġproject . build (" build ", Ġoptions Ġ= Ġoptions ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Successful () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġjoin er Kt Ġ= Ġproject . project Dir . getFile ByName (" Kotlin G reeting Join er . kt ") ĊĠĠĠĠĠĠĠ Ġjoin er Kt . modify Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . replace (" class ĠKotlin G reeting Join er ", Ġ" internal Ġclass ĠKotlin G reeting Join er ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġproject . build (" build ", Ġoptions Ġ= Ġoptions ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Successful () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtest Join er Kt Ġ= Ġproject . project Dir . getFile ByName (" Test Kotlin G reeting Join er . kt ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Compiled Kotlin Sources ( project . rel ativ ize ( join er Kt , Ġtest Join er Kt )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Language Version ApiVersion Explicit () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproject Ġ= ĠProject (" kotlin Project ") ĊĠĠĠĠĠĠĠ Ġproject . setup Working Dir () ĊĊĠĠĠĠĠĠĠ Ġval Ġbuild Gradle Ġ= ĠFile ( project . project Dir , Ġ" build . gradle ") ĊĠĠĠĠĠĠĠ Ġval Ġbuild Gradle Content Copy Ġ= Ġbuild Gradle . read Text () ĊĊĠĠĠĠĠĠĠ Ġfun Ġupdate Build Gradle ( lang Version : ĠString , ĠapiVersion : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Gradle . write Text ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ$ build Gradle Content Copy ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompile Kotlin Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkotlin Options Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlanguage Version Ġ= Ġ'$ lang Version ' ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠapiVersion Ġ= Ġ'$ apiVersion ' ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġassert ( build Gradle Content Copy . indexOf (" language Version ") Ġ< Ġ 0 ) Ġ{ Ġ" build . gradle Ġshould Ġnot Ġcontain Ġ' language Version '" Ġ} ĊĠĠĠĠĠĠĠ Ġassert ( build Gradle Content Copy . indexOf (" apiVersion ") Ġ< Ġ 0 ) Ġ{ Ġ" build . gradle Ġshould Ġnot Ġcontain Ġ' apiVersion '" Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġcheck Ġthe Ġarguments Ġare Ġnot Ġpassed Ġby Ġdefault Ġ( they Ġare Ġinferred Ġby Ġthe Ġcompiler ) ĊĠĠĠĠĠĠĠ Ġproject . build (" clean ", Ġ" compile Kotlin ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Successful () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Not Contains ("- language - version ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Not Contains ("- api - version ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert No Warnings () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġcheck Ġthe Ġarguments Ġare Ġalways Ġpassed Ġif Ġspecified Ġexplicitly ĊĠĠĠĠĠĠĠ Ġupdate Build Gradle (" 1 . 4 ", Ġ" 1 . 4 ") ĊĠĠĠĠĠĠĠ Ġproject . build (" clean ", Ġ" compile Kotlin ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Successful () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Contains ("- language - version Ġ 1 . 4 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Contains ("- api - version Ġ 1 . 4 ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġupdate Build Gradle (" 1 . 5 ", Ġ" 1 . 5 ") ĊĠĠĠĠĠĠĠ Ġproject . build (" clean ", Ġ" compile Kotlin ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Successful () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Contains ("- language - version Ġ 1 . 5 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Contains ("- api - version Ġ 1 . 5 ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Separ ate Output Gradle 4 0 () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproject Ġ= ĠProject (" kotlin Java Project ") ĊĠĠĠĠĠĠĠ Ġproject . build (" compile Deploy Kotlin ", Ġ" assemble ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Successful () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCheck Ġthat Ġthe ĠKotlin Ġclasses Ġare Ġplaced Ġunder Ġdirectories Ġfollowing Ġthe Ġguide line : ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert File Exists ( kotlin Classes Dir () Ġ+ Ġ" demo / Kotlin G reeting Join er . class ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert File Exists ( kotlin Classes Dir ( source Set Ġ= Ġ" deploy ") Ġ+ Ġ" demo / Example Source . class ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCheck Ġthat Ġthe Ġresulting ĠJ AR Ġcontains Ġthe ĠKotlin Ġclasses , Ġwithout Ġduplicates : ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjar Ġ= ĠZip File ( file In Working Dir (" build / libs /${ project . projectName }. jar ")) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġjar . entries (). as Sequence (). count Ġ{ Ġit . name Ġ== Ġ" demo / Kotlin G reeting Join er . class " Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCheck Ġthat Ġthe ĠJava Ġoutput Ġis Ġint act : ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert File Exists (" build / classes / java / main / demo / G reet er . class ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Archive Base Name For ModuleName () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproject Ġ= ĠProject (" simple Project ") ĊĠĠĠĠĠĠĠ Ġproject . setup Working Dir () ĊĊĠĠĠĠĠĠĠ Ġval Ġarch ives Base Name Ġ= Ġ" my Arch ives Base Name " ĊĊĠĠĠĠĠĠĠ Ġval Ġbuild Gradle Ġ= ĠFile ( project . project Dir , Ġ" build . gradle ") ĊĠĠĠĠĠĠĠ Ġbuild Gradle . append Text ("\ n archives Base Name Ġ= Ġ'$ archives Base Name '") ĊĊĠĠĠĠĠĠĠ Ġ// ĠAdd Ġtop - level Ġmembers Ġto Ġforce Ġgeneration Ġof Ġthe Ġ*. kotlin _ module Ġfiles Ġfor Ġthe Ġtwo Ġsource Ġsets ĊĠĠĠĠĠĠĠ Ġval Ġmain HelloWorld Kt Ġ= ĠFile ( project . project Dir , Ġ" src / main / kotlin / hello World . kt ") ĊĠĠĠĠĠĠĠ Ġmain HelloWorld Kt . append Text ("\ n fun Ġtop Level Fun () Ġ= Ġ 1 ") ĊĠĠĠĠĠĠĠ Ġval Ġdeploy Kotlin Src Kt Ġ= ĠFile ( project . project Dir , Ġ" src / deploy / kotlin / kotlin Src . kt ") ĊĠĠĠĠĠĠĠ Ġdeploy Kotlin Src Kt . append Text ("\ n fun Ġtop Level Fun () Ġ= Ġ 1 ") ĊĊĠĠĠĠĠĠĠ Ġproject . build (" build ", Ġ" deploy Classes ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Successful () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠMain Ġsource Ġset Ġshould Ġhave Ġa Ġ*. kotlin _ module Ġfile Ġwithout Ġ'_ main ' ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert File Exists ( kotlin Classes Dir () Ġ+ Ġ" META - INF /$ archives Base Name . kotlin _ module ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert File Exists ( kotlin Classes Dir ( source Set Ġ= Ġ" deploy ") Ġ+ Ġ" META - INF /${ archives Base Name }_ deploy . kotlin _ module ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Java Package Prefix () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproject Ġ= ĠProject (" java Package Prefix ") ĊĠĠĠĠĠĠĠ Ġproject . build (" build ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Successful () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCheck Ġthat Ġthe ĠJava Ġsource Ġin Ġa Ġnon - full - depth Ġpackage Ġstructure Ġwas Ġlocated Ġcorrectly : ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Byte code Contains ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFile ( project . project Dir , Ġkotlin Classes Dir () Ġ+ Ġ" my / pack / name / app / My App . class "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" my / pack / name / util / J Util . util " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Src Dir Task Dependency () Ġ{ ĊĠĠĠĠĠĠĠ ĠProject (" simple Project "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Working Dir () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFile ( project Dir , Ġ" build . gradle "). append Text ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ${ '\ n '} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtask Ġgenerate Sources Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutputs . dir (' generated ') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Last Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdef Ġfile Ġ= Ġnew ĠFile (' generated / test / TestClass . java ') ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile . parent File . mkdir s () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile . text Ġ= Ġ"" ${ '" '} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpackage Ġtest ; ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġclass ĠTest Class Ġ{ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"" ${ '" '} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource Sets . main . java . src Dir ( tasks . generate Sources ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFile ( project Dir , Ġ" src / main / kotlin / hello World . kt "). append Text ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ${ '\ n '} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġusage Of Generated Source () Ġ= Ġtest . TestClass () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild (" build ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert Successful () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Source Jar () Ġ{ ĊĠĠĠĠĠĠĠ ĠProject (" simple Project "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Working Dir () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġadditional Src Dir Ġ= Ġ" src / additional / kotlin /" ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠFile ( project Dir , Ġadditional Src Dir ). mkdir s () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFile ( project Dir , Ġ"$ additional Src Dir / additional Source . kt "). write Text (" fun Ġhello () Ġ= Ġ 1 2 3 ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠFile ( project Dir , Ġ" build . gradle "). append Text ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ${ '\ n '} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtask Ġsources Jar ( type : ĠJar ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfrom Ġsource Sets . main . all Source ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclassifier Ġ' source ' ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġduplicates Strategy Ġ= Ġ' fail ' Ġ// Ġfail Ġin Ġcase Ġof ĠJava Ġsource Ġduplication , Ġsee ĠK T - 1 7 5 6 4 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource Sets . main . kotlin . src Dir ('$ additional Src Dir ') Ġ// Ġtest Ġthat Ġadditional Ġsrc Dir Ġis Ġincluded ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild (" sources Jar ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert Successful () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsources Jar Ġ= ĠZip File ( File ( project Dir , Ġ" build / libs / simple Project - source . jar ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertNotNull ( sources Jar . getEntry (" additional Source . kt ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest NoUn named Inputs Outputs () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġprojects Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠProject (" simple Project "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠProject (" kotlin 2 Js Project "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠProject (" multi platform Project "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠProject (" simple ", Ġdirectory Prefix Ġ= Ġ" k apt 2 ") ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġprojects . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠEnable Ġcaching Ġto Ġmake Ġsure ĠGradle Ġreports Ġthe Ġtask Ġinputs / outputs Ġduring Ġkey Ġconstruction : ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoptions Ġ= Ġdefault Build Options (). copy ( with Build Cache Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild (" assemble ", Ġoptions Ġ= Ġoptions ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCheck Ġthat Ġall Ġinputs / outputs Ġadded Ġat Ġruntime Ġhave Ġproper Ġnames ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ( the Ġun named Ġones Ġare Ġlisted Ġas Ġ$ 1 , Ġ$ 2 Ġetc . ): ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert Not Contains (" App ending Ġinput Property Hash Ġfor Ġ'\\ $ \\ d +' ". to Regex ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert Not Contains (" App ending Ġoutput PropertyName Ġto Ġbuild Ġcache Ġkey : Ġ\\ $ \\ d +". to Regex ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest ModuleName Filtering () Ġ= Ġwith ( Project (" type Alias ")) Ġ{ Ġ// ĠUse Ġa ĠProject Ġwith Ġa Ġtop - level Ġtype alias ĊĠĠĠĠĠĠĠ Ġsetup Working Dir () ĊĊĠĠĠĠĠĠĠ Ġgradle Build Script (). append Text ("\ n " Ġ+ Ġ""" archives Base Name Ġ= Ġ' a / really \\ tr icky \ n \ r module \ t name ' """) ĊĠĠĠĠĠĠĠ Ġbuild (" classes ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Successful () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmeta Inf Dir Ġ= ĠFile ( project Dir , Ġkotlin Classes Dir () Ġ+ Ġ" META - INF ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertNotNull ( meta Inf Dir . list Files (). single OrNull Ġ{ Ġit . name . endsWith (". kotlin _ module ") Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Java Ic Compatibility () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproject Ġ= ĠProject (" kotlin Java Project ") ĊĠĠĠĠĠĠĠ Ġproject . setup Working Dir () ĊĊĠĠĠĠĠĠĠ Ġval Ġbuild Script Ġ= ĠFile ( project . project Dir , Ġ" build . gradle ") ĊĊĠĠĠĠĠĠĠ Ġbuild Script . modify Ġ{ Ġ"$ it \ n " Ġ+ Ġ" compile Java . options . incremental Ġ= Ġtrue " Ġ} ĊĠĠĠĠĠĠĠ Ġproject . build (" build ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Successful () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen Ġmodify Ġa ĠJava Ġsource Ġand Ġcheck Ġthat Ġcompile Java Ġis Ġincremental : ĊĠĠĠĠĠĠĠ ĠFile ( project . project Dir , Ġ" src / main / java / demo / HelloWorld . java "). modify Ġ{ Ġ"$ it \ n " Ġ+ Ġ" class ĠNew Class Ġ{ Ġ}" Ġ} ĊĠĠĠĠĠĠĠ Ġproject . build (" build ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Successful () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Contains (" Incremental Ġcompilation ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Not Contains (" not Ġincremental ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen Ġmodify Ġa ĠKotlin Ġsource Ġand Ġcheck Ġthat ĠGradle Ġsees Ġthat ĠJava Ġis Ġnot Ġup - to - date : ĊĠĠĠĠĠĠĠ ĠFile ( project . project Dir , Ġ" src / main / kotlin / hello World . kt "). modify Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . trim ('\ r ', Ġ'\ n '). trim End (' }') Ġ+ Ġ"\ n val Ġz : ĠInt Ġ= Ġ 0 Ġ}" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġproject . build (" build ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Successful () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Tasks Executed (": compile Kotlin ", Ġ": compile Java ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Not Contains (" not Ġincremental ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Not Contains (" None Ġof Ġthe Ġclasses Ġneeds Ġto Ġbe Ġcompiled !") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Apply Plugin From Build Src () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproject Ġ= ĠProject (" kotlin Project With Build Src ") ĊĠĠĠĠĠĠĠ Ġproject . setup Working Dir () ĊĠĠĠĠĠĠĠ ĠFile ( project . project Dir , Ġ" build Src / build . gradle "). modify Ġ{ Ġit . replace ("\ $ kotlin _ version ", ĠK OT LIN _ VERSION ) Ġ} ĊĠĠĠĠĠĠĠ Ġproject . build (" build ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Successful () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Internal Test () Ġ= Ġwith ( ĊĠĠĠĠĠĠĠ ĠProject (" internal Test ") ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbuild (" build ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Successful () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Report Exists () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Tasks Executed (": compile Kotlin ", Ġ": compile Test Kotlin ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠCheck ĠK T - 3 5 3 4 1 : Ġuse Ġsymlink ed Ġbuild Ġdir ĊĠĠĠĠĠĠĠ Ġval Ġbuild Dir Ġ= Ġproject Dir . resolve (" build ") ĊĠĠĠĠĠĠĠ Ġbuild Dir . delete Re cursively () ĊĠĠĠĠĠĠĠ Ġval Ġexternal Build Dir Ġ= ĠFiles . create Temp Directory ( working Dir . to Path (), Ġ" external Build ") ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFiles . create Symbolic Link ( build Dir . to Path (), Ġexternal Build Dir ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ(_ : ĠFileSystem Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Windows Ġrequires ĠSe Symbolic Link Ġprivilege Ġand Ġwe Ġcan 't Ġgrant Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġreturn @ with ĊĊĠĠĠĠĠĠĠ Ġbuild (" build ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Successful () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Report Exists () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Tasks Executed (": compile Kotlin ", Ġ": compile Test Kotlin ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Java Library Compatibility () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproject Ġ= ĠProject (" java Library Project ") ĊĊĠĠĠĠĠĠĠ Ġval Ġcompile Kotlin Tasks Ġ= ĠlistOf (": lib A : compile Kotlin ", Ġ": lib B : compile Kotlin ", Ġ": app : compile Kotlin ") ĊĠĠĠĠĠĠĠ Ġproject . build (" build ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Successful () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Not Contains (" Could Ġnot Ġregister ĠKotlin Ġoutput ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Tasks Executed ( compile Kotlin Tasks ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠModify Ġa Ġlibrary Ġsource Ġand Ġits Ġusage Ġand Ġre - build Ġthe Ġproject : ĊĠĠĠĠĠĠĠ Ġfor Ġ( path Ġin ĠlistOf (" lib A / src / main / kotlin / Hello A . kt ", Ġ" lib B / src / main / kotlin / Hello B . kt ", Ġ" app / src / main / kotlin / App . kt ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFile ( project . project Dir , Ġpath ). modify Ġ{ Ġoriginal Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoriginal . replace (" hello A ", Ġ" hello A 1 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace (" hello B ", Ġ" hello B 1 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ Ġassert (! equals ( original )) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġproject . build (" build ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Successful () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Not Contains (" Could Ġnot Ġregister ĠKotlin Ġoutput ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Tasks Executed ( compile Kotlin Tasks ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Kotlin Source In Java Source Set () Ġ= Ġwith ( Project (" multi platform Project ")) Ġ{ ĊĠĠĠĠĠĠĠ Ġsetup Working Dir () ĊĊĠĠĠĠĠĠĠ Ġval Ġsrc Dir Prefix Ġ= Ġ" src Dir : Ġ" ĊĊĠĠĠĠĠĠĠ Ġgradle Build Script (). append Text ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ n " Ġ+ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsub projects Ġ{ Ġproject Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject . after Evaluate Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject . source Sets . each Ġ{ Ġsource Set Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource Set . all Java . src Dirs . each Ġ{ Ġsrc Dir Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln Ġ"$ src Dir Prefix " Ġ+ Ġsrc Dir . canonical Path ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġsrc Dir Regex Ġ= Ġ"$ src Dir Prefix (.* ) ". to Regex () ĊĊĠĠĠĠĠĠĠ Ġbuild (" help ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Successful () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreported Src Dirs Ġ= Ġsrc Dir Regex . findAll ( output ). map Ġ{ Ġit . group Values [ 1 ] Ġ}. toSet () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpected Kotlin Dirs Ġ= ĠlistOf (" lib ", Ġ" lib Jvm ", Ġ" lib Js "). flatMap Ġ{ Ġmodule Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf (" main ", Ġ" test "). map Ġ{ Ġsource Set Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject Dir . resolve ("$ module / src /$ source Set / kotlin "). absolute Path ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpected Kotlin Dirs . forEach Ġ{ ĠassertTrue ( it Ġin Ġreported Src Dirs , Ġ"$ it Ġshould Ġbe Ġincluded Ġinto Ġthe ĠJava Ġsource Ġsets ") Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Default Kotlin Version IsNot Affected By Trans itive Dependencies () Ġ= ĊĠĠĠĠĠĠĠ Ġwith ( Project (" simple Project ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Working Dir () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAdd Ġa Ġdependency Ġwith Ġan Ġexplicit Ġlower ĠKotlin Ġversion Ġthat Ġhas Ġa Ġkotlin - stdlib Ġtrans itive Ġdependency : ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgradle Build Script (). append Text ("\ n dependencies Ġ{ Ġimplementation Ġ' org . jetbrains . kotlin : kotlin - reflect : 1 . 2 . 7 1 ' Ġ} ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtest Resolve All Configurations Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert Successful () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert Contains ("> > Ġ: compile Classpath Ġ--> Ġkotlin - reflect - 1 . 2 . 7 1 . jar ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCheck Ġthat Ġthe Ġdefault Ġnewer ĠKotlin Ġversion Ġstill Ġwins Ġfor Ġ' kotlin - stdlib ': ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert Contains ("> > Ġ: compile Classpath Ġ--> Ġkotlin - stdlib -${ default Build Options (). kotlin Version }. jar ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Kotlin Jvm Project Pub lishes Kotlin Api Dependencies As Compile () Ġ= ĊĠĠĠĠĠĠĠ Ġwith ( Project (" simple Project ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Working Dir () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgradle Build Script (). append Text ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ n " Ġ+ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdependencies Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi Ġ' org . jetbrains . kotlin : kotlin - reflect ' ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapply Ġplugin : Ġ' maven - publish ' ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgroup Ġ" com . example " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġversion Ġ" 1 . 0 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublishing Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepositories Ġ{ Ġmaven Ġ{ Ġurl Ġfile ("${ '$ '} build Dir / repo "). to URI () Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublications Ġ{ Ġmaven ( Maven Publication ) Ġ{ Ġfrom Ġcomponents . java Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild (" publish ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert Successful () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpom Text Ġ= Ġproject Dir . resolve (" build / repo / com / example / simple Project / 1 . 0 / simple Project - 1 . 0 . pom "). read Text () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ("\\ s + | \\ n ". to Regex (), Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpom Text . contains ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"< groupId > org . jetbrains . kotlin </ groupId >" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"< artifactId > kotlin - reflect </ artifactId >" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"< version >${ default Build Options (). kotlin Version }</ version >" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"< scope > compile </ scope >" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest No Task Configuration For cing () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprojects Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠProject (" simple Project "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠProject (" kotlin 2 Js No OutputFile Project "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠProject (" sample - app ", ĠGradle Version Required . FOR _ MP P _ SUPPORT , Ġ" new - mpp - lib - and - app ") ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġprojects . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Working Dir () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtask Configure Flag Ġ= Ġ" Configured Ġthe Ġtask !" ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgradle Build Script (). append Text ("\ n " Ġ+ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtasks . register (" my Task ") Ġ{ Ġprintln Ġ'$ task Configure Flag ' Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild (" help ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert Successful () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert Not Contains ( task Configure Flag ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Build Report S moke Test () Ġ= Ġwith ( Project (" simple Project ")) Ġ{ ĊĠĠĠĠĠĠĠ Ġbuild (" assemble ", Ġ"- P kotlin . build . report . enable = true ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Successful () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Contains (" Kotlin Ġbuild Ġreport Ġis Ġwritten Ġto ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Kt 2 9 9 7 1 () Ġ= Ġwith ( Project (" kt - 2 9 9 7 1 ", ĠGradle Version Required . FOR _ MP P _ SUPPORT )) Ġ{ ĊĠĠĠĠĠĠĠ Ġbuild (" jvm - app : build ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Successful () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Tasks Executed (": jvm - app : compile Kotlin ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Detect ing Different Class Lo aders () Ġ= Ġwith ( Project (" kt - 2 7 0 5 9 - pom - re writing ", ĠGradle Version Required . FOR _ MP P _ SUPPORT )) Ġ{ ĊĠĠĠĠĠĠĠ Ġsetup Working Dir () ĊĊĠĠĠĠĠĠĠ Ġval Ġoriginal Root Build Script Ġ= Ġgradle Build Script (). read Text () ĊĠĠĠĠĠĠĠ Ġgradle Build Script (). modify (:: transform Build Script With Plugins Dsl ) ĊĊĠĠĠĠĠĠĠ Ġbuild (" publish ", Ġ"- P mpp Project Dependency = true ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Successful () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Not Contains ( MULTIPLE _ K OT LIN _ PLUGIN S _ LOADED _ WARNING ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Not Contains ( MULTIPLE _ K OT LIN _ PLUGIN S _ SPEC IFIC _ PROJECT S _ WARNING ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠSpecify Ġthe Ġplugin Ġversions Ġin Ġthe Ġsub projects Ġwith Ġdifferent Ġplugin Ġsets ĠâĢĵ Ġthis Ġwill Ġmake ĠGradle Ġuse Ġseparate Ġclass Ġload ers ĊĠĠĠĠĠĠĠ Ġgradle Build Script (). modify Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoriginal Root Build Script . checked Replace (" id Ġ\" org . jetbrains . kotlin . multi platform \"", Ġ"// ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġgradle Build Script (" mpp - lib "). modify Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . checked Replace ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" id Ġ\" org . jetbrains . kotlin . multi platform \"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" id Ġ\" org . jetbrains . kotlin . multi platform \" Ġversion Ġ\" < plugin Marker Version >\ "" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). let (:: transform Build Script With Plugins Dsl ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġgradle Build Script (" jvm - app "). modify Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . checked Replace ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" id Ġ\" org . jetbrains . kotlin . jvm \"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" id Ġ\" org . jetbrains . kotlin . jvm \" Ġversion Ġ\" < plugin Marker Version >\ "" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). let (:: transform Build Script With Plugins Dsl ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġgradle Build Script (" js - app "). modify Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . checked Replace ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" id Ġ\" kotlin 2 js \"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" id Ġ\" kotlin 2 js \" Ġversion Ġ\" < plugin Marker Version >\ "" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). let (:: transform Build Script With Plugins Dsl ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠAlso Ġinclude Ġanother Ġproject Ġvia Ġa Ġcomposite Ġbuild : ĊĠĠĠĠĠĠĠ Ġtransform Project With Plugins Dsl (" al lopen Plugins Dsl ", Ġdirectory Prefix Ġ= Ġ" plugins Dsl "). let Ġ{ Ġother Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġother . projectName ĊĠĠĠĠĠĠĠĠĠĠĠ Ġother . setup Working Dir () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġother . project Dir . copy Re cursively ( project Dir . resolve ( result )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgradle Settings Script (). append Text ("\ n include Build (\" ${ result }\ ") ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgradle Build Script (). append Text ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ nt ask s . create (\" publish \" ). depends On ( gradle . included Build (\" ${ result }\" ). task ( \": assemble \" )) " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbuild (" publish ", Ġ"- P mpp Project Dependency = true ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Successful () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Contains ( MULTIPLE _ K OT LIN _ PLUGIN S _ LOADED _ WARNING ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġspecific Projects Reported Ġ= ĠRegex ("$ MULTIPLE _ K OT LIN _ PLUGIN S _ SPEC IFIC _ PROJECT S _ WARNING (( ?: '. *' (?: , Ġ) ? )+ )") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. find ( output ) !!. group Values [ 1 ]. split (", Ġ"). map Ġ{ Ġit . remove Sur rounding ("' ") Ġ}. toSet () ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( set Of (": mpp - lib ", Ġ": jvm - app ", Ġ": js - app "), Ġspecific Projects Reported ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠTest Ġthe Ġflag Ġthat Ġturns Ġoff Ġthe Ġwarnings ĊĠĠĠĠĠĠĠ Ġbuild (" publish ", Ġ"- P mpp Project Dependency = true ", Ġ"- P kotlin . plugin Loaded In Multiple Projects . ignore = true ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Successful () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Not Contains ( MULTIPLE _ K OT LIN _ PLUGIN S _ LOADED _ WARNING ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Not Contains ( MULTIPLE _ K OT LIN _ PLUGIN S _ SPEC IFIC _ PROJECT S _ WARNING ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest New Model In Old Jvm Plugin () Ġ= Ġwith ( Project (" new - model - in - old - plugin ")) Ġ{ ĊĠĠĠĠĠĠĠ Ġsetup Working Dir () ĊĠĠĠĠĠĠĠ Ġgradle Build Script (). modify (:: transform Build Script With Plugins Dsl ) ĊĊĠĠĠĠĠĠĠ Ġbuild (" publish ", Ġ" check ", Ġ" run Benchmark ", Ġoptions Ġ= Ġdefault Build Options (). copy ( warning Mode Ġ= ĠWarning Mode . Summary )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Successful () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Tasks Executed (": compile Kotlin ", Ġ": compile Test Kotlin ", Ġ": compile Benchmark Kotlin ", Ġ": test ", Ġ": run Benchmark ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFind Ġthe Ġbenchmark Ġoutput : ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Contains (" f Ġran Ġat Ġthe Ġspeed Ġof Ġlight ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmodule Dir Ġ= Ġ" build / repo / com / example / new - model / 1 . 0 /" ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpublished Jar Ġ= Ġfile In Working Dir ( module Dir Ġ+ Ġ" new - model - 1 . 0 . jar ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠZip File ( published Jar ). use Ġ{ Ġzip Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġentries Ġ= Ġzip . entries (). as Sequence (). map Ġ{ Ġit . name Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġ" com / example / A . class " Ġin Ġentries Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpublished P om Ġ= Ġfile In Working Dir ( module Dir Ġ+ Ġ" new - model - 1 . 0 . pom ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkotlin Version Ġ= Ġdefault Build Options (). kotlin Version ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpom Text Ġ= Ġpublished P om . read Text (). replace ( Regex ("\\ s + "), Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġ" kotlin - gradle - plugin - api </ artifactId >< version >$ kotlin Version </ version >< scope > compile </ scope >" Ġin Ġpom Text Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue Ġ{ Ġ" kotlin - stdlib - jdk 8 </ artifactId >< version >$ kotlin Version </ version >< scope > runtime </ scope >" Ġin Ġpom Text Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert File Exists ( module Dir Ġ+ Ġ" new - model - 1 . 0 - sources . jar ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest User Defined Attributes In Single Platform Project () Ġ= ĊĠĠĠĠĠĠĠ Ġwith ( Project (" multi project With Dependency ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Working Dir () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgradle Build Script (" proj A "). append Text ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ n " Ġ+ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdef Ġtarget Attribute Ġ= ĠAttribute . of (" com . example . target ", ĠString ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdef Ġcompilation Attribute Ġ= ĠAttribute . of (" com . example . compilation ", ĠString ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkotlin . target . attributes . attribute ( target Attribute , Ġ" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkotlin . target . comp il ations [" main "]. attributes . attribute ( compilation Attribute , Ġ" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgradle Build Script (" proj B "). append Text ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ n " Ġ+ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdef Ġtarget Attribute Ġ= ĠAttribute . of (" com . example . target ", ĠString ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdef Ġcompilation Attribute Ġ= ĠAttribute . of (" com . example . compilation ", ĠString ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkotlin . target . attributes . attribute ( target Attribute , Ġ" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkotlin . target . comp il ations [" main "]. attributes . attribute ( compilation Attribute , Ġ" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild (": proj B : compile Kotlin ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert Successful () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġproject Gradle Version Ġ= ĠGradle Version . version ( choose Wrapper Version Or Finish Test ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠBreak Ġdependency Ġresolution Ġby Ġproviding Ġincompatible Ġcustom Ġattributes Ġin Ġthe Ġtarget : ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgradle Build Script (" proj B "). append Text ("\ n kotlin . target . attributes . attribute ( target Attribute , Ġ\" bar \") ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild (": proj B : compile Kotlin ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert Failed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject Gradle Version Ġ< ĠGradle Version . version (" 6 . 4 ") Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert Contains (" Required Ġcom . example . target Ġ' bar '") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject Gradle Version Ġ< ĠGradle Version . version (" 6 . 8 . 4 ") Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert Contains ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" No Ġmatching Ġvariant Ġof Ġproject Ġ: proj A Ġwas Ġfound . ĠThe Ġconsumer Ġwas Ġconfigured Ġto Ġfind Ġan ĠAPI Ġof Ġa Ġlibrary Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" compatible Ġwith ĠJava Ġ 8 , Ġprefer ably Ġin Ġthe Ġform Ġof Ġclass Ġfiles , Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" and Ġits Ġdependencies Ġdeclared Ġextern ally , Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" as Ġwell Ġas Ġattribute Ġ' org . jetbrains . kotlin . platform . type ' Ġwith Ġvalue Ġ' jvm ', Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" attribute Ġ' com . example . compilation ' Ġwith Ġvalue Ġ' foo ', Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" attribute Ġ' com . example . target ' Ġwith Ġvalue Ġ' bar ' Ġbut :" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert Contains ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" No Ġmatching Ġvariant Ġof Ġproject Ġ: proj A Ġwas Ġfound . ĠThe Ġconsumer Ġwas Ġconfigured Ġto Ġfind Ġan ĠAPI Ġof Ġa Ġlibrary Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" compatible Ġwith ĠJava Ġ 8 , Ġprefer ably Ġin Ġthe Ġform Ġof Ġclass Ġfiles , Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" prefer ably Ġoptimized Ġfor Ġstandard ĠJVM s , Ġand Ġits Ġdependencies Ġdeclared Ġextern ally , Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" as Ġwell Ġas Ġattribute Ġ' org . jetbrains . kotlin . platform . type ' Ġwith Ġvalue Ġ' jvm ', Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" attribute Ġ' com . example . compilation ' Ġwith Ġvalue Ġ' foo ', Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" attribute Ġ' com . example . target ' Ġwith Ġvalue Ġ' bar ' Ġbut :" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAnd Ġusing Ġthe Ġcompilation Ġattributes Ġ( fix Ġthe Ġtarget Ġattributes Ġfirst ): ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgradle Build Script (" proj B "). append Text ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ n " Ġ+ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkotlin . target . attributes . attribute ( target Attribute , Ġ" foo ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkotlin . target . comp il ations [" main "]. attributes . attribute ( compilation Attribute , Ġ" bar ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild (": proj B : compile Kotlin ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert Failed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject Gradle Version Ġ< ĠGradle Version . version (" 6 . 4 ") Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert Contains (" Required Ġcom . example . compilation Ġ' bar '") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject Gradle Version Ġ< ĠGradle Version . version (" 6 . 8 . 4 ") Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert Contains ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" No Ġmatching Ġvariant Ġof Ġproject Ġ: proj A Ġwas Ġfound . ĠThe Ġconsumer Ġwas Ġconfigured Ġto Ġfind Ġan ĠAPI Ġof Ġa Ġlibrary Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" compatible Ġwith ĠJava Ġ 8 , Ġprefer ably Ġin Ġthe Ġform Ġof Ġclass Ġfiles , Ġand Ġits Ġdependencies Ġdeclared Ġextern ally , Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" as Ġwell Ġas Ġattribute Ġ' org . jetbrains . kotlin . platform . type ' Ġwith Ġvalue Ġ' jvm ', Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" attribute Ġ' com . example . compilation ' Ġwith Ġvalue Ġ' bar ', Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" attribute Ġ' com . example . target ' Ġwith Ġvalue Ġ' foo ' Ġbut :" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert Contains ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" No Ġmatching Ġvariant Ġof Ġproject Ġ: proj A Ġwas Ġfound . ĠThe Ġconsumer Ġwas Ġconfigured Ġto Ġfind Ġan ĠAPI Ġof Ġa Ġlibrary Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" compatible Ġwith ĠJava Ġ 8 , Ġprefer ably Ġin Ġthe Ġform Ġof Ġclass Ġfiles , Ġprefer ably Ġoptimized Ġfor Ġstandard ĠJVM s , Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" and Ġits Ġdependencies Ġdeclared Ġextern ally , Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" as Ġwell Ġas Ġattribute Ġ' org . jetbrains . kotlin . platform . type ' Ġwith Ġvalue Ġ' jvm ', Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" attribute Ġ' com . example . compilation ' Ġwith Ġvalue Ġ' bar ', Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" attribute Ġ' com . example . target ' Ġwith Ġvalue Ġ' foo ' Ġbut :" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Load Compiler Embed d able After Other Kotlin Artifacts () Ġ= Ġwith ( Project (" simple Project ")) Ġ{ ĊĠĠĠĠĠĠĠ Ġsetup Working Dir () ĊĠĠĠĠĠĠĠ Ġval Ġbuild script Classpath Prefix Ġ= Ġ" build script - classpath Ġ= Ġ" ĊĠĠĠĠĠĠĠ Ġgradle Build Script (). append Text ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ n " Ġ+ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln Ġ"$ build script Classpath Prefix " Ġ+ ĠArrays . toString ( build script . class Loader . get URLs ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġget Ġthe Ġclasspath , Ġthen Ġreorder Ġit Ġso Ġthat Ġkotlin - compiler - embed d able Ġis Ġloaded Ġafter Ġall Ġother ĠJ AR s ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġclasspath : ĠList < String > ĊĊĠĠĠĠĠĠĠ Ġbuild Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclasspath Line Ġ= Ġoutput . lines (). single Ġ{ Ġbuild script Classpath Prefix Ġin Ġit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclasspath Ġ= Ġclasspath Line . substring After ( build script Classpath Prefix ). remove Sur rounding ("[ ", Ġ"] "). split (", Ġ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġgradle Build Script (). modify Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreordered Classpath Ġ= Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ( kotlin Compiler Embed d able , Ġothers ) Ġ= Ġclasspath . partition Ġ{ Ġ" kotlin - compiler - embed d able " Ġin Ġit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġothers Ġ+ Ġkotlin Compiler Embed d able ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Classpath String Ġ= Ġ" classpath Ġfiles (\ n " Ġ+ Ġreordered Classpath . join ToString (", \ n ") Ġ{ Ġ"' $ it '" Ġ} Ġ+ Ġ"\ n )" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . checked Replace (" classpath Ġ\" org . jetbrains . kotlin : kotlin - gradle - plugin :${ '$ '} kotlin _ version \"", Ġnew Classpath String ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbuild (" compile Kotlin ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Successful () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest No Script ing Warning () Ġ= Ġwith ( Project (" simple Project ")) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠK T - 3 1 1 2 4 ĊĠĠĠĠĠĠĠ Ġbuild Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Not Contains ( Script ing Gradle Sub plugin . MIS CONFIGURATION _ MESSAGE _ SUFFIX ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Kt Kt 3 5 9 4 2 Internals From Main In Test Via Trans itive Deps () Ġ= Ġwith ( Project (" kt - 3 5 9 4 2 - jvm ", ĠGradle Version Required . FOR _ MP P _ SUPPORT )) Ġ{ ĊĠĠĠĠĠĠĠ Ġbuild (": lib 1 : compile Test Kotlin ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Successful () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Tasks Executed (": lib 1 : compile Kotlin ", Ġ": lib 2 : jar ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Kt Kt 3 5 9 4 2 Internals From Main In Test Via Trans itive Deps Android () Ġ= Ġwith ( ĊĠĠĠĠĠĠĠ ĠProject (" kt - 3 5 9 4 2 - android ", ĠGradle Version Required . FOR _ MP P _ SUPPORT ) ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbuild ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ": lib 1 : compile Debug UnitTest Kotlin ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoptions Ġ= Ġdefault Build Options (). copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġandroid Gradle Plugin Version Ġ= ĠA GP Version . v 3 _ 6 _ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġandroid Home Ġ= ĠK t TestUtil . find Android Sdk (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Successful () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Tasks Executed (": lib 1 : compile Debug Kotlin ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠRegression Ġtest Ġfor ĠK T - 3 8 6 9 2 . Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Incremental When No Kotlin Sources () Ġ= Ġwith ( ĊĠĠĠĠĠĠĠ ĠProject (" kotlin Project ") ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsetup Working Dir () ĊĠĠĠĠĠĠĠ ĠassertTrue ( this . all Kotlin Files . toList (). isNotEmpty ()) ĊĠĠĠĠĠĠĠ Ġbuild (": compile Kotlin ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Successful () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Tasks Executed (": compile Kotlin ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠRemove Ġall ĠKotlin Ġsources Ġand Ġforce Ġnon - incremental Ġrun ĊĠĠĠĠĠĠĠ Ġall Kotlin Files . forEach Ġ{ ĠassertTrue ( it . delete ()) Ġ} ĊĠĠĠĠĠĠĠ Ġproject Dir . resolve (" src / main / java / Sample . java "). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . parent File . mkdir s () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . write Text (" public Ġclass ĠSample Ġ{} ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbuild (" compile Kotlin ", Ġ"-- rer un - tasks ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Successful () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Tasks Executed (": compile Kotlin ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcompiled Kotlin Classes Ġ= Ġfile In Working Dir ( classes Dir ()). all Files With Extension (" class "). toList () ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( compiled Kotlin Classes . isEmpty ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ