Update Gradle with android tests setup based on feedback
- Change back 'TestVersions.AGP' to be 'object class' with constants inside, so they could be referenced inside version annotation - Fix issue when AGP minimal version could be higher than AGP max version ^KT-45747 Fixed
This commit is contained in:
committed by
teamcity
parent
a75d5ba4cf
commit
885cb5f1c8
+45
-21
@@ -22,6 +22,7 @@ import org.gradle.testkit.runner.BuildResult
|
||||
import org.gradle.util.GradleVersion
|
||||
import org.jetbrains.kotlin.gradle.testbase.*
|
||||
import org.junit.jupiter.api.DisplayName
|
||||
import java.io.File
|
||||
import kotlin.io.path.createDirectory
|
||||
|
||||
@DisplayName("Build cache relocation")
|
||||
@@ -113,15 +114,20 @@ class BuildCacheRelocationIT : KGPBaseTest() {
|
||||
)
|
||||
}
|
||||
|
||||
@JvmGradlePluginTests
|
||||
@AndroidGradlePluginTests
|
||||
@DisplayName("works with Android project")
|
||||
@GradleTestVersions(minVersion = TestVersions.Gradle.G_6_7)
|
||||
@GradleTest
|
||||
fun testRelocationAndroidProject(gradleVersion: GradleVersion) {
|
||||
@AndroidTestVersions(minVersion = TestVersions.AGP.AGP_42)
|
||||
@GradleAndroidTest
|
||||
fun testRelocationAndroidProject(
|
||||
gradleVersion: GradleVersion,
|
||||
agpVersion: String,
|
||||
jdkProvider: JdkVersions.ProvidedJdk
|
||||
) {
|
||||
val (firstProject, secondProject) = prepareTestProjects(
|
||||
"AndroidProject",
|
||||
gradleVersion,
|
||||
defaultBuildOptions.copy(androidVersion = TestVersions.AGP.AGP_42.version)
|
||||
defaultBuildOptions.copy(androidVersion = agpVersion),
|
||||
jdkProvider.location
|
||||
)
|
||||
|
||||
checkBuildCacheRelocation(
|
||||
@@ -138,15 +144,20 @@ class BuildCacheRelocationIT : KGPBaseTest() {
|
||||
)
|
||||
}
|
||||
|
||||
@JvmGradlePluginTests
|
||||
@AndroidGradlePluginTests
|
||||
@DisplayName("Test relocation for Android with dagger project")
|
||||
@GradleTestVersions(minVersion = TestVersions.Gradle.G_6_7)
|
||||
@GradleTest
|
||||
fun testRelocationAndroidDagger(gradleVersion: GradleVersion) {
|
||||
@AndroidTestVersions(minVersion = TestVersions.AGP.AGP_42)
|
||||
@GradleAndroidTest
|
||||
fun testRelocationAndroidDagger(
|
||||
gradleVersion: GradleVersion,
|
||||
agpVersion: String,
|
||||
jdkProvider: JdkVersions.ProvidedJdk
|
||||
) {
|
||||
val (firstProject, secondProject) = prepareTestProjects(
|
||||
"kapt2/android-dagger",
|
||||
gradleVersion,
|
||||
defaultBuildOptions.copy(androidVersion = TestVersions.AGP.AGP_42.version)
|
||||
defaultBuildOptions.copy(androidVersion = agpVersion),
|
||||
jdkProvider.location
|
||||
) {
|
||||
it.subProject("app").buildGradle.append("\nkapt.useBuildCache = true")
|
||||
}
|
||||
@@ -163,15 +174,21 @@ class BuildCacheRelocationIT : KGPBaseTest() {
|
||||
)
|
||||
}
|
||||
|
||||
@JvmGradlePluginTests
|
||||
@AndroidGradlePluginTests
|
||||
@DisplayName("KT-48617: Kapt ignores empty directories from Android variant")
|
||||
@GradleTestVersions(minVersion = TestVersions.Gradle.G_6_8)
|
||||
@GradleTest
|
||||
fun kaptIgnoreEmptyAndroidVariant(gradleVersion: GradleVersion) {
|
||||
@AndroidTestVersions(minVersion = TestVersions.AGP.AGP_42)
|
||||
@GradleAndroidTest
|
||||
fun kaptIgnoreEmptyAndroidVariant(
|
||||
gradleVersion: GradleVersion,
|
||||
agpVersion: String,
|
||||
jdkProvider: JdkVersions.ProvidedJdk
|
||||
) {
|
||||
val (firstProject, secondProject) = prepareTestProjects(
|
||||
"kapt2/android-dagger",
|
||||
gradleVersion,
|
||||
defaultBuildOptions.copy(androidVersion = TestVersions.AGP.AGP_42.version)
|
||||
defaultBuildOptions.copy(androidVersion = agpVersion),
|
||||
jdkProvider.location
|
||||
) {
|
||||
it.subProject("app").buildGradle.append("\nkapt.useBuildCache = true")
|
||||
}
|
||||
@@ -191,15 +208,21 @@ class BuildCacheRelocationIT : KGPBaseTest() {
|
||||
)
|
||||
}
|
||||
|
||||
@JvmGradlePluginTests
|
||||
@AndroidGradlePluginTests
|
||||
@DisplayName("KT-48849: Kotlin compile should ignore empty layout resource directories added by kotlin android extensions")
|
||||
@GradleTestVersions(minVersion = TestVersions.Gradle.G_6_8)
|
||||
@GradleTest
|
||||
fun compileIgnoreEmptyAndroidResLayoutDirs(gradleVersion: GradleVersion) {
|
||||
@AndroidTestVersions(minVersion = TestVersions.AGP.AGP_42)
|
||||
@GradleAndroidTest
|
||||
fun compileIgnoreEmptyAndroidResLayoutDirs(
|
||||
gradleVersion: GradleVersion,
|
||||
agpVersion: String,
|
||||
jdkProvider: JdkVersions.ProvidedJdk
|
||||
) {
|
||||
val (firstProject, secondProject) = prepareTestProjects(
|
||||
"AndroidExtensionsProject",
|
||||
gradleVersion,
|
||||
defaultBuildOptions.copy(androidVersion = TestVersions.AGP.AGP_42.version)
|
||||
defaultBuildOptions.copy(androidVersion = agpVersion),
|
||||
jdkProvider.location
|
||||
) {
|
||||
it.subProject("app").buildGradle.append(
|
||||
"""
|
||||
@@ -225,7 +248,7 @@ class BuildCacheRelocationIT : KGPBaseTest() {
|
||||
)
|
||||
}
|
||||
|
||||
@OtherGradlePluginTests // TODO: change to native tag
|
||||
@NativeGradlePluginTests
|
||||
@DisplayName("with native project")
|
||||
@GradleTest
|
||||
fun testRelocationNative(gradleVersion: GradleVersion) {
|
||||
@@ -291,14 +314,15 @@ class BuildCacheRelocationIT : KGPBaseTest() {
|
||||
projectName: String,
|
||||
gradleVersion: GradleVersion,
|
||||
buildOptions: BuildOptions = defaultBuildOptions,
|
||||
buildJdk: File? = null,
|
||||
additionalConfiguration: (TestProject) -> Unit = {}
|
||||
): Pair<TestProject, TestProject> {
|
||||
val firstProject = project(projectName, gradleVersion, buildOptions) {
|
||||
val firstProject = project(projectName, gradleVersion, buildOptions, buildJdk = buildJdk) {
|
||||
enableLocalBuildCache(localBuildCacheDir)
|
||||
additionalConfiguration(this)
|
||||
}
|
||||
|
||||
val secondProject = project(projectName, gradleVersion, buildOptions) {
|
||||
val secondProject = project(projectName, gradleVersion, buildOptions, buildJdk = buildJdk) {
|
||||
enableLocalBuildCache(localBuildCacheDir)
|
||||
additionalConfiguration(this)
|
||||
}
|
||||
|
||||
+12
-11
@@ -25,14 +25,20 @@ class ConfigurationAvoidanceIT : KGPBaseTest() {
|
||||
}
|
||||
}
|
||||
|
||||
@JvmGradlePluginTests // TODO: move it into Android tests tag
|
||||
@AndroidGradlePluginTests
|
||||
@DisplayName("Android unrelated tasks are not configured")
|
||||
@GradleTestVersions(minVersion = TestVersions.Gradle.G_6_7)
|
||||
@GradleTest
|
||||
fun testAndroidUnrelatedTaskNotConfigured(gradleVersion: GradleVersion) {
|
||||
@AndroidTestVersions(minVersion = TestVersions.AGP.AGP_42)
|
||||
@GradleAndroidTest
|
||||
fun testAndroidUnrelatedTaskNotConfigured(
|
||||
gradleVersion: GradleVersion,
|
||||
agpVersion: String,
|
||||
providedJdk: JdkVersions.ProvidedJdk
|
||||
) {
|
||||
project(
|
||||
"AndroidProject",
|
||||
gradleVersion
|
||||
gradleVersion,
|
||||
buildOptions = defaultBuildOptions.copy(androidVersion = agpVersion),
|
||||
buildJdk = providedJdk.location
|
||||
) {
|
||||
|
||||
listOf("Android", "Test").forEach { subproject ->
|
||||
@@ -69,12 +75,7 @@ class ConfigurationAvoidanceIT : KGPBaseTest() {
|
||||
""".trimIndent()
|
||||
)
|
||||
|
||||
build(
|
||||
"help",
|
||||
buildOptions = defaultBuildOptions.copy(
|
||||
androidVersion = TestVersions.AGP.AGP_42.version
|
||||
)
|
||||
)
|
||||
build("help")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -15,7 +15,7 @@ import org.junit.jupiter.api.DisplayName
|
||||
@JvmGradlePluginTests
|
||||
class ConfigurationCacheForAndroidIT : AbstractConfigurationCacheIT() {
|
||||
override val defaultBuildOptions = super.defaultBuildOptions.copy(
|
||||
androidVersion = AGP_42.version
|
||||
androidVersion = AGP_42
|
||||
)
|
||||
|
||||
@DisplayName("works in android plus kapt project")
|
||||
|
||||
+10
-3
@@ -284,14 +284,21 @@ class KaptIncrementalWithIsolatingApt : KaptIncrementalIT() {
|
||||
}
|
||||
}
|
||||
|
||||
@AndroidGradlePluginTests
|
||||
@DisplayName("KT-34340: origins in classpath")
|
||||
@GradleTest
|
||||
@AndroidTestVersions(minVersion = TestVersions.AGP.AGP_42)
|
||||
@GradleAndroidTest
|
||||
@DisabledOnOs(OS.WINDOWS, disabledReason = "https://youtrack.jetbrains.com/issue/KTI-405")
|
||||
fun testIsolatingWithOriginsInClasspath(gradleVersion: GradleVersion) {
|
||||
fun testIsolatingWithOriginsInClasspath(
|
||||
gradleVersion: GradleVersion,
|
||||
agpVersion: String,
|
||||
providedJdk: JdkVersions.ProvidedJdk
|
||||
) {
|
||||
project(
|
||||
"kaptIncrementalWithParceler",
|
||||
gradleVersion,
|
||||
buildOptions = defaultBuildOptions.copy(androidVersion = TestVersions.AGP.AGP_42.version)
|
||||
buildOptions = defaultBuildOptions.copy(androidVersion = agpVersion),
|
||||
buildJdk = providedJdk.location
|
||||
) {
|
||||
build("clean", ":mylibrary:assembleDebug")
|
||||
|
||||
|
||||
+15
-10
@@ -492,11 +492,21 @@ class KotlinJavaToolchainTest : KGPBaseTest() {
|
||||
}
|
||||
}
|
||||
|
||||
@AndroidGradlePluginTests
|
||||
@DisplayName("Toolchain should take into account kotlin options that are set via android extension")
|
||||
@GradleTestVersions
|
||||
@GradleTest
|
||||
internal fun kotlinOptionsAndroidAndToolchain(gradleVersion: GradleVersion) {
|
||||
project("android".fullProjectName, gradleVersion) {
|
||||
@AndroidTestVersions(minVersion = TestVersions.AGP.AGP_42)
|
||||
@GradleAndroidTest
|
||||
internal fun kotlinOptionsAndroidAndToolchain(
|
||||
gradleVersion: GradleVersion,
|
||||
agpVersion: String,
|
||||
providedJdk: JdkVersions.ProvidedJdk
|
||||
) {
|
||||
project(
|
||||
"android".fullProjectName,
|
||||
gradleVersion,
|
||||
buildOptions = defaultBuildOptions.copy(androidVersion = agpVersion),
|
||||
buildJdk = providedJdk.location
|
||||
) {
|
||||
useToolchainExtension(11)
|
||||
|
||||
//language=properties
|
||||
@@ -507,12 +517,7 @@ class KotlinJavaToolchainTest : KGPBaseTest() {
|
||||
""".trimIndent()
|
||||
)
|
||||
|
||||
build(
|
||||
"assembleDebug",
|
||||
buildOptions = defaultBuildOptions.copy(
|
||||
androidVersion = TestVersions.AGP.AGP_42.version
|
||||
)
|
||||
)
|
||||
build("assembleDebug")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+4
-4
@@ -110,7 +110,7 @@ class KotlinSpecificDependenciesIT : KGPBaseTest() {
|
||||
gradleVersion,
|
||||
buildOptions = defaultBuildOptions.copy(
|
||||
androidVersion = agpVersion,
|
||||
warningMode = if (agpVersion == TestVersions.AGP.AGP_36.version) WarningMode.Summary else defaultBuildOptions.warningMode
|
||||
warningMode = if (agpVersion == TestVersions.AGP.AGP_36) WarningMode.Summary else defaultBuildOptions.warningMode
|
||||
),
|
||||
buildJdk = jdkVersion.location
|
||||
) {
|
||||
@@ -132,7 +132,7 @@ class KotlinSpecificDependenciesIT : KGPBaseTest() {
|
||||
gradleVersion,
|
||||
buildOptions = defaultBuildOptions.copy(
|
||||
androidVersion = agpVersion,
|
||||
warningMode = if (agpVersion == TestVersions.AGP.AGP_36.version) WarningMode.Summary else defaultBuildOptions.warningMode
|
||||
warningMode = if (agpVersion == TestVersions.AGP.AGP_36) WarningMode.Summary else defaultBuildOptions.warningMode
|
||||
),
|
||||
buildJdk = jdkVersion.location
|
||||
) {
|
||||
@@ -298,7 +298,7 @@ class KotlinSpecificDependenciesIT : KGPBaseTest() {
|
||||
gradleVersion,
|
||||
buildOptions = defaultBuildOptions.copy(
|
||||
androidVersion = agpVersion,
|
||||
warningMode = if (agpVersion == TestVersions.AGP.AGP_36.version) WarningMode.Summary else defaultBuildOptions.warningMode
|
||||
warningMode = if (agpVersion == TestVersions.AGP.AGP_36) WarningMode.Summary else defaultBuildOptions.warningMode
|
||||
),
|
||||
buildJdk = jdkVersion.location
|
||||
) {
|
||||
@@ -325,7 +325,7 @@ class KotlinSpecificDependenciesIT : KGPBaseTest() {
|
||||
gradleVersion,
|
||||
buildOptions = defaultBuildOptions.copy(
|
||||
androidVersion = agpVersion,
|
||||
warningMode = if (agpVersion == TestVersions.AGP.AGP_36.version) WarningMode.Summary else defaultBuildOptions.warningMode
|
||||
warningMode = if (agpVersion == TestVersions.AGP.AGP_36) WarningMode.Summary else defaultBuildOptions.warningMode
|
||||
),
|
||||
buildJdk = jdkVersion.location
|
||||
) {
|
||||
|
||||
+15
-9
@@ -146,10 +146,21 @@ class SubpuginsIT : KGPBaseTest() {
|
||||
}
|
||||
}
|
||||
|
||||
@AndroidGradlePluginTests
|
||||
@DisplayName("KT-39809: kapt subplugin legacy loading does not fail the build")
|
||||
@GradleTest
|
||||
fun testKotlinVersionDowngradeInSupbrojectKt39809(gradleVersion: GradleVersion) {
|
||||
project("kapt2/android-dagger", gradleVersion) {
|
||||
@AndroidTestVersions(minVersion = TestVersions.AGP.AGP_42)
|
||||
@GradleAndroidTest
|
||||
fun testKotlinVersionDowngradeInSupbrojectKt39809(
|
||||
gradleVersion: GradleVersion,
|
||||
agpVersion: String,
|
||||
providedJdk: JdkVersions.ProvidedJdk
|
||||
) {
|
||||
project(
|
||||
"kapt2/android-dagger",
|
||||
gradleVersion,
|
||||
buildOptions = defaultBuildOptions.copy(androidVersion = agpVersion),
|
||||
buildJdk = providedJdk.location
|
||||
) {
|
||||
subProject("app").buildGradle.modify {
|
||||
"""
|
||||
buildscript {
|
||||
@@ -165,12 +176,7 @@ class SubpuginsIT : KGPBaseTest() {
|
||||
""".trimIndent()
|
||||
}
|
||||
|
||||
build(
|
||||
":app:compileDebugKotlin",
|
||||
buildOptions = defaultBuildOptions.copy(
|
||||
androidVersion = TestVersions.AGP.AGP_42.version
|
||||
)
|
||||
)
|
||||
build(":app:compileDebugKotlin")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -18,7 +18,7 @@ import kotlin.test.assertTrue
|
||||
@OtherGradlePluginTests
|
||||
class KotlinAndroidExtensionIT : KGPBaseTest() {
|
||||
override val defaultBuildOptions = super.defaultBuildOptions.copy(
|
||||
androidVersion = TestVersions.AGP.AGP_36.version,
|
||||
androidVersion = TestVersions.AGP.AGP_36,
|
||||
warningMode = WarningMode.Summary
|
||||
)
|
||||
|
||||
|
||||
+1
-1
@@ -18,7 +18,7 @@ import kotlin.test.assertTrue
|
||||
@OtherGradlePluginTests
|
||||
class KotlinProjectIT : KGPBaseTest() {
|
||||
override val defaultBuildOptions = super.defaultBuildOptions.copy(
|
||||
androidVersion = TestVersions.AGP.AGP_36.version,
|
||||
androidVersion = TestVersions.AGP.AGP_36,
|
||||
)
|
||||
|
||||
@DisplayName("Valid model is available in Kotlin only project")
|
||||
|
||||
+21
-13
@@ -33,24 +33,32 @@ interface TestVersions {
|
||||
get() = System.getProperty("kotlinVersion") ?: error("Required to specify kotlinVersion system property for tests")
|
||||
}
|
||||
|
||||
enum class AGP(
|
||||
object AGP {
|
||||
const val AGP_36 = "3.6.4"
|
||||
const val AGP_40 = "4.0.2"
|
||||
const val AGP_41 = "4.1.3"
|
||||
const val AGP_42 = "4.2.2"
|
||||
const val AGP_70 = "7.0.4"
|
||||
const val AGP_71 = "7.1.3"
|
||||
const val AGP_72 = "7.2.1"
|
||||
|
||||
const val MIN_SUPPORTED = AGP_36 // KotlinAndroidPlugin.MINIMAL_SUPPORTED_AGP_VERSION
|
||||
const val MAX_SUPPORTED = AGP_70 // Update once Gradle MAX_SUPPORTED version will be bumped to 7.2+
|
||||
}
|
||||
|
||||
enum class AgpCompatibilityMatrix(
|
||||
val version: String,
|
||||
val minSupportedGradleVersion: GradleVersion,
|
||||
val maxSupportedGradleVersion: GradleVersion,
|
||||
val requiredJdkVersion: JavaVersion
|
||||
) {
|
||||
AGP_36("3.6.4", GradleVersion.version(Gradle.MIN_SUPPORTED), GradleVersion.version(Gradle.G_6_9), JavaVersion.VERSION_1_8),
|
||||
AGP_40("4.0.2", GradleVersion.version(Gradle.MIN_SUPPORTED), GradleVersion.version(Gradle.G_6_9), JavaVersion.VERSION_1_8),
|
||||
AGP_41("4.1.3", GradleVersion.version(Gradle.MIN_SUPPORTED), GradleVersion.version(Gradle.G_6_9), JavaVersion.VERSION_1_8),
|
||||
AGP_42("4.2.2", GradleVersion.version(Gradle.MIN_SUPPORTED), GradleVersion.version(Gradle.G_6_9), JavaVersion.VERSION_1_8),
|
||||
AGP_70("7.0.4", GradleVersion.version(Gradle.G_7_0), GradleVersion.version(Gradle.G_7_4), JavaVersion.VERSION_11),
|
||||
AGP_71("7.1.3", GradleVersion.version(Gradle.G_7_2), GradleVersion.version(Gradle.G_7_4), JavaVersion.VERSION_11),
|
||||
AGP_72("7.2.1", GradleVersion.version(Gradle.G_7_3), GradleVersion.version(Gradle.G_7_4), JavaVersion.VERSION_11),
|
||||
AGP_36(AGP.AGP_36, GradleVersion.version(Gradle.MIN_SUPPORTED), GradleVersion.version(Gradle.G_6_9), JavaVersion.VERSION_1_8),
|
||||
AGP_40(AGP.AGP_40, GradleVersion.version(Gradle.MIN_SUPPORTED), GradleVersion.version(Gradle.G_6_9), JavaVersion.VERSION_1_8),
|
||||
AGP_41(AGP.AGP_41, GradleVersion.version(Gradle.MIN_SUPPORTED), GradleVersion.version(Gradle.G_6_9), JavaVersion.VERSION_1_8),
|
||||
AGP_42(AGP.AGP_42, GradleVersion.version(Gradle.MIN_SUPPORTED), GradleVersion.version(Gradle.G_6_9), JavaVersion.VERSION_1_8),
|
||||
AGP_70(AGP.AGP_70, GradleVersion.version(Gradle.G_7_0), GradleVersion.version(Gradle.G_7_4), JavaVersion.VERSION_11),
|
||||
AGP_71(AGP.AGP_71, GradleVersion.version(Gradle.G_7_2), GradleVersion.version(Gradle.G_7_4), JavaVersion.VERSION_11),
|
||||
AGP_72(AGP.AGP_72, GradleVersion.version(Gradle.G_7_3), GradleVersion.version(Gradle.G_7_4), JavaVersion.VERSION_11),
|
||||
;
|
||||
|
||||
companion object {
|
||||
const val MIN_SUPPORTED = "3.6.4" // AGP_36 - KotlinAndroidPlugin.MINIMAL_SUPPORTED_AGP_VERSION
|
||||
const val MAX_SUPPORTED = "7.0.4" // AGP_70 - Update once Gradle MAX_SUPPORTED version will be bumped to 7.2+
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+3
-3
@@ -156,17 +156,17 @@ class GradleAndAgpArgumentsProvider : GradleArgumentsProvider() {
|
||||
context: ExtensionContext
|
||||
): Stream<out Arguments> {
|
||||
val agpVersionsAnnotation = findAnnotation<AndroidTestVersions>(context)
|
||||
val agpVersions = setOf(
|
||||
val agpVersions = setOfNotNull(
|
||||
agpVersionsAnnotation.minVersion,
|
||||
*agpVersionsAnnotation.additionalVersions,
|
||||
agpVersionsAnnotation.maxVersion
|
||||
if (agpVersionsAnnotation.minVersion < agpVersionsAnnotation.maxVersion) agpVersionsAnnotation.maxVersion else null
|
||||
)
|
||||
|
||||
val gradleVersions = super.provideArguments(context).map { it.get().first() as GradleVersion }.toList()
|
||||
|
||||
return agpVersions
|
||||
.flatMap { version ->
|
||||
val agpVersion = TestVersions.AGP.values().find { it.version == version }
|
||||
val agpVersion = TestVersions.AgpCompatibilityMatrix.values().find { it.version == version }
|
||||
?: throw IllegalArgumentException("AGP version $version is not defined in TestVersions.AGP!")
|
||||
|
||||
val providedJdk = JdkVersions.ProvidedJdk(
|
||||
|
||||
Reference in New Issue
Block a user