[Gradle] IdeaKotlinProjectArtifactDependencyMatcher: Use host independent path matcher

^KT-55112 Verification Pending
This commit is contained in:
Sebastian Sellmair
2022-11-25 17:54:26 +01:00
committed by Space Team
parent 3f24b690e2
commit 55cfe52e7d
3 changed files with 40 additions and 11 deletions
@@ -8,20 +8,49 @@ package org.jetbrains.kotlin.gradle.idea.testFixtures.tcs
import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinDependency
import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinProjectArtifactDependency
import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinSourceDependency
import java.io.File
internal class IdeaKotlinProjectArtifactDependencyMatcher(
val type: IdeaKotlinSourceDependency.Type,
val projectPath: String,
val artifactFilePath: Regex
val artifactFilePath: FilePathRegex
) : IdeaKotlinDependencyMatcher {
override val description: String
get() = "project($type)::$projectPath/${artifactFilePath.pattern}"
get() = "project($type)::$projectPath/${artifactFilePath}"
override fun matches(dependency: IdeaKotlinDependency): Boolean {
if (dependency !is IdeaKotlinProjectArtifactDependency) return false
return dependency.type == type &&
dependency.coordinates.project.projectPath == projectPath &&
dependency.coordinates.artifactFile.path.matches(artifactFilePath)
artifactFilePath.matches(dependency.coordinates.artifactFile)
}
}
}
fun FilePathRegex(pattern: String): FilePathRegex = FilePathRegex.from(pattern)
class FilePathRegex private constructor(private val normalizedRegex: Regex) {
override fun toString(): String {
return normalizedRegex.toString()
}
override fun equals(other: Any?): Boolean {
if (other !is FilePathRegex) return false
return normalizedRegex == other.normalizedRegex
}
override fun hashCode(): Int {
return normalizedRegex.hashCode()
}
fun matches(file: File) = normalizedRegex.matches(file.path)
fun matches(path: String) = normalizedRegex.matches(path)
companion object {
fun from(pattern: String): FilePathRegex {
return FilePathRegex(Regex(pattern.replace("/", Regex.escape(File.separator))))
}
}
}
@@ -39,7 +39,7 @@ fun dependsOnDependency(project: Project, sourceSetName: String) =
fun dependsOnDependency(path: String) = ideSourceDependency(IdeaKotlinSourceDependency.Type.DependsOn, path)
fun projectArtifactDependency(
type: IdeaKotlinSourceDependency.Type = IdeaKotlinSourceDependency.Type.Regular, projectPath: String, artifactFilePath: Regex
type: IdeaKotlinSourceDependency.Type = IdeaKotlinSourceDependency.Type.Regular, projectPath: String, artifactFilePath: FilePathRegex
): IdeaKotlinDependencyMatcher = IdeaKotlinProjectArtifactDependencyMatcher(
type = type,
projectPath = projectPath,
@@ -101,7 +101,7 @@ class IdeResolveSourceDependenciesTest {
dependsOnDependency(":consumer/commonMain"),
dependsOnDependency(":consumer/nativeMain"),
dependsOnDependency(":consumer/linuxMain"),
projectArtifactDependency(Regular, ":producer", Regex(".*/linuxX64/main/klib/producer.klib"))
projectArtifactDependency(Regular, ":producer", FilePathRegex(".*/linuxX64/main/klib/producer.klib"))
)
consumer.resolveDependencies("linuxX64Test").assertMatches(
@@ -115,7 +115,7 @@ class IdeResolveSourceDependenciesTest {
dependsOnDependency(":consumer/commonTest"),
dependsOnDependency(":consumer/nativeTest"),
dependsOnDependency(":consumer/linuxTest"),
projectArtifactDependency(Regular, ":producer", Regex(".*/linuxX64/main/klib/producer.klib"))
projectArtifactDependency(Regular, ":producer", FilePathRegex(".*/linuxX64/main/klib/producer.klib"))
)
consumer.resolveDependencies("linuxArm64Main").assertMatches(
@@ -125,7 +125,7 @@ class IdeResolveSourceDependenciesTest {
dependsOnDependency(":consumer/commonMain"),
dependsOnDependency(":consumer/nativeMain"),
dependsOnDependency(":consumer/linuxMain"),
projectArtifactDependency(Regular, ":producer", Regex(".*/linuxArm64/main/klib/producer.klib"))
projectArtifactDependency(Regular, ":producer", FilePathRegex(".*/linuxArm64/main/klib/producer.klib"))
)
consumer.resolveDependencies("linuxArm64Test").assertMatches(
@@ -139,7 +139,7 @@ class IdeResolveSourceDependenciesTest {
dependsOnDependency(":consumer/commonTest"),
dependsOnDependency(":consumer/nativeTest"),
dependsOnDependency(":consumer/linuxTest"),
projectArtifactDependency(Regular, ":producer", Regex(".*/linuxArm64/main/klib/producer.klib"))
projectArtifactDependency(Regular, ":producer", FilePathRegex(".*/linuxArm64/main/klib/producer.klib"))
)
}
@@ -213,14 +213,14 @@ class IdeResolveSourceDependenciesTest {
consumer.resolveDependencies("jvmMain").assertMatches(
dependsOnDependency(":consumer/commonMain"),
projectArtifactDependency(Regular, ":producer", Regex(""".*/build/libs/producer.jar"""))
projectArtifactDependency(Regular, ":producer", FilePathRegex(".*/build/libs/producer.jar"))
)
consumer.resolveDependencies("jvmTest").assertMatches(
friendSourceDependency(":consumer/commonMain"),
friendSourceDependency(":consumer/jvmMain"),
dependsOnDependency(":consumer/commonTest"),
projectArtifactDependency(Regular, ":producer", Regex(""".*/build/libs/producer.jar"""))
projectArtifactDependency(Regular, ":producer", FilePathRegex(".*/build/libs/producer.jar"))
)
}
}