diff --git a/libraries/tools/kotlin-gradle-plugin/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinGradlePluginIT.kt b/libraries/tools/kotlin-gradle-plugin/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinGradlePluginIT.kt index 13a6221dabc..a13cf0e0893 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinGradlePluginIT.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinGradlePluginIT.kt @@ -3,6 +3,8 @@ package org.jetbrains.kotlin.gradle import org.gradle.api.logging.LogLevel import org.jetbrains.kotlin.gradle.plugin.CleanUpBuildListener import org.junit.Test +import java.io.File +import kotlin.test.assertTrue class KotlinGradleIT: BaseGradleIT() { @@ -123,6 +125,41 @@ class KotlinGradleIT: BaseGradleIT() { } } + @Test + fun testSimpleMultiprojectIncremental() { + + fun Project.modify(body: Project.() -> Unit): Project { + this.body() + return this + } + + Project("multiprojectWithDependency", "1.6").build("-PincrementalOption=true", "assemble") { + assertSuccessful() + assertReportExists("projA") + assertContains(":projA:compileKotlin") + assertNotContains("projA:compileKotlin UP-TO-DATE") + assertReportExists("projB") + assertContains(":projB:compileKotlin") + assertNotContains("projB:compileKotlin UP-TO-DATE") + } + Project("multiprojectWithDependency", "1.6").modify { + val oldSrc = File(this.projectDir, "projA/src/main/kotlin/a.kt") + val newSrc = File(this.projectDir, "projA/src/main/kotlin/a.kt.new") + assertTrue { oldSrc.exists() } + assertTrue { newSrc.exists() } + newSrc.copyTo(oldSrc, overwrite = true) + }.build("-PincrementalOption=true", "assemble") { + assertSuccessful() + assertReportExists("projA") + assertContains(":projA:compileKotlin") + assertContains("[KOTLIN] is incremental == true") + assertNotContains("projA:compileKotlin UP-TO-DATE") + assertReportExists("projB") + assertContains(":projB:compileKotlin") + assertNotContains("projB:compileKotlin UP-TO-DATE") + } + } + @Test fun testKotlinInJavaRoot() { Project("kotlinInJavaRoot", "1.6").build("build") { diff --git a/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/multiprojectWithDependency/build.gradle b/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/multiprojectWithDependency/build.gradle new file mode 100644 index 00000000000..01963240935 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/multiprojectWithDependency/build.gradle @@ -0,0 +1,11 @@ +buildscript { + repositories { + mavenCentral() + maven { + url 'file://' + pathToKotlinPlugin + } + } + dependencies { + classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:0.1-SNAPSHOT' + } +} diff --git a/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/multiprojectWithDependency/projA/build.gradle b/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/multiprojectWithDependency/projA/build.gradle new file mode 100644 index 00000000000..e34e4a3ccbb --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/multiprojectWithDependency/projA/build.gradle @@ -0,0 +1,13 @@ +apply plugin: "kotlin" + +repositories { + mavenCentral() + maven { + url 'file://' + pathToKotlinPlugin + } +} + +compileKotlin { + experimentalIncremental = incrementalOption +} + diff --git a/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/multiprojectWithDependency/projA/src/main/kotlin/a.kt b/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/multiprojectWithDependency/projA/src/main/kotlin/a.kt new file mode 100644 index 00000000000..3e99f8f60fb --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/multiprojectWithDependency/projA/src/main/kotlin/a.kt @@ -0,0 +1,4 @@ +package projA + +fun getInfo(): String = "s1" + diff --git a/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/multiprojectWithDependency/projA/src/main/kotlin/a.kt.new b/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/multiprojectWithDependency/projA/src/main/kotlin/a.kt.new new file mode 100644 index 00000000000..ccbd2e88f2a --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/multiprojectWithDependency/projA/src/main/kotlin/a.kt.new @@ -0,0 +1,4 @@ +package projA + +fun getInfo(): String = "s1_changed" + diff --git a/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/multiprojectWithDependency/projB/build.gradle b/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/multiprojectWithDependency/projB/build.gradle new file mode 100644 index 00000000000..239cabdaa45 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/multiprojectWithDependency/projB/build.gradle @@ -0,0 +1,16 @@ +apply plugin: "kotlin" + +repositories { + mavenCentral() + maven { + url 'file://' + pathToKotlinPlugin + } +} + +dependencies { + compile project(':projA') +} + +compileKotlin { + experimentalIncremental = incrementalOption +} diff --git a/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/multiprojectWithDependency/projB/src/main/kotlin/helloWorld.kt b/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/multiprojectWithDependency/projB/src/main/kotlin/helloWorld.kt new file mode 100644 index 00000000000..e42a373a7b1 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/multiprojectWithDependency/projB/src/main/kotlin/helloWorld.kt @@ -0,0 +1,7 @@ +package projB + +fun main(vararg args: String) { + System.out.println(projA.getInfo()) +} + + diff --git a/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/multiprojectWithDependency/settings.gradle b/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/multiprojectWithDependency/settings.gradle new file mode 100644 index 00000000000..7b2cd064ed6 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/test/resources/testProject/multiprojectWithDependency/settings.gradle @@ -0,0 +1,2 @@ +include 'projA' +include 'projB'