From 679e6f0504542dba094da2d550568d6a821cda69 Mon Sep 17 00:00:00 2001 From: Vyacheslav Gerasimov Date: Tue, 5 Mar 2024 11:37:59 +0100 Subject: [PATCH] Build: Use junit auto detection for DisabledIfNoArgumentsProvided #KTI-1596 --- .../build.gradle.kts | 1 + .../kotlin/gradle/testbase/GradleAndroidTest.java | 1 - .../jetbrains/kotlin/gradle/testbase/GradleTest.java | 1 - .../kotlin/gradle/testbase/GradleWithJdkTest.java | 1 - .../kotlin/gradle/HierarchicalStructureOptOutIT.kt | 1 - .../kotlin/gradle/KotlinSpecificDependenciesIT.kt | 3 --- .../gradle/MppHighlightingTestDataWithGradleIT.kt | 1 - .../kotlin/gradle/apple/XcodeDirectIntegrationIT.kt | 1 - .../kotlin/gradle/testbase/argumentProviders.kt | 12 +++++++++++- .../org.junit.jupiter.api.extension.Extension | 1 + 10 files changed, 13 insertions(+), 10 deletions(-) create mode 100644 libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/META-INF/services/org.junit.jupiter.api.extension.Extension diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/build.gradle.kts b/libraries/tools/kotlin-gradle-plugin-integration-tests/build.gradle.kts index a3758ccbb52..24c7fbb811e 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/build.gradle.kts +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/build.gradle.kts @@ -306,6 +306,7 @@ junitTags.forEach { junitTag -> maxParallelForks = maxParallelTestForks systemProperty("gradle.integration.tests.gradle.version.filter", gradleVersion) + systemProperty("junit.jupiter.extensions.autodetection.enabled", "true") if (junitTag in requiresKotlinNative) { applyKotlinNativeFromCurrentBranchIfNeeded() } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/java/org/jetbrains/kotlin/gradle/testbase/GradleAndroidTest.java b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/java/org/jetbrains/kotlin/gradle/testbase/GradleAndroidTest.java index 699441866c3..a24f86e6929 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/java/org/jetbrains/kotlin/gradle/testbase/GradleAndroidTest.java +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/java/org/jetbrains/kotlin/gradle/testbase/GradleAndroidTest.java @@ -21,6 +21,5 @@ import java.lang.annotation.Target; @AndroidTestVersions @ParameterizedTest(name = "AGP {1} with {0}: {displayName}") @ArgumentsSource(GradleAndAgpArgumentsProvider.class) -@ExtendWith(DisabledIfNoArgumentsProvided.class) public @interface GradleAndroidTest { } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/java/org/jetbrains/kotlin/gradle/testbase/GradleTest.java b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/java/org/jetbrains/kotlin/gradle/testbase/GradleTest.java index 2ffd5f7f2d9..9cf42674f87 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/java/org/jetbrains/kotlin/gradle/testbase/GradleTest.java +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/java/org/jetbrains/kotlin/gradle/testbase/GradleTest.java @@ -20,6 +20,5 @@ import java.lang.annotation.Target; @GradleTestVersions @ParameterizedTest(name = "{0}: {displayName}") @ArgumentsSource(GradleArgumentsProvider.class) -@ExtendWith(DisabledIfNoArgumentsProvided.class) public @interface GradleTest { } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/java/org/jetbrains/kotlin/gradle/testbase/GradleWithJdkTest.java b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/java/org/jetbrains/kotlin/gradle/testbase/GradleWithJdkTest.java index 1b6a0fb414e..b0ea2e877d9 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/java/org/jetbrains/kotlin/gradle/testbase/GradleWithJdkTest.java +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/java/org/jetbrains/kotlin/gradle/testbase/GradleWithJdkTest.java @@ -21,6 +21,5 @@ import java.lang.annotation.Target; @JdkVersions @ParameterizedTest(name = "{1} with {0}: {displayName}") @ArgumentsSource(GradleAndJdkArgumentsProvider.class) -@ExtendWith(DisabledIfNoArgumentsProvided.class) public @interface GradleWithJdkTest { } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/HierarchicalStructureOptOutIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/HierarchicalStructureOptOutIT.kt index 753b93d4cf2..533b6a7718f 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/HierarchicalStructureOptOutIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/HierarchicalStructureOptOutIT.kt @@ -104,6 +104,5 @@ internal class HierarchicalStructureOptInMigrationArtifactContentMppIT : KGPBase @GradleTestVersions @ParameterizedTest(name = "{0} mode {1}: {displayName}") @ArgumentsSource(GradleAndHmppModeProvider::class) - @ExtendWith(DisabledIfNoArgumentsProvided::class) annotation class GradleWithHmppModeTest } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinSpecificDependenciesIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinSpecificDependenciesIT.kt index 5f22037e052..1ee6137fcba 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinSpecificDependenciesIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinSpecificDependenciesIT.kt @@ -513,7 +513,6 @@ class KotlinSpecificDependenciesIT : KGPBaseTest() { @GradleTestVersions @ParameterizedTest(name = "{1} with {0}: {displayName}") @ArgumentsSource(GradleAndTestFrameworksArgumentsProvider::class) - @ExtendWith(DisabledIfNoArgumentsProvided::class) fun testFrameworkSelectionJvm( gradleVersion: GradleVersion, testFramework: Pair @@ -537,7 +536,6 @@ class KotlinSpecificDependenciesIT : KGPBaseTest() { @GradleTestVersions @ParameterizedTest(name = "{1} with {0}: {displayName}") @ArgumentsSource(GradleAndTestFrameworksArgumentsProvider::class) - @ExtendWith(DisabledIfNoArgumentsProvided::class) fun testFrameworkSelectionMppJvm( gradleVersion: GradleVersion, testFramework: Pair @@ -562,7 +560,6 @@ class KotlinSpecificDependenciesIT : KGPBaseTest() { @GradleTestVersions @ParameterizedTest(name = "{1} with {0}: {displayName}") @ArgumentsSource(GradleAndTestFrameworksArgumentsProvider::class) - @ExtendWith(DisabledIfNoArgumentsProvided::class) fun testFrameworkSelectionMppCommon( gradleVersion: GradleVersion, testFramework: Pair diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/MppHighlightingTestDataWithGradleIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/MppHighlightingTestDataWithGradleIT.kt index 20c39f41e60..1e0db6065dc 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/MppHighlightingTestDataWithGradleIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/MppHighlightingTestDataWithGradleIT.kt @@ -238,6 +238,5 @@ internal class MppHighlightingTestDataWithGradleIT : KGPBaseTest() { @GradleTestVersions @ParameterizedTest(name = "{0} - {1} - {2} - {3}: {displayName}") @ArgumentsSource(GradleAndMppHighlightingProvider::class) - @ExtendWith(DisabledIfNoArgumentsProvided::class) annotation class GradleWithMppHighlightingTest } diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/apple/XcodeDirectIntegrationIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/apple/XcodeDirectIntegrationIT.kt index 22af933f03d..34d3e0ace94 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/apple/XcodeDirectIntegrationIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/apple/XcodeDirectIntegrationIT.kt @@ -24,7 +24,6 @@ class XcodeDirectIntegrationIT : KGPBaseTest() { @DisplayName("Xcode direct integration") @ParameterizedTest(name = "{displayName} with {1}, {0} and isStatic={2}") @ArgumentsSource(XcodeArgumentsProvider::class) - @ExtendWith(DisabledIfNoArgumentsProvided::class) fun test( gradleVersion: GradleVersion, iosApp: String, diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/argumentProviders.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/argumentProviders.kt index 0610ccc2b91..81808a4028d 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/argumentProviders.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/argumentProviders.kt @@ -220,11 +220,21 @@ class GradleAndAgpArgumentsProvider : GradleArgumentsProvider() { ) } +/** + * Disables a parametrized test if any of argument providers doesn't have arguments to provide. + * When gradle.integration.tests.gradle.version.filter property is used, all arguments of a GradleArgumentsProvider may be filtered out. + * If such a test is not disabled, it will fail with initialization error. + */ class DisabledIfNoArgumentsProvided : ExecutionCondition { override fun evaluateExecutionCondition(context: ExtensionContext): ConditionEvaluationResult { + if (!context.testMethod.isPresent) { + return ConditionEvaluationResult.enabled("The execution condition is only applicable to test methods") + } + val gradleVersionFilterParameter = context.getConfigurationParameter("gradle.integration.tests.gradle.version.filter") - if (!gradleVersionFilterParameter.isPresent) + if (!gradleVersionFilterParameter.isPresent) { return ConditionEvaluationResult.enabled("No Gradle version filter provided") + } val argumentProviders = AnnotationUtils.findRepeatableAnnotations(context.requiredTestMethod, ArgumentsSource::class.java) .map(ArgumentsSource::value) diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/META-INF/services/org.junit.jupiter.api.extension.Extension b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/META-INF/services/org.junit.jupiter.api.extension.Extension new file mode 100644 index 00000000000..a4c5f78a257 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/META-INF/services/org.junit.jupiter.api.extension.Extension @@ -0,0 +1 @@ +org.jetbrains.kotlin.gradle.testbase.DisabledIfNoArgumentsProvided \ No newline at end of file