Fix some tests for Gradle 5.0 and update some dependency versions

* Introduce GradleVersionRequired.InRange and thus prevent older
tests (e.g. Android 2.3.0) from running with newer Gradle versions

* Add a task outputs pattern suitable for Gradle 5.0

* Run some of the Android tests with AGP 3.1.0 (and Gradle 4.4) instead
of 3.0.0 to ensure compatibility with Gradle 5.0

* Update test projects according to Gradle 5.0 dropped deprecated
features: classesDir, left-shift operator, default org.gradle.util.*
imports

* Fix a Gradle test after Gradle 5.0 changed `publishing` behavior to
run the closure eagerly rather than after evaluation
This commit is contained in:
Sergey Igushkin
2018-12-07 18:47:49 +03:00
parent 5f21ced26b
commit d7522e2283
15 changed files with 34 additions and 22 deletions
@@ -14,7 +14,7 @@ import kotlin.test.assertTrue
class KotlinAndroidGradleIT : AbstractKotlinAndroidGradleTests(androidGradlePluginVersion = "2.3.0") {
override val defaultGradleVersion: GradleVersionRequired
get() = GradleVersionRequired.AtLeast("3.4")
get() = GradleVersionRequired.InRange("3.4", "4.10.2")
}
// TODO If we there is a way to fetch the latest Android plugin version, test against the latest version
@@ -138,7 +138,7 @@ class KotlinAndroid32GradleIT : KotlinAndroid3GradleIT(androidGradlePluginVersio
class KotlinAndroid30GradleIT : KotlinAndroid3GradleIT(androidGradlePluginVersion = "3.0.0") {
override val defaultGradleVersion: GradleVersionRequired
get() = GradleVersionRequired.AtLeast("4.1")
get() = GradleVersionRequired.InRange("4.1", "4.10.2")
}
abstract class KotlinAndroid3GradleIT(androidGradlePluginVersion: String) : AbstractKotlinAndroidGradleTests(androidGradlePluginVersion) {
@@ -170,7 +170,7 @@ abstract class KotlinAndroid3GradleIT(androidGradlePluginVersion: String) : Abst
}
}
abstract class AbstractKotlinAndroidGradleTests(private val androidGradlePluginVersion: String) : BaseGradleIT() {
abstract class AbstractKotlinAndroidGradleTests(val androidGradlePluginVersion: String) : BaseGradleIT() {
override fun defaultBuildOptions() =
super.defaultBuildOptions().copy(
@@ -461,9 +461,11 @@ abstract class BaseGradleIT {
}
fun CompiledProject.getOutputForTask(taskName: String): String {
val taskOutputRegex = ("\\[LIFECYCLE] \\[class org\\.gradle(?:\\.internal\\.buildevents)?\\.TaskExecutionLogger] :$taskName" +
val taskOutputRegex = ("(?:\\[LIFECYCLE] \\[class org\\.gradle(?:\\.internal\\.buildevents)?\\.TaskExecutionLogger] :$taskName|" +
"\\[org\\.gradle\\.execution\\.plan\\.DefaultPlanExecutor\\] :$taskName.*?started)" +
"([\\s\\S]+?)" +
"Finished executing task ':$taskName'").toRegex()
"(?:Finished executing task ':$taskName'|" +
"\\[org\\.gradle\\.execution\\.plan\\.DefaultPlanExecutor\\] :$taskName.*?completed)").toRegex()
return taskOutputRegex.find(output)?.run { groupValues[1] } ?: error("Cannot find output for task $taskName")
}
@@ -30,7 +30,7 @@ class BuildCacheRelocationIT : BaseGradleIT() {
override fun defaultBuildOptions(): BuildOptions =
super.defaultBuildOptions().copy(
withBuildCache = true,
androidGradlePluginVersion = "3.0.0",
androidGradlePluginVersion = "3.1.0",
androidHome = KotlinTestUtils.findAndroidSdk()
)
@@ -47,7 +47,7 @@ class BuildCacheRelocationIT : BaseGradleIT() {
val (firstProject, secondProject) = (0..1).map { id ->
workingDir = workingDirs[id]
Project(projectName, GradleVersionRequired.AtLeast("4.3"), projectDirectoryPrefix).apply {
Project(projectName, GradleVersionRequired.AtLeast("4.4"), projectDirectoryPrefix).apply {
setupWorkingDir()
initProject()
prepareLocalBuildCache(localBuildCacheDirectory)
@@ -31,6 +31,8 @@ sealed class GradleVersionRequired(val minVersion: String, val maxVersion: Strin
class AtLeast(version: String) : GradleVersionRequired(version, null)
class InRange(minVersion: String, maxVersion: String) : GradleVersionRequired(minVersion, maxVersion)
object None : GradleVersionRequired(GradleVersionRequired.OLDEST_SUPPORTED, null)
}
@@ -1,7 +1,7 @@
package org.jetbrains.kotlin.gradle
import org.jetbrains.kotlin.gradle.util.isLegacyAndroidGradleVersion
import org.jetbrains.kotlin.gradle.util.getFileByName
import org.jetbrains.kotlin.gradle.util.isLegacyAndroidGradleVersion
import org.jetbrains.kotlin.gradle.util.modify
import org.jetbrains.kotlin.test.KotlinTestUtils
import org.junit.Test
@@ -24,7 +24,7 @@ open class Kapt3AndroidIT : Kapt3BaseIT() {
get() = "2.3.0"
override val defaultGradleVersion: GradleVersionRequired
get() = GradleVersionRequired.AtLeast("4.1")
get() = GradleVersionRequired.InRange("4.1", "4.10.2")
override fun defaultBuildOptions() =
super.defaultBuildOptions().copy(
@@ -142,7 +142,7 @@ class Kotlin2JsGradlePluginIT : BaseGradleIT() {
@Test
fun testJsCustomSourceSet() {
val project = Project("kotlin2JsProjectWithCustomSourceset")
val project = Project("kotlin2JsProjectWithCustomSourceset", GradleVersionRequired.AtLeast("4.0"))
project.build("build") {
assertSuccessful()
@@ -84,7 +84,7 @@ class SimpleKotlinGradleIT : BaseGradleIT() {
@Test
fun testDestinationDirReferencedDuringEvaluation() {
Project("destinationDirReferencedDuringEvaluation").build("build") {
Project("destinationDirReferencedDuringEvaluation", GradleVersionRequired.AtLeast("4.0")).build("build") {
assertSuccessful()
assertContains("GreeterTest PASSED")
}
@@ -190,9 +190,11 @@ class VariantAwareDependenciesIT : BaseGradleIT() {
group 'com.example.oldmpp'
version '1.0'
apply plugin: 'maven-publish'
publishing {
repositories { maven { url "file://${'$'}{rootDir.absolutePath.replace('\\', '/')}/repo" } }
publications { kotlin(MavenPublication) { from(components.java) } }
afterEvaluate {
publishing {
repositories { maven { url "file://${'$'}{rootDir.absolutePath.replace('\\', '/')}/repo" } }
publications { kotlin(MavenPublication) { from(components.java) } }
}
}
}
""".trimIndent()
@@ -16,11 +16,11 @@ import kotlin.test.assertTrue
class KotlinAndroidExtensionIT : BaseGradleIT() {
override val defaultGradleVersion: GradleVersionRequired
get() = GradleVersionRequired.AtLeast("4.1")
get() = GradleVersionRequired.AtLeast("4.4")
override fun defaultBuildOptions(): BuildOptions {
return super.defaultBuildOptions().copy(
androidGradlePluginVersion = "3.0.0",
androidGradlePluginVersion = "3.1.0",
androidHome = KotlinTestUtils.findAndroidSdk()
)
}
@@ -16,11 +16,11 @@ import kotlin.test.assertTrue
class KotlinProjectIT : BaseGradleIT() {
override val defaultGradleVersion: GradleVersionRequired
get() = GradleVersionRequired.AtLeast("4.1")
get() = GradleVersionRequired.AtLeast("4.4")
override fun defaultBuildOptions(): BuildOptions {
return super.defaultBuildOptions().copy(
androidGradlePluginVersion = "3.0.0",
androidGradlePluginVersion = "3.1.0",
androidHome = KotlinTestUtils.findAndroidSdk()
)
}
@@ -1,3 +1,5 @@
import org.gradle.util.VersionNumber
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
@@ -1,3 +1,5 @@
import org.gradle.util.VersionNumber
apply plugin: 'com.android.test'
apply plugin: 'kotlin-android'
@@ -22,4 +22,4 @@ dependencies {
}
// important to test that destinationDir is configured before evaluation
test.testClassesDir = project.tasks.compileTestKotlin.destinationDir
test.testClassesDirs = files(project.tasks.compileTestKotlin.destinationDir)
@@ -19,6 +19,8 @@ dependencies {
compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
}
task exit << {
System.exit(0)
task('exit') {
doFirst {
System.exit(0)
}
}
@@ -20,7 +20,7 @@ sourceSets {
}
task integrationTest(type: Test) {
testClassesDir = sourceSets.integrationTest.output.classesDir
testClassesDirs = sourceSets.integrationTest.output.classesDirs
classpath = sourceSets.integrationTest.runtimeClasspath
}