Add @GradleAndroidTest annotation
This allows to run parameterized tests against combination of different Gradle and Android Gradle plugin versions. By default, test is provided with minimal supported Gradle + AGP version and maximum supported Gradle + AGP version. Migrate AGP versions to enum with compatibility fields. ^KT-45747 In Progress
This commit is contained in:
@@ -10,6 +10,8 @@ To run all tests for all Gradle plugins use `check` task.
|
|||||||
More fine-grained test tasks exist covering different parts of Gradle plugins:
|
More fine-grained test tasks exist covering different parts of Gradle plugins:
|
||||||
- `kgpJvmTests` - runs all tests for Kotlin Gradle Plugin/Jvm platform (parallel execution)
|
- `kgpJvmTests` - runs all tests for Kotlin Gradle Plugin/Jvm platform (parallel execution)
|
||||||
- `kgpJsTests` - runs all tests for Kotlin Gradle Plugin/Js platform (parallel execution)
|
- `kgpJsTests` - runs all tests for Kotlin Gradle Plugin/Js platform (parallel execution)
|
||||||
|
- `kgpAndroidTests` - runs all tests for Kotlin Gradle Plugin/Android platform (parallel execution)
|
||||||
|
- `kgpMppTests` - run all tests for Kotlin Gradle Multiplatform plugin (parallel execution)
|
||||||
- `kgpDaemonTests` - runs all tests for Gradle and Kotlin daemons (sequential execution)
|
- `kgpDaemonTests` - runs all tests for Gradle and Kotlin daemons (sequential execution)
|
||||||
- `kgpOtherTests` - run all tests for support Gradle plugins, such as kapt, allopen, etc (parallel execution)
|
- `kgpOtherTests` - run all tests for support Gradle plugins, such as kapt, allopen, etc (parallel execution)
|
||||||
- `kgpAllParallelTests` - run all tests for all platforms except daemons tests (parallel execution)
|
- `kgpAllParallelTests` - run all tests for all platforms except daemons tests (parallel execution)
|
||||||
@@ -103,6 +105,27 @@ fun someTest(
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
- Whenever Android Gradle plugin different versions should be checked in the tests - it is possible to use `@GradleAndroidTest` annotation
|
||||||
|
instead of `@GradleTest`. Test will receive additionally to Gradle version AGP version and required JDK version:
|
||||||
|
```kotlin
|
||||||
|
@AndroidTestVersions(additionalVersions = [TestVersions.AGP.AGP_42])
|
||||||
|
@GradleAndroidTest
|
||||||
|
fun someTest(
|
||||||
|
gradleVersion: GradleVersion,
|
||||||
|
agpVersion: String,
|
||||||
|
jdkVersion: JdkVersions.ProvidedJdk
|
||||||
|
) {
|
||||||
|
project(
|
||||||
|
"simpleAndroid",
|
||||||
|
gradleVersion,
|
||||||
|
buildOptions = defaultBuildOptions.copy(androidVersion = agpVersion),
|
||||||
|
buildJdk = jdkVersion.location
|
||||||
|
) {
|
||||||
|
build("assembleDebug")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
- If you want to copy current state of the test project and play with it separately - you could use `makeSnapshotTo(destinationPath)` function.
|
- If you want to copy current state of the test project and play with it separately - you could use `makeSnapshotTo(destinationPath)` function.
|
||||||
|
|
||||||
##### Common test fixes
|
##### Common test fixes
|
||||||
|
|||||||
+25
@@ -0,0 +1,25 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* 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.testbase;
|
||||||
|
|
||||||
|
import org.junit.jupiter.params.ParameterizedTest;
|
||||||
|
import org.junit.jupiter.params.provider.ArgumentsSource;
|
||||||
|
|
||||||
|
import java.lang.annotation.ElementType;
|
||||||
|
import java.lang.annotation.Retention;
|
||||||
|
import java.lang.annotation.RetentionPolicy;
|
||||||
|
import java.lang.annotation.Target;
|
||||||
|
|
||||||
|
// Has to be java annotation
|
||||||
|
// Workaround for https://youtrack.jetbrains.com/issue/IDEA-265284
|
||||||
|
@Target({ElementType.METHOD})
|
||||||
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
|
@GradleTestVersions
|
||||||
|
@AndroidTestVersions
|
||||||
|
@ParameterizedTest(name = "AGP {1} with {0}: {displayName}")
|
||||||
|
@ArgumentsSource(GradleAndAgpArgumentsProvider.class)
|
||||||
|
public @interface GradleAndroidTest {
|
||||||
|
}
|
||||||
+4
-4
@@ -121,7 +121,7 @@ class BuildCacheRelocationIT : KGPBaseTest() {
|
|||||||
val (firstProject, secondProject) = prepareTestProjects(
|
val (firstProject, secondProject) = prepareTestProjects(
|
||||||
"AndroidProject",
|
"AndroidProject",
|
||||||
gradleVersion,
|
gradleVersion,
|
||||||
defaultBuildOptions.copy(androidVersion = TestVersions.AGP.AGP_42)
|
defaultBuildOptions.copy(androidVersion = TestVersions.AGP.AGP_42.version)
|
||||||
)
|
)
|
||||||
|
|
||||||
checkBuildCacheRelocation(
|
checkBuildCacheRelocation(
|
||||||
@@ -146,7 +146,7 @@ class BuildCacheRelocationIT : KGPBaseTest() {
|
|||||||
val (firstProject, secondProject) = prepareTestProjects(
|
val (firstProject, secondProject) = prepareTestProjects(
|
||||||
"kapt2/android-dagger",
|
"kapt2/android-dagger",
|
||||||
gradleVersion,
|
gradleVersion,
|
||||||
defaultBuildOptions.copy(androidVersion = TestVersions.AGP.AGP_42)
|
defaultBuildOptions.copy(androidVersion = TestVersions.AGP.AGP_42.version)
|
||||||
) {
|
) {
|
||||||
it.subProject("app").buildGradle.append("\nkapt.useBuildCache = true")
|
it.subProject("app").buildGradle.append("\nkapt.useBuildCache = true")
|
||||||
}
|
}
|
||||||
@@ -171,7 +171,7 @@ class BuildCacheRelocationIT : KGPBaseTest() {
|
|||||||
val (firstProject, secondProject) = prepareTestProjects(
|
val (firstProject, secondProject) = prepareTestProjects(
|
||||||
"kapt2/android-dagger",
|
"kapt2/android-dagger",
|
||||||
gradleVersion,
|
gradleVersion,
|
||||||
defaultBuildOptions.copy(androidVersion = TestVersions.AGP.AGP_42)
|
defaultBuildOptions.copy(androidVersion = TestVersions.AGP.AGP_42.version)
|
||||||
) {
|
) {
|
||||||
it.subProject("app").buildGradle.append("\nkapt.useBuildCache = true")
|
it.subProject("app").buildGradle.append("\nkapt.useBuildCache = true")
|
||||||
}
|
}
|
||||||
@@ -199,7 +199,7 @@ class BuildCacheRelocationIT : KGPBaseTest() {
|
|||||||
val (firstProject, secondProject) = prepareTestProjects(
|
val (firstProject, secondProject) = prepareTestProjects(
|
||||||
"AndroidExtensionsProject",
|
"AndroidExtensionsProject",
|
||||||
gradleVersion,
|
gradleVersion,
|
||||||
defaultBuildOptions.copy(androidVersion = TestVersions.AGP.AGP_42)
|
defaultBuildOptions.copy(androidVersion = TestVersions.AGP.AGP_42.version)
|
||||||
) {
|
) {
|
||||||
it.subProject("app").buildGradle.append(
|
it.subProject("app").buildGradle.append(
|
||||||
"""
|
"""
|
||||||
|
|||||||
+1
-1
@@ -72,7 +72,7 @@ class ConfigurationAvoidanceIT : KGPBaseTest() {
|
|||||||
build(
|
build(
|
||||||
"help",
|
"help",
|
||||||
buildOptions = defaultBuildOptions.copy(
|
buildOptions = defaultBuildOptions.copy(
|
||||||
androidVersion = TestVersions.AGP.AGP_42
|
androidVersion = TestVersions.AGP.AGP_42.version
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -15,7 +15,7 @@ import org.junit.jupiter.api.DisplayName
|
|||||||
@JvmGradlePluginTests
|
@JvmGradlePluginTests
|
||||||
class ConfigurationCacheForAndroidIT : AbstractConfigurationCacheIT() {
|
class ConfigurationCacheForAndroidIT : AbstractConfigurationCacheIT() {
|
||||||
override val defaultBuildOptions = super.defaultBuildOptions.copy(
|
override val defaultBuildOptions = super.defaultBuildOptions.copy(
|
||||||
androidVersion = AGP_42
|
androidVersion = AGP_42.version
|
||||||
)
|
)
|
||||||
|
|
||||||
@DisplayName("works in android plus kapt project")
|
@DisplayName("works in android plus kapt project")
|
||||||
|
|||||||
+1
-1
@@ -292,7 +292,7 @@ class KaptIncrementalWithIsolatingApt : KaptIncrementalIT() {
|
|||||||
project(
|
project(
|
||||||
"kaptIncrementalWithParceler",
|
"kaptIncrementalWithParceler",
|
||||||
gradleVersion,
|
gradleVersion,
|
||||||
buildOptions = defaultBuildOptions.copy(androidVersion = TestVersions.AGP.AGP_42)
|
buildOptions = defaultBuildOptions.copy(androidVersion = TestVersions.AGP.AGP_42.version)
|
||||||
) {
|
) {
|
||||||
build("clean", ":mylibrary:assembleDebug")
|
build("clean", ":mylibrary:assembleDebug")
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -510,7 +510,7 @@ class KotlinJavaToolchainTest : KGPBaseTest() {
|
|||||||
build(
|
build(
|
||||||
"assembleDebug",
|
"assembleDebug",
|
||||||
buildOptions = defaultBuildOptions.copy(
|
buildOptions = defaultBuildOptions.copy(
|
||||||
androidVersion = TestVersions.AGP.AGP_42
|
androidVersion = TestVersions.AGP.AGP_42.version
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
+48
-16
@@ -97,28 +97,44 @@ class KotlinSpecificDependenciesIT : KGPBaseTest() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@JvmGradlePluginTests
|
@AndroidGradlePluginTests
|
||||||
@DisplayName("Android: kotlin-stdlib dependency is added by default")
|
@DisplayName("Android: kotlin-stdlib dependency is added by default")
|
||||||
@GradleTest
|
@GradleAndroidTest
|
||||||
fun testStdlibDefaultAndroid(gradleVersion: GradleVersion) {
|
fun testStdlibDefaultAndroid(
|
||||||
|
gradleVersion: GradleVersion,
|
||||||
|
agpVersion: String,
|
||||||
|
jdkVersion: JdkVersions.ProvidedJdk
|
||||||
|
) {
|
||||||
project(
|
project(
|
||||||
"AndroidLibraryKotlinProject",
|
"AndroidLibraryKotlinProject",
|
||||||
gradleVersion,
|
gradleVersion,
|
||||||
buildOptions = defaultBuildOptions.copy(androidVersion = TestVersions.AGP.AGP_42)
|
buildOptions = defaultBuildOptions.copy(
|
||||||
|
androidVersion = agpVersion,
|
||||||
|
warningMode = if (agpVersion == TestVersions.AGP.AGP_36.version) WarningMode.Summary else defaultBuildOptions.warningMode
|
||||||
|
),
|
||||||
|
buildJdk = jdkVersion.location
|
||||||
) {
|
) {
|
||||||
removeDependencies(buildGradle)
|
removeDependencies(buildGradle)
|
||||||
checkTaskCompileClasspath("compileDebugKotlin", listOf("kotlin-stdlib" /*any of them*/))
|
checkTaskCompileClasspath("compileDebugKotlin", listOf("kotlin-stdlib" /*any of them*/))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@JvmGradlePluginTests
|
@AndroidGradlePluginTests
|
||||||
@DisplayName("Android: kotlin-stdlib dependency is not added when disabled via properties")
|
@DisplayName("Android: kotlin-stdlib dependency is not added when disabled via properties")
|
||||||
@GradleTest
|
@GradleAndroidTest
|
||||||
fun testStdlibDisabledAndroid(gradleVersion: GradleVersion) {
|
fun testStdlibDisabledAndroid(
|
||||||
|
gradleVersion: GradleVersion,
|
||||||
|
agpVersion: String,
|
||||||
|
jdkVersion: JdkVersions.ProvidedJdk
|
||||||
|
) {
|
||||||
project(
|
project(
|
||||||
"AndroidLibraryKotlinProject",
|
"AndroidLibraryKotlinProject",
|
||||||
gradleVersion,
|
gradleVersion,
|
||||||
buildOptions = defaultBuildOptions.copy(androidVersion = TestVersions.AGP.AGP_42)
|
buildOptions = defaultBuildOptions.copy(
|
||||||
|
androidVersion = agpVersion,
|
||||||
|
warningMode = if (agpVersion == TestVersions.AGP.AGP_36.version) WarningMode.Summary else defaultBuildOptions.warningMode
|
||||||
|
),
|
||||||
|
buildJdk = jdkVersion.location
|
||||||
) {
|
) {
|
||||||
removeDependencies(buildGradle)
|
removeDependencies(buildGradle)
|
||||||
gradleProperties.appendText(
|
gradleProperties.appendText(
|
||||||
@@ -221,14 +237,22 @@ class KotlinSpecificDependenciesIT : KGPBaseTest() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@JvmGradlePluginTests
|
@AndroidGradlePluginTests
|
||||||
@DisplayName("Android: Kotlin test single dependency in unit tests")
|
@DisplayName("Android: Kotlin test single dependency in unit tests")
|
||||||
@GradleTest
|
@GradleAndroidTest
|
||||||
fun kotlinTestSingleDependencyAndroidUnitTests(gradleVersion: GradleVersion) {
|
fun kotlinTestSingleDependencyAndroidUnitTests(
|
||||||
|
gradleVersion: GradleVersion,
|
||||||
|
agpVersion: String,
|
||||||
|
jdkVersion: JdkVersions.ProvidedJdk
|
||||||
|
) {
|
||||||
project(
|
project(
|
||||||
"AndroidLibraryKotlinProject",
|
"AndroidLibraryKotlinProject",
|
||||||
gradleVersion,
|
gradleVersion,
|
||||||
buildOptions = defaultBuildOptions.copy(androidVersion = TestVersions.AGP.AGP_42)
|
buildOptions = defaultBuildOptions.copy(
|
||||||
|
androidVersion = agpVersion,
|
||||||
|
warningMode = if (agpVersion == TestVersions.AGP.AGP_36.version) WarningMode.Summary else defaultBuildOptions.warningMode
|
||||||
|
),
|
||||||
|
buildJdk = jdkVersion.location
|
||||||
) {
|
) {
|
||||||
assertKotlinTestDependency(
|
assertKotlinTestDependency(
|
||||||
listOf("testImplementation"),
|
listOf("testImplementation"),
|
||||||
@@ -240,14 +264,22 @@ class KotlinSpecificDependenciesIT : KGPBaseTest() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@JvmGradlePluginTests
|
@AndroidGradlePluginTests
|
||||||
@DisplayName("Android: Kotlin test single dependency in ui tests")
|
@DisplayName("Android: Kotlin test single dependency in ui tests")
|
||||||
@GradleTest
|
@GradleAndroidTest
|
||||||
fun kotlinTestSingleDependencyAndroidUiTests(gradleVersion: GradleVersion) {
|
fun kotlinTestSingleDependencyAndroidUiTests(
|
||||||
|
gradleVersion: GradleVersion,
|
||||||
|
agpVersion: String,
|
||||||
|
jdkVersion: JdkVersions.ProvidedJdk
|
||||||
|
) {
|
||||||
project(
|
project(
|
||||||
"AndroidLibraryKotlinProject",
|
"AndroidLibraryKotlinProject",
|
||||||
gradleVersion,
|
gradleVersion,
|
||||||
buildOptions = defaultBuildOptions.copy(androidVersion = TestVersions.AGP.AGP_42)
|
buildOptions = defaultBuildOptions.copy(
|
||||||
|
androidVersion = agpVersion,
|
||||||
|
warningMode = if (agpVersion == TestVersions.AGP.AGP_36.version) WarningMode.Summary else defaultBuildOptions.warningMode
|
||||||
|
),
|
||||||
|
buildJdk = jdkVersion.location
|
||||||
) {
|
) {
|
||||||
assertKotlinTestDependency(
|
assertKotlinTestDependency(
|
||||||
listOf("androidTestImplementation"),
|
listOf("androidTestImplementation"),
|
||||||
|
|||||||
+1
-1
@@ -168,7 +168,7 @@ class SubpuginsIT : KGPBaseTest() {
|
|||||||
build(
|
build(
|
||||||
":app:compileDebugKotlin",
|
":app:compileDebugKotlin",
|
||||||
buildOptions = defaultBuildOptions.copy(
|
buildOptions = defaultBuildOptions.copy(
|
||||||
androidVersion = TestVersions.AGP.AGP_42
|
androidVersion = TestVersions.AGP.AGP_42.version
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -18,7 +18,7 @@ import kotlin.test.assertTrue
|
|||||||
@OtherGradlePluginTests
|
@OtherGradlePluginTests
|
||||||
class KotlinAndroidExtensionIT : KGPBaseTest() {
|
class KotlinAndroidExtensionIT : KGPBaseTest() {
|
||||||
override val defaultBuildOptions = super.defaultBuildOptions.copy(
|
override val defaultBuildOptions = super.defaultBuildOptions.copy(
|
||||||
androidVersion = TestVersions.AGP.AGP_34,
|
androidVersion = TestVersions.AGP.AGP_34.version,
|
||||||
warningMode = WarningMode.Summary
|
warningMode = WarningMode.Summary
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -18,7 +18,7 @@ import kotlin.test.assertTrue
|
|||||||
@OtherGradlePluginTests
|
@OtherGradlePluginTests
|
||||||
class KotlinProjectIT : KGPBaseTest() {
|
class KotlinProjectIT : KGPBaseTest() {
|
||||||
override val defaultBuildOptions = super.defaultBuildOptions.copy(
|
override val defaultBuildOptions = super.defaultBuildOptions.copy(
|
||||||
androidVersion = TestVersions.AGP.AGP_34,
|
androidVersion = TestVersions.AGP.AGP_34.version,
|
||||||
)
|
)
|
||||||
|
|
||||||
@DisplayName("Valid model is available in Kotlin only project")
|
@DisplayName("Valid model is available in Kotlin only project")
|
||||||
|
|||||||
+22
-6
@@ -5,6 +5,8 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.gradle.testbase
|
package org.jetbrains.kotlin.gradle.testbase
|
||||||
|
|
||||||
|
import org.gradle.api.JavaVersion
|
||||||
|
import org.gradle.util.GradleVersion
|
||||||
import org.jetbrains.kotlin.gradle.utils.minSupportedGradleVersion
|
import org.jetbrains.kotlin.gradle.utils.minSupportedGradleVersion
|
||||||
|
|
||||||
interface TestVersions {
|
interface TestVersions {
|
||||||
@@ -29,11 +31,25 @@ interface TestVersions {
|
|||||||
get() = System.getProperty("kotlinVersion") ?: error("Required to specify kotlinVersion system property for tests")
|
get() = System.getProperty("kotlinVersion") ?: error("Required to specify kotlinVersion system property for tests")
|
||||||
}
|
}
|
||||||
|
|
||||||
object AGP {
|
enum class AGP(
|
||||||
const val AGP_34 = "3.4.3"
|
val version: String,
|
||||||
const val AGP_36 = "3.6.4"
|
val minSupportedGradleVersion: GradleVersion,
|
||||||
const val AGP_41 = "4.1.3"
|
val maxSupportedGradleVersion: GradleVersion,
|
||||||
const val AGP_42 = "4.2.2"
|
val requiredJdkVersion: JavaVersion
|
||||||
const val AGP_70 = "7.0.2"
|
) {
|
||||||
|
AGP_34("3.4.0", GradleVersion.version(Gradle.MIN_SUPPORTED), GradleVersion.version(Gradle.G_6_9), JavaVersion.VERSION_1_8),
|
||||||
|
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),
|
||||||
|
;
|
||||||
|
|
||||||
|
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+
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+56
@@ -139,3 +139,59 @@ class GradleAndJdkArgumentsProvider : GradleArgumentsProvider() {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Target(AnnotationTarget.FUNCTION, AnnotationTarget.ANNOTATION_CLASS, AnnotationTarget.CLASS)
|
||||||
|
@Retention(AnnotationRetention.RUNTIME)
|
||||||
|
annotation class AndroidTestVersions(
|
||||||
|
val minVersion: String = TestVersions.AGP.MIN_SUPPORTED,
|
||||||
|
val maxVersion: String = TestVersions.AGP.MAX_SUPPORTED,
|
||||||
|
val additionalVersions: Array<String> = []
|
||||||
|
)
|
||||||
|
|
||||||
|
class GradleAndAgpArgumentsProvider : GradleArgumentsProvider() {
|
||||||
|
override fun provideArguments(
|
||||||
|
context: ExtensionContext
|
||||||
|
): Stream<out Arguments> {
|
||||||
|
val agpVersionsAnnotation = findAnnotation<AndroidTestVersions>(context)
|
||||||
|
val agpVersions = setOf(
|
||||||
|
agpVersionsAnnotation.minVersion,
|
||||||
|
*agpVersionsAnnotation.additionalVersions,
|
||||||
|
agpVersionsAnnotation.maxVersion
|
||||||
|
)
|
||||||
|
|
||||||
|
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 }
|
||||||
|
?: throw IllegalArgumentException("AGP version $version is not defined in TestVersions.AGP!")
|
||||||
|
|
||||||
|
val providedJdk = JdkVersions.ProvidedJdk(
|
||||||
|
agpVersion.requiredJdkVersion,
|
||||||
|
File(System.getProperty("jdk${agpVersion.requiredJdkVersion.majorVersion}Home"))
|
||||||
|
)
|
||||||
|
|
||||||
|
gradleVersions
|
||||||
|
.filter { it in agpVersion.minSupportedGradleVersion..agpVersion.maxSupportedGradleVersion }
|
||||||
|
.map {
|
||||||
|
AgpTestArguments(it, agpVersion.version, providedJdk)
|
||||||
|
}
|
||||||
|
.also {
|
||||||
|
require(it.isNotEmpty()) {
|
||||||
|
"Could not find suitable Gradle version for AGP $agpVersion version!"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.asSequence()
|
||||||
|
.map {
|
||||||
|
Arguments.of(it.gradleVersion, it.agpVersion, it.jdkVersion)
|
||||||
|
}
|
||||||
|
.asStream()
|
||||||
|
}
|
||||||
|
|
||||||
|
data class AgpTestArguments(
|
||||||
|
val gradleVersion: GradleVersion,
|
||||||
|
val agpVersion: String,
|
||||||
|
val jdkVersion: JdkVersions.ProvidedJdk
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user