Skip to content

Commit f7150fe

Browse files
antohabySpace Team
authored and
Space Team
committed
[Gradle, Test] Add GradleTestExtraStringArguments
1 parent 87fbb46 commit f7150fe

File tree

1 file changed

+37
-4
lines changed
  • libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase

1 file changed

+37
-4
lines changed

libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/argumentProviders.kt

Lines changed: 37 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,6 @@ package org.jetbrains.kotlin.gradle.testbase
77

88
import org.gradle.api.JavaVersion
99
import org.gradle.util.GradleVersion
10-
import org.jetbrains.kotlin.gradle.utils.toSetOrEmpty
11-
import org.jetbrains.kotlin.tooling.core.withClosureSequence
1210
import org.junit.jupiter.api.extension.*
1311
import org.junit.jupiter.params.ParameterizedTest
1412
import org.junit.jupiter.params.provider.Arguments
@@ -31,6 +29,30 @@ annotation class GradleTestVersions(
3129
val additionalVersions: Array<String> = [],
3230
)
3331

32+
/**
33+
* Adds another dimension of arguments alongside Gradle Version
34+
* Example:
35+
*
36+
* ```
37+
* class SomeGradleTest {
38+
* @GradleTest
39+
* @GradleTestExtraStringArguments("a", "b")
40+
* fun testMethod(gradleVersion: GradleVersion, extra: String) {
41+
* // JUnit will invoke testMethod as follows
42+
* // testMethod(GradleVersion.MIN, "a")
43+
* // testMethod(GradleVersion.MIN, "b")
44+
* // testMethod(GradleVersion.MAX, "a")
45+
* // testMethod(GradleVersion.MAX, "b")
46+
* }
47+
* }
48+
* ```
49+
*/
50+
@Target(AnnotationTarget.FUNCTION, AnnotationTarget.ANNOTATION_CLASS, AnnotationTarget.CLASS)
51+
@Retention(AnnotationRetention.RUNTIME)
52+
annotation class GradleTestExtraStringArguments(
53+
vararg val values: String
54+
)
55+
3456
/**
3557
* Parameterized test against different Gradle versions.
3658
* Test should accept [GradleVersion] as a parameter.
@@ -100,10 +122,16 @@ open class GradleArgumentsProvider : ArgumentsProvider {
100122
val versionFilter = context.getConfigurationParameter("gradle.integration.tests.gradle.version.filter")
101123
.map { GradleVersion.version(it) }
102124

125+
val extraArguments = extraArguments(context) ?: emptyArray()
126+
103127
return gradleVersions
104128
.asSequence()
105129
.filter { gradleVersion -> versionFilter.map { gradleVersion == it }.orElse(true) }
106-
.map { Arguments.of(it) }
130+
.flatMap { gradleVersion ->
131+
if (extraArguments.isNotEmpty()) {
132+
extraArguments.asSequence().map { extraArgument -> Arguments.of(gradleVersion, extraArgument) }
133+
} else sequenceOf(Arguments.of(gradleVersion))
134+
}
107135
.asStream()
108136
}
109137

@@ -126,6 +154,11 @@ open class GradleArgumentsProvider : ArgumentsProvider {
126154

127155
return setOf(minGradleVersion, *additionalGradleVersions.toTypedArray(), maxGradleVersion)
128156
}
157+
158+
protected fun extraArguments(context: ExtensionContext): Array<out String>? {
159+
val extraArgumentsAnnotation = findAnnotationOrNull<GradleTestExtraStringArguments>(context)
160+
return extraArgumentsAnnotation?.values
161+
}
129162
}
130163

131164
@Target(AnnotationTarget.FUNCTION, AnnotationTarget.ANNOTATION_CLASS, AnnotationTarget.CLASS)
@@ -383,4 +416,4 @@ class DisabledIfNoArgumentsProvided : ExecutionCondition {
383416
throw ex
384417
}
385418
}
386-
}
419+
}

0 commit comments

Comments
 (0)