Minor: move tests for incremental compilation of Kotlin when Java changes

This commit is contained in:
Alexey Tsvetkov
2018-07-06 17:03:37 +03:00
parent 7ff7c71b96
commit 02af631e14
2 changed files with 111 additions and 100 deletions
@@ -4,7 +4,6 @@ import org.jetbrains.kotlin.gradle.util.allKotlinFiles
import org.jetbrains.kotlin.gradle.util.getFileByName
import org.jetbrains.kotlin.gradle.util.getFilesByNames
import org.jetbrains.kotlin.gradle.util.modify
import org.jetbrains.kotlin.test.KotlinTestUtils
import org.junit.Assert
import org.junit.Test
import java.io.File
@@ -235,102 +234,3 @@ open class A {
}
}
class IncrementalJavaChangeDefaultIT : IncrementalCompilationJavaChangesBase(usePreciseJavaTracking = null) {
@Test
override fun testModifySignatureTrackedJavaInLib() {
doTest(trackedJavaClass, changeSignature, expectedAffectedSources = listOf("TrackedJavaClassChild.kt", "useTrackedJavaClass.kt"))
}
@Test
override fun testModifyBodyTrackedJavaInLib() {
doTest(trackedJavaClass, changeBody, expectedAffectedSources = listOf())
}
}
class IncrementalJavaChangePreciseIT : IncrementalCompilationJavaChangesBase(usePreciseJavaTracking = true) {
@Test
override fun testModifySignatureTrackedJavaInLib() {
doTest(trackedJavaClass, changeSignature, expectedAffectedSources = listOf("TrackedJavaClassChild.kt", "useTrackedJavaClass.kt"))
}
@Test
override fun testModifyBodyTrackedJavaInLib() {
doTest(trackedJavaClass, changeBody, expectedAffectedSources = listOf())
}
}
class IncrementalJavaChangeDisablePreciseIT : IncrementalCompilationJavaChangesBase(usePreciseJavaTracking = false) {
@Test
override fun testModifySignatureTrackedJavaInLib() {
doTest(
trackedJavaClass, changeSignature,
expectedAffectedSources = listOf(
"TrackedJavaClassChild.kt", "useTrackedJavaClass.kt", "useTrackedJavaClassFooMethodUsage.kt",
"useTrackedJavaClassSameModule.kt"
)
)
}
@Test
override fun testModifyBodyTrackedJavaInLib() {
doTest(
trackedJavaClass, changeBody,
expectedAffectedSources = listOf(
"TrackedJavaClassChild.kt", "useTrackedJavaClass.kt", "useTrackedJavaClassFooMethodUsage.kt",
"useTrackedJavaClassSameModule.kt"
)
)
}
}
abstract class IncrementalCompilationJavaChangesBase(val usePreciseJavaTracking: Boolean?) : BaseGradleIT() {
override fun defaultBuildOptions(): BuildOptions =
super.defaultBuildOptions().copy(withDaemon = true, incremental = true)
protected val trackedJavaClass = "TrackedJavaClass.java"
private val javaClass = "JavaClass.java"
protected val changeBody: (String) -> String = { it.replace("Hello, World!", "Hello, World!!!!") }
protected val changeSignature: (String) -> String = { it.replace("String getString", "Object getString") }
@Test
fun testModifySignatureJavaInLib() {
doTest(
javaClass, changeBody,
expectedAffectedSources = listOf("JavaClassChild.kt", "useJavaClass.kt", "useJavaClassFooMethodUsage.kt")
)
}
@Test
fun testModifyBodyJavaInLib() {
doTest(
javaClass, changeBody,
expectedAffectedSources = listOf("JavaClassChild.kt", "useJavaClass.kt", "useJavaClassFooMethodUsage.kt")
)
}
abstract fun testModifySignatureTrackedJavaInLib()
abstract fun testModifyBodyTrackedJavaInLib()
protected fun doTest(
fileToModify: String,
transformFile: (String) -> String,
expectedAffectedSources: Collection<String>
) {
val project = Project("incrementalMultiproject")
val options = defaultBuildOptions().copy(usePreciseJavaTracking = usePreciseJavaTracking)
project.build("build", options = options) {
assertSuccessful()
}
val javaClassJava = project.projectDir.getFileByName(fileToModify)
javaClassJava.modify(transformFile)
project.build("build", options = options) {
assertSuccessful()
val affectedSources = project.projectDir.getFilesByNames(*expectedAffectedSources.toTypedArray())
val relativePaths = project.relativize(affectedSources)
assertCompiledKotlinSources(relativePaths, weakTesting = false)
}
}
}
@@ -0,0 +1,111 @@
/*
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
* that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.gradle
import org.jetbrains.kotlin.gradle.util.getFileByName
import org.jetbrains.kotlin.gradle.util.getFilesByNames
import org.jetbrains.kotlin.gradle.util.modify
import org.junit.Test
class IncrementalJavaChangeDefaultIT : IncrementalCompilationJavaChangesBase(usePreciseJavaTracking = null) {
@Test
override fun testModifySignatureTrackedJavaInLib() {
doTest(trackedJavaClass, changeSignature, expectedAffectedSources = listOf("TrackedJavaClassChild.kt", "useTrackedJavaClass.kt"))
}
@Test
override fun testModifyBodyTrackedJavaInLib() {
doTest(trackedJavaClass, changeBody, expectedAffectedSources = listOf())
}
}
class IncrementalJavaChangePreciseIT : IncrementalCompilationJavaChangesBase(usePreciseJavaTracking = true) {
@Test
override fun testModifySignatureTrackedJavaInLib() {
doTest(trackedJavaClass, changeSignature, expectedAffectedSources = listOf("TrackedJavaClassChild.kt", "useTrackedJavaClass.kt"))
}
@Test
override fun testModifyBodyTrackedJavaInLib() {
doTest(trackedJavaClass, changeBody, expectedAffectedSources = listOf())
}
}
class IncrementalJavaChangeDisablePreciseIT : IncrementalCompilationJavaChangesBase(usePreciseJavaTracking = false) {
@Test
override fun testModifySignatureTrackedJavaInLib() {
doTest(
trackedJavaClass, changeSignature,
expectedAffectedSources = listOf(
"TrackedJavaClassChild.kt", "useTrackedJavaClass.kt", "useTrackedJavaClassFooMethodUsage.kt",
"useTrackedJavaClassSameModule.kt"
)
)
}
@Test
override fun testModifyBodyTrackedJavaInLib() {
doTest(
trackedJavaClass, changeBody,
expectedAffectedSources = listOf(
"TrackedJavaClassChild.kt", "useTrackedJavaClass.kt", "useTrackedJavaClassFooMethodUsage.kt",
"useTrackedJavaClassSameModule.kt"
)
)
}
}
abstract class IncrementalCompilationJavaChangesBase(val usePreciseJavaTracking: Boolean?) : BaseGradleIT() {
override fun defaultBuildOptions(): BuildOptions =
super.defaultBuildOptions().copy(withDaemon = true, incremental = true)
protected val trackedJavaClass = "TrackedJavaClass.java"
private val javaClass = "JavaClass.java"
protected val changeBody: (String) -> String = { it.replace("Hello, World!", "Hello, World!!!!") }
protected val changeSignature: (String) -> String = { it.replace("String getString", "Object getString") }
@Test
fun testModifySignatureJavaInLib() {
doTest(
javaClass, changeBody,
expectedAffectedSources = listOf("JavaClassChild.kt", "useJavaClass.kt", "useJavaClassFooMethodUsage.kt")
)
}
@Test
fun testModifyBodyJavaInLib() {
doTest(
javaClass, changeBody,
expectedAffectedSources = listOf("JavaClassChild.kt", "useJavaClass.kt", "useJavaClassFooMethodUsage.kt")
)
}
abstract fun testModifySignatureTrackedJavaInLib()
abstract fun testModifyBodyTrackedJavaInLib()
protected fun doTest(
fileToModify: String,
transformFile: (String) -> String,
expectedAffectedSources: Collection<String>
) {
val project = Project("incrementalMultiproject")
val options = defaultBuildOptions().copy(usePreciseJavaTracking = usePreciseJavaTracking)
project.build("build", options = options) {
assertSuccessful()
}
val javaClassJava = project.projectDir.getFileByName(fileToModify)
javaClassJava.modify(transformFile)
project.build("build", options = options) {
assertSuccessful()
val affectedSources = project.projectDir.getFilesByNames(*expectedAffectedSources.toTypedArray())
val relativePaths = project.relativize(affectedSources)
assertCompiledKotlinSources(relativePaths, weakTesting = false)
}
}
}