From 5d07eb77f2dbbcdc2eb56953baec73de17349358 Mon Sep 17 00:00:00 2001 From: Yahor Berdnikau Date: Fri, 8 Oct 2021 12:53:15 +0200 Subject: [PATCH] Allow declaring @GradleTestVersions for the whole test suite. ^KT-45745 In Progress --- .../kotlin/gradle/testbase/KGPBaseTest.kt | 29 ++++++++++++++++--- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/KGPBaseTest.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/KGPBaseTest.kt index 8f573ae467e..6a6abf78278 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/KGPBaseTest.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/testbase/KGPBaseTest.kt @@ -5,7 +5,6 @@ package org.jetbrains.kotlin.gradle.testbase -import org.gradle.internal.impldep.org.junit.platform.commons.support.AnnotationSupport.findAnnotation import org.gradle.util.GradleVersion import org.jetbrains.kotlin.test.WithMuteInDatabase import org.junit.jupiter.api.Tag @@ -34,10 +33,32 @@ abstract class KGPBaseTest { override fun provideArguments( context: ExtensionContext ): Stream { - val versionsAnnotation = findAnnotation(context.testMethod, GradleTestVersions::class.java).orElseThrow { - IllegalStateException("Define allowed Gradle versions via '@GradleTestVersions'.") + var nextSuperclass: Class<*>? = context.testClass.get().superclass + val superClassSequence = if (nextSuperclass != null) { + generateSequence { + val currentSuperclass = nextSuperclass + nextSuperclass = nextSuperclass?.superclass + currentSuperclass + } + } else { + emptySequence() } + val versionsAnnotation = sequenceOf( + context.testMethod.get(), + context.testClass.get() + ) + .plus(superClassSequence) + .mapNotNull { declaration -> + declaration.annotations.firstOrNull { it is GradleTestVersions } + } + .firstOrNull() as GradleTestVersions? + ?: context.testMethod.get().annotations + .mapNotNull { annotation -> + annotation.annotationClass.annotations.firstOrNull { it is GradleTestVersions } + } + .first() as GradleTestVersions + val minGradleVersion = GradleVersion.version(versionsAnnotation.minVersion) val maxGradleVersion = GradleVersion.version(versionsAnnotation.maxVersion) val additionalGradleVersions = versionsAnnotation @@ -56,7 +77,7 @@ abstract class KGPBaseTest { } } - @Target(AnnotationTarget.FUNCTION, AnnotationTarget.ANNOTATION_CLASS) + @Target(AnnotationTarget.FUNCTION, AnnotationTarget.ANNOTATION_CLASS, AnnotationTarget.CLASS) @Retention(AnnotationRetention.RUNTIME) annotation class GradleTestVersions( val minVersion: String = TestVersions.Gradle.MIN_SUPPORTED,