From 853a865dc5958ce2290eaf958c390a56dcce87b6 Mon Sep 17 00:00:00 2001 From: Vladimir Sitnikov Date: Fri, 20 Jun 2025 10:55:08 +0300 Subject: [PATCH] test: use a single method to generate Gradle versions for the tests --- .../github/vlsi/gradle/ErrorReportingTest.kt | 29 ++--- .../github/vlsi/jandex/JandexPluginTest.kt | 33 ++---- .../license-gather-plugin/build.gradle.kts | 15 +++ .../gradle/license/GatherLicenseTaskTest.kt | 51 ++------- .../VerifyLicenseCompatibilityTaskTest.kt | 48 ++------- .../github/vlsi/gradle/release/SvnmuccTask.kt | 2 + .../test/kotlin/release/ChecksumFileTest.kt | 30 ++---- .../com/github/vlsi/gradle/BaseGradleTest.kt | 101 +++++++++++++++--- 8 files changed, 142 insertions(+), 167 deletions(-) diff --git a/plugins/gradle-extensions-plugin/src/test/kotlin/com/github/vlsi/gradle/ErrorReportingTest.kt b/plugins/gradle-extensions-plugin/src/test/kotlin/com/github/vlsi/gradle/ErrorReportingTest.kt index e49bdce..214b880 100644 --- a/plugins/gradle-extensions-plugin/src/test/kotlin/com/github/vlsi/gradle/ErrorReportingTest.kt +++ b/plugins/gradle-extensions-plugin/src/test/kotlin/com/github/vlsi/gradle/ErrorReportingTest.kt @@ -18,27 +18,14 @@ package com.github.vlsi.gradle import org.junit.jupiter.api.Assertions import org.junit.jupiter.params.ParameterizedTest -import org.junit.jupiter.params.provider.Arguments import org.junit.jupiter.params.provider.MethodSource class ErrorReportingTest : BaseGradleTest() { - companion object { - @JvmStatic - private fun gradleVersionAndSettings(): Iterable { - return mutableListOf().apply { - add(Arguments.of("7.0")) - add(Arguments.of("7.5")) - add(Arguments.of("8.0")) - add(Arguments.of("8.14.1")) - } - } - } - // @ParameterizedTest -// @MethodSource("gradleVersionAndSettings") +// @MethodSource("defaultGradleVersionAndSettings") // @ValueSource(strings=["6.1.1"]) - fun `stacktrace is printed`(gradleVersion: String) { - createSettings() + fun `stacktrace is printed`(testCase: TestCase) { + createSettings(testCase) projectDir.resolve("build.gradle").write(""" plugins { id('com.github.vlsi.gradle-extensions') } @@ -52,7 +39,7 @@ class ErrorReportingTest : BaseGradleTest() { ) val result = - prepare(gradleVersion, "hi", "-q") + prepare(testCase, "hi", "-q") .buildAndFail() val output = result.output @@ -67,9 +54,9 @@ class ErrorReportingTest : BaseGradleTest() { } @ParameterizedTest - @MethodSource("gradleVersionAndSettings") - fun `testng init failure test`(gradleVersion: String) { - createSettings() + @MethodSource("defaultGradleVersionAndSettings") + fun `testng init failure test`(testCase: TestCase) { + createSettings(testCase) projectDir.resolve("build.gradle").write( /* language=groovy */ @@ -112,7 +99,7 @@ class ErrorReportingTest : BaseGradleTest() { ) val result = - prepare(gradleVersion, "test", "-q") + prepare(testCase, "test", "-q") .buildAndFail() val output = result.output diff --git a/plugins/jandex-plugin/src/test/kotlin/com/github/vlsi/jandex/JandexPluginTest.kt b/plugins/jandex-plugin/src/test/kotlin/com/github/vlsi/jandex/JandexPluginTest.kt index 811358e..f63fb63 100644 --- a/plugins/jandex-plugin/src/test/kotlin/com/github/vlsi/jandex/JandexPluginTest.kt +++ b/plugins/jandex-plugin/src/test/kotlin/com/github/vlsi/jandex/JandexPluginTest.kt @@ -28,29 +28,10 @@ import org.junit.jupiter.params.provider.MethodSource @Execution(ExecutionMode.SAME_THREAD) class JandexPluginTest : BaseGradleTest() { - - companion object { - val isCI = System.getenv().containsKey("CI") || System.getProperties().containsKey("CI") - - @JvmStatic - private fun gradleVersionAndSettings(): Iterable { - if (!isCI) { - // Use only the minimum supported Gradle version to make the test faster - return listOf(arguments("7.0", ConfigurationCache.ON)) - } - return mutableListOf().apply { - add(arguments("7.0", ConfigurationCache.ON)) - add(arguments("7.4.2", ConfigurationCache.ON)) - // Configuration cache supports custom caches since 7.5 only: https://github.com/gradle/gradle/issues/14874 - add(arguments("7.5.1", ConfigurationCache.ON)) - } - } - } - @ParameterizedTest - @MethodSource("gradleVersionAndSettings") - fun jandexBuildWorks(gradleVersion: String, configurationCache: ConfigurationCache) { - enableConfigurationCache(gradleVersion, configurationCache) + @MethodSource("defaultGradleVersionAndSettings") + fun jandexBuildWorks(testCase: TestCase) { + createSettings(testCase) projectDir.resolve("src/main/java/acme").toFile().mkdirs() projectDir.resolve("src/test/java/acme").toFile().mkdirs() projectDir.resolve("src/main/java/acme/Main.java").write( @@ -83,7 +64,7 @@ class JandexPluginTest : BaseGradleTest() { } """.trimIndent() ) - val result = prepare(gradleVersion, "check", "jar", "-i").build() + val result = prepare(testCase, "check", "jar", "-i").build() if (isCI) { println(result.output) } @@ -94,9 +75,9 @@ class JandexPluginTest : BaseGradleTest() { "first execution => no cache available," } // Once more, with configuration cache - if (configurationCache == ConfigurationCache.ON) { - prepare(gradleVersion, "clean").build() - val result3 = prepare(gradleVersion, "check", "jar", "-i").build() + if (testCase.configurationCache == ConfigurationCache.ON) { + prepare(testCase, "clean").build() + val result3 = prepare(testCase, "check", "jar", "-i").build() if (isCI) { println(result3.output) } diff --git a/plugins/license-gather-plugin/build.gradle.kts b/plugins/license-gather-plugin/build.gradle.kts index 55ed56c..b97df4c 100644 --- a/plugins/license-gather-plugin/build.gradle.kts +++ b/plugins/license-gather-plugin/build.gradle.kts @@ -64,6 +64,11 @@ tasks { } } + sourcesJar { + // TODO: review if the dependency is required + dependsOn(copyLicenses) + } + processResources { dependsOn(copyLicenses) } @@ -79,6 +84,11 @@ tasks { } } + sourcesJar { + // TODO: review if the dependency is required + dependsOn(saveLicenses) + } + compileKotlin { require(this is Task) dependsOn(saveLicenses, copyLicenses) @@ -110,6 +120,11 @@ tasks { } } + pluginUnderTestMetadata { + // TODO: review if the dependency is required + dependsOn(copyTfidf) + } + jar { dependsOn(copyTfidf) } diff --git a/plugins/license-gather-plugin/src/test/kotlin/com/github/vlsi/gradle/license/GatherLicenseTaskTest.kt b/plugins/license-gather-plugin/src/test/kotlin/com/github/vlsi/gradle/license/GatherLicenseTaskTest.kt index 69ff752..8fac425 100644 --- a/plugins/license-gather-plugin/src/test/kotlin/com/github/vlsi/gradle/license/GatherLicenseTaskTest.kt +++ b/plugins/license-gather-plugin/src/test/kotlin/com/github/vlsi/gradle/license/GatherLicenseTaskTest.kt @@ -17,6 +17,7 @@ package com.github.vlsi.gradle.license +import com.github.vlsi.gradle.BaseGradleTest import org.gradle.api.JavaVersion import org.gradle.testkit.runner.BuildResult import org.gradle.testkit.runner.GradleRunner @@ -27,37 +28,13 @@ import org.junit.jupiter.params.provider.Arguments import org.junit.jupiter.params.provider.MethodSource import java.nio.file.Path -class GatherLicenseTaskTest { - companion object { - @JvmStatic - private fun gradleVersionAndSettings(): Iterable { - return mutableListOf().apply { - if (JavaVersion.current() <= JavaVersion.VERSION_14) { - add(Arguments.of("6.0", "// no extra settings")) - add(Arguments.of("6.1.1", "// no extra settings")) - } - add(Arguments.of("7.2", "// no extra settings")) - } - } - } - - private val gradleRunner = GradleRunner.create().withPluginClasspath() - - @TempDir - lateinit var projectDir: Path - - fun Path.write(text: String) = this.toFile().writeText(text) - +class GatherLicenseTaskTest: BaseGradleTest() { @ParameterizedTest - @MethodSource("gradleVersionAndSettings") - fun `licenseGathering works`(gradleVersion: String, extraSettings: String) { - projectDir.resolve("settings.gradle").write( - """ - rootProject.name = 'sample' - $extraSettings - """ - ) + @MethodSource("disabledConfigurationCacheGradleVersionAndSettings") + fun `licenseGathering works`(testCase: TestCase) { + createSettings(testCase) projectDir.resolve("build.gradle").write( + /* language=gradle */ """ import com.github.vlsi.gradle.license.GatherLicenseTask import com.github.vlsi.gradle.license.api.License @@ -94,8 +71,11 @@ class GatherLicenseTaskTest { """ ) - val result = runGradleBuild(gradleVersion, "generateLicense", "--quiet", "--stacktrace") + val result = + prepare(testCase, "generateLicense", "--quiet", "--stacktrace") + .build() Assertions.assertEquals( + /* language=xml */ """ @@ -369,15 +349,4 @@ class GatherLicenseTaskTest { result.output.normalizeEol() ) } - - private fun String.normalizeEol() = replace(Regex("[\r\n]+"), "\n") - - private fun runGradleBuild(gradleVersion: String, vararg arguments: String): BuildResult { - return gradleRunner - .withGradleVersion(gradleVersion) - .withProjectDir(projectDir.toFile()) - .withArguments(*arguments) - .forwardOutput() - .build() - } } diff --git a/plugins/license-gather-plugin/src/test/kotlin/com/github/vlsi/gradle/license/VerifyLicenseCompatibilityTaskTest.kt b/plugins/license-gather-plugin/src/test/kotlin/com/github/vlsi/gradle/license/VerifyLicenseCompatibilityTaskTest.kt index 366e236..6afae57 100644 --- a/plugins/license-gather-plugin/src/test/kotlin/com/github/vlsi/gradle/license/VerifyLicenseCompatibilityTaskTest.kt +++ b/plugins/license-gather-plugin/src/test/kotlin/com/github/vlsi/gradle/license/VerifyLicenseCompatibilityTaskTest.kt @@ -17,6 +17,7 @@ package com.github.vlsi.gradle.license +import com.github.vlsi.gradle.BaseGradleTest import org.gradle.api.JavaVersion import org.gradle.testkit.runner.BuildResult import org.gradle.testkit.runner.GradleRunner @@ -27,36 +28,11 @@ import org.junit.jupiter.params.provider.Arguments import org.junit.jupiter.params.provider.MethodSource import java.nio.file.Path -class VerifyLicenseCompatibilityTaskTest { - companion object { - @JvmStatic - private fun gradleVersionAndSettings(): Iterable { - return mutableListOf().apply { - if (JavaVersion.current() <= JavaVersion.VERSION_14) { - add(Arguments.of("6.0", "// no extra settings")) - add(Arguments.of("6.1.1", "// no extra settings")) - } - add(Arguments.of("7.3", "// no extra settings")) - } - } - } - - private val gradleRunner = GradleRunner.create().withPluginClasspath() - - @TempDir - lateinit var projectDir: Path - - fun Path.write(text: String) = this.toFile().writeText(text) - +class VerifyLicenseCompatibilityTaskTest: BaseGradleTest() { @ParameterizedTest - @MethodSource("gradleVersionAndSettings") - fun `licenseGathering works`(gradleVersion: String, extraSettings: String) { - projectDir.resolve("settings.gradle").write( - """ - rootProject.name = 'sample' - $extraSettings - """ - ) + @MethodSource("disabledConfigurationCacheGradleVersionAndSettings") + fun `licenseGathering works`(testCase: TestCase) { + createSettings(testCase) projectDir.resolve("build.gradle").write( /* language=groovy */ """ import com.github.vlsi.gradle.license.GatherLicenseTask @@ -112,7 +88,8 @@ class VerifyLicenseCompatibilityTaskTest { ) val result = - runGradleBuild(gradleVersion, "verifyLicenses", "--print", "--quiet", "--stacktrace") + prepare(testCase, "verifyLicenses", "--print", "--quiet", "--stacktrace") + .build() Assertions.assertEquals( """ ALLOW @@ -203,15 +180,4 @@ class VerifyLicenseCompatibilityTaskTest { result.output.normalizeEol().replace("texts\\", "texts/") ) } - - private fun String.normalizeEol() = replace(Regex("\r\n?"), "\n") - - private fun runGradleBuild(gradleVersion: String, vararg arguments: String): BuildResult { - return gradleRunner - .withGradleVersion(gradleVersion) - .withProjectDir(projectDir.toFile()) - .withArguments(*arguments) - .forwardOutput() - .build() - } } diff --git a/plugins/stage-vote-release-plugin/src/main/kotlin/com/github/vlsi/gradle/release/SvnmuccTask.kt b/plugins/stage-vote-release-plugin/src/main/kotlin/com/github/vlsi/gradle/release/SvnmuccTask.kt index 0591bec..b04e98e 100644 --- a/plugins/stage-vote-release-plugin/src/main/kotlin/com/github/vlsi/gradle/release/SvnmuccTask.kt +++ b/plugins/stage-vote-release-plugin/src/main/kotlin/com/github/vlsi/gradle/release/SvnmuccTask.kt @@ -26,6 +26,7 @@ import javax.inject.Inject import org.gradle.api.DefaultTask import org.gradle.api.file.RegularFileProperty import org.gradle.api.tasks.Input +import org.gradle.api.tasks.Internal import org.gradle.api.tasks.TaskAction import org.gradle.kotlin.dsl.property import org.gradle.kotlin.dsl.the @@ -81,6 +82,7 @@ abstract class SvnmuccTask @Inject constructor() : DefaultTask() { return false } + @Internal protected val commandsFile = project.layout.buildDirectory.file("svnmucc/$name.txt") @TaskAction diff --git a/plugins/stage-vote-release-plugin/src/test/kotlin/release/ChecksumFileTest.kt b/plugins/stage-vote-release-plugin/src/test/kotlin/release/ChecksumFileTest.kt index 34e5954..e696877 100644 --- a/plugins/stage-vote-release-plugin/src/test/kotlin/release/ChecksumFileTest.kt +++ b/plugins/stage-vote-release-plugin/src/test/kotlin/release/ChecksumFileTest.kt @@ -28,28 +28,10 @@ import org.junit.jupiter.params.provider.Arguments import org.junit.jupiter.params.provider.MethodSource class ChecksumFileTest : BaseGradleTest() { - companion object { - val isCI = System.getenv().containsKey("CI") || System.getProperties().containsKey("CI") - - @JvmStatic - private fun gradleVersionAndSettings(): Iterable { - if (!isCI) { - // Use only the minimum supported Gradle version to make the test faster - return listOf(Arguments.arguments("8.1.1", ConfigurationCache.OFF)) - } - return mutableListOf().apply { - add(Arguments.arguments("7.0", ConfigurationCache.OFF)) - add(Arguments.arguments("7.5", ConfigurationCache.OFF)) - add(Arguments.arguments("8.1.1", ConfigurationCache.OFF)) - add(Arguments.arguments("8.14.1", ConfigurationCache.OFF)) - } - } - } - @ParameterizedTest - @MethodSource("gradleVersionAndSettings") - fun previewSvnDist(gradleVersion: String, configurationCache: ConfigurationCache) { - enableConfigurationCache(gradleVersion, configurationCache) + @MethodSource("disabledConfigurationCacheGradleVersionAndSettings") + fun previewSvnDist(testCase: TestCase) { + createSettings(testCase) projectDir.resolve("src/main/java/acme").toFile().mkdirs() projectDir.resolve("src/main/java/acme/Main.java").write( /* language=Java */ @@ -99,7 +81,7 @@ class ChecksumFileTest : BaseGradleTest() { } """.trimIndent() ) - prepare(gradleVersion, "previewSvnDist", "-i", "-Prc=1").build().let { result -> + prepare(testCase, "previewSvnDist", "-i", "-Prc=1").build().let { result -> if (isCI) { println(result.output) } @@ -107,7 +89,7 @@ class ChecksumFileTest : BaseGradleTest() { assertChecksumFilePresent("First execution") } - prepare(gradleVersion, "previewSvnDist", "-i", "-Prc=1").build().let { result -> + prepare(testCase, "previewSvnDist", "-i", "-Prc=1").build().let { result -> if (isCI) { println(result.output) } @@ -119,7 +101,7 @@ class ChecksumFileTest : BaseGradleTest() { } prepare( - gradleVersion, + testCase, "cleanJarSha512", "previewSvnDist", "-x", diff --git a/testkit/src/main/kotlin/com/github/vlsi/gradle/BaseGradleTest.kt b/testkit/src/main/kotlin/com/github/vlsi/gradle/BaseGradleTest.kt index 37386f9..6277d8e 100644 --- a/testkit/src/main/kotlin/com/github/vlsi/gradle/BaseGradleTest.kt +++ b/testkit/src/main/kotlin/com/github/vlsi/gradle/BaseGradleTest.kt @@ -16,16 +16,79 @@ */ package com.github.vlsi.gradle +import org.gradle.api.JavaVersion import org.gradle.testkit.runner.GradleRunner import org.gradle.util.GradleVersion import org.junit.jupiter.api.Assertions import org.junit.jupiter.api.io.TempDir +import org.junit.jupiter.params.provider.Arguments +import org.junit.jupiter.params.provider.Arguments.arguments import java.nio.file.Path open class BaseGradleTest { enum class ConfigurationCache { ON, OFF } + data class TestCase( + val gradleVersion: GradleVersion, + val configurationCache: ConfigurationCache + ) + + companion object { + val isCI = System.getenv().containsKey("CI") || System.getProperties().containsKey("CI") + + fun Iterable.filterGradleVersion( + predicate: (GradleVersion) -> Boolean + ): Iterable = filter { + predicate((it.get()[0] as TestCase).gradleVersion) + } + + @JvmStatic + fun disabledConfigurationCacheGradleVersionAndSettings(): Iterable = + defaultGradleVersionAndSettings().map { + arguments((it.get()[0] as TestCase) + .copy(configurationCache = ConfigurationCache.OFF)) + } + + @JvmStatic + fun defaultGradleVersionAndSettings(): Iterable { + if (!isCI) { + // Test as a single configuration only for faster local feedback + return listOf(arguments(TestCase(GradleVersion.version("8.10.2"), ConfigurationCache.ON))) + } + return mutableListOf().apply { + if (JavaVersion.current() <= JavaVersion.VERSION_1_8) { + add(arguments(TestCase(GradleVersion.version("4.1"), ConfigurationCache.OFF))) + add(arguments(TestCase(GradleVersion.version("4.4.1"), ConfigurationCache.OFF))) + add(arguments(TestCase(GradleVersion.version("4.10.2"), ConfigurationCache.OFF))) + } + // Java 11 requires Gradle 5.0+ + if (JavaVersion.current() <= JavaVersion.VERSION_11) { + add(arguments(TestCase(GradleVersion.version("5.6.2"), ConfigurationCache.OFF))) + add(arguments(TestCase(GradleVersion.version("5.4.1"), ConfigurationCache.OFF))) + add(arguments(TestCase(GradleVersion.version("6.0"), ConfigurationCache.OFF))) + add(arguments(TestCase(GradleVersion.version("6.5"), ConfigurationCache.OFF))) + add(arguments(TestCase(GradleVersion.version("7.0"), ConfigurationCache.OFF))) + } + // Java 17 requires Gradle 7.3+ + if (JavaVersion.current() <= JavaVersion.VERSION_17) { + add(arguments(TestCase(GradleVersion.version("7.3.3"), ConfigurationCache.OFF))) + add(arguments(TestCase(GradleVersion.version("7.4.2"), ConfigurationCache.OFF))) + // Configuration cache supports custom caches since 7.5 only: https://github.com/gradle/gradle/issues/14874 + add(arguments(TestCase(GradleVersion.version("7.5"), ConfigurationCache.ON))) + add(arguments(TestCase(GradleVersion.version("7.6.3"), ConfigurationCache.ON))) + add(arguments(TestCase(GradleVersion.version("8.0.2"), ConfigurationCache.ON))) + add(arguments(TestCase(GradleVersion.version("8.1"), ConfigurationCache.ON))) + } + // Java 21 requires Gradle 8.5+ + if (JavaVersion.current() <= JavaVersion.VERSION_21) { + add(arguments(TestCase(GradleVersion.version("8.14.2"), ConfigurationCache.ON))) + add(arguments(TestCase(GradleVersion.version("8.10.2"), ConfigurationCache.ON))) + add(arguments(TestCase(GradleVersion.version("8.5"), ConfigurationCache.ON))) + } + } + } + } protected val gradleRunner = GradleRunner.create().withPluginClasspath() @@ -37,7 +100,7 @@ open class BaseGradleTest { protected fun String.normalizeEol() = replace(Regex("[\r\n]+"), "\n") - protected fun createSettings(extra: String = "") { + protected fun createSettings(testCase: TestCase, extra: String = "") { projectDir.resolve("settings.gradle").write( """ rootProject.name = 'sample' @@ -45,32 +108,42 @@ open class BaseGradleTest { $extra """ ) + enableConfigurationCache(testCase) } - protected fun prepare(gradleVersion: String, vararg arguments: String) = + protected fun prepare(testCase: TestCase, vararg arguments: String) = gradleRunner - .withGradleVersion(gradleVersion) + .withGradleVersion(testCase.gradleVersion.version) .withProjectDir(projectDir.toFile()) .withArguments(*arguments) .forwardOutput() - protected fun enableConfigurationCache( - gradleVersion: String, - configurationCache: ConfigurationCache + private fun enableConfigurationCache( + testCase: TestCase ) { - if (configurationCache != ConfigurationCache.ON) { + if (testCase.configurationCache != ConfigurationCache.ON) { return } - if (GradleVersion.version(gradleVersion) < GradleVersion.version("7.0")) { - Assertions.fail("Gradle version $gradleVersion does not support configuration cache") + if (testCase.gradleVersion < GradleVersion.version("7.0")) { + Assertions.fail("Gradle version ${testCase.gradleVersion} does not support configuration cache") } - // Gradle 6.5 expects values ON, OFF, WARN, so we add the option for 7.0 only projectDir.resolve("gradle.properties").toFile().appendText( - """ + if (testCase.gradleVersion >= GradleVersion.version("8.1")) { + // https://docs.gradle.org/8.1/userguide/upgrading_version_8.html#configuration_caching_options_renamed + /* language=properties */ + """ + + org.gradle.configuration-cache=true + org.gradle.configuration-cache.problems=fail + """.trimIndent() + } else { + /* language=properties */ + """ - org.gradle.unsafe.configuration-cache=true - org.gradle.unsafe.configuration-cache-problems=fail - """.trimIndent() + org.gradle.unsafe.configuration-cache=true + org.gradle.unsafe.configuration-cache-problems=fail + """.trimIndent() + } ) } }