@@ -7,8 +7,6 @@ package org.jetbrains.kotlin.gradle.testbase
7
7
8
8
import org.gradle.api.JavaVersion
9
9
import org.gradle.util.GradleVersion
10
- import org.jetbrains.kotlin.gradle.utils.toSetOrEmpty
11
- import org.jetbrains.kotlin.tooling.core.withClosureSequence
12
10
import org.junit.jupiter.api.extension.*
13
11
import org.junit.jupiter.params.ParameterizedTest
14
12
import org.junit.jupiter.params.provider.Arguments
@@ -31,6 +29,30 @@ annotation class GradleTestVersions(
31
29
val additionalVersions : Array <String > = [],
32
30
)
33
31
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
+
34
56
/* *
35
57
* Parameterized test against different Gradle versions.
36
58
* Test should accept [GradleVersion] as a parameter.
@@ -100,10 +122,16 @@ open class GradleArgumentsProvider : ArgumentsProvider {
100
122
val versionFilter = context.getConfigurationParameter(" gradle.integration.tests.gradle.version.filter" )
101
123
.map { GradleVersion .version(it) }
102
124
125
+ val extraArguments = extraArguments(context) ? : emptyArray()
126
+
103
127
return gradleVersions
104
128
.asSequence()
105
129
.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
+ }
107
135
.asStream()
108
136
}
109
137
@@ -126,6 +154,11 @@ open class GradleArgumentsProvider : ArgumentsProvider {
126
154
127
155
return setOf (minGradleVersion, * additionalGradleVersions.toTypedArray(), maxGradleVersion)
128
156
}
157
+
158
+ protected fun extraArguments (context : ExtensionContext ): Array <out String >? {
159
+ val extraArgumentsAnnotation = findAnnotationOrNull<GradleTestExtraStringArguments >(context)
160
+ return extraArgumentsAnnotation?.values
161
+ }
129
162
}
130
163
131
164
@Target(AnnotationTarget .FUNCTION , AnnotationTarget .ANNOTATION_CLASS , AnnotationTarget .CLASS )
@@ -383,4 +416,4 @@ class DisabledIfNoArgumentsProvided : ExecutionCondition {
383
416
throw ex
384
417
}
385
418
}
386
- }
419
+ }
0 commit comments