From cccf20995b16595da201a27cb3ab70b2b7ee6533 Mon Sep 17 00:00:00 2001 From: Vsevolod Tolstopyatov Date: Mon, 11 Apr 2022 19:29:24 +0300 Subject: [PATCH] Look for .api file in a case-insensitive manner Fixes #76 --- .../validation/test/DefaultConfigTests.kt | 23 +++++++++++++++++++ src/main/kotlin/ApiCompareCompareTask.kt | 7 +++++- 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/functionalTest/kotlin/kotlinx/validation/test/DefaultConfigTests.kt b/src/functionalTest/kotlin/kotlinx/validation/test/DefaultConfigTests.kt index c01d8d25..c02a6aae 100644 --- a/src/functionalTest/kotlin/kotlinx/validation/test/DefaultConfigTests.kt +++ b/src/functionalTest/kotlin/kotlinx/validation/test/DefaultConfigTests.kt @@ -89,6 +89,29 @@ internal class DefaultConfigTests : BaseKotlinGradleTest() { } } + @Test + fun `apiCheck should succeed when public classes match api file ignoring case`() { + val runner = test { + buildGradleKts { + resolve("examples/gradle/base/withPlugin.gradle.kts") + } + kotlin("AnotherBuildConfig.kt") { + resolve("examples/classes/AnotherBuildConfig.kt") + } + apiFile(projectName = rootProjectDir.name.toUpperCase()) { + resolve("examples/classes/AnotherBuildConfig.dump") + } + + runner { + arguments.add(":apiCheck") + } + } + + runner.build().apply { + assertTaskSuccess(":apiCheck") + } + } + @Test fun `apiCheck should fail, when a public class is not in api-File`() { val runner = test { diff --git a/src/main/kotlin/ApiCompareCompareTask.kt b/src/main/kotlin/ApiCompareCompareTask.kt index 5810bdab..b782b54c 100644 --- a/src/main/kotlin/ApiCompareCompareTask.kt +++ b/src/main/kotlin/ApiCompareCompareTask.kt @@ -11,6 +11,7 @@ import org.gradle.api.file.* import org.gradle.api.model.ObjectFactory import org.gradle.api.tasks.* import java.io.* +import java.util.TreeSet import javax.inject.Inject open class ApiCompareCompareTask @Inject constructor(private val objects: ObjectFactory): DefaultTask() { @@ -53,7 +54,11 @@ open class ApiCompareCompareTask @Inject constructor(private val objects: Object val subject = projectName val apiBuildDirFiles = mutableSetOf() - val expectedApiFiles = mutableSetOf() + // We use case-insensitive comparison to workaround issues with case-insensitive OSes + // and Gradle behaving slightly different on different platforms + val expectedApiFiles = TreeSet { rp, rp2 -> + rp.toString().compareTo(rp2.toString(), true) + } objects.fileTree().from(apiBuildDir).visit { file -> apiBuildDirFiles.add(file.relativePath) }