mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Fix several broken test cases from TargetEnvironmentPathsJoinFunctionTest on Windows
GitOrigin-RevId: 81af414ebe660cc7d4a6660ccc82ad5d9a9ea2b6
This commit is contained in:
committed by
intellij-monorepo-bot
parent
ffeb17bd1b
commit
d1866cbeae
@@ -54,8 +54,26 @@ private fun findPathVariants(mappings: Iterable<PathMapping>,
|
||||
}
|
||||
|
||||
internal fun joinTargetPaths(basePath: String, relativePath: String, fileSeparator: Char): String {
|
||||
val resultCanonicalPath = FileUtil.toCanonicalPath("$basePath$fileSeparator$relativePath", fileSeparator)
|
||||
// The method `FileUtil.toCanonicalPath()` returns the path with '/' no matter what `fileSeparator` is passed but let's make the result
|
||||
// system-dependent
|
||||
return FileUtil.toSystemDependentName(resultCanonicalPath, fileSeparator)
|
||||
}
|
||||
val normalizedBasePathForJoining = basePath
|
||||
.normalizeFileSeparatorCharacter(fileSeparator)
|
||||
.removeRepetitiveFileSeparators(fileSeparator)
|
||||
.ensureEndsWithFileSeparator(fileSeparator)
|
||||
val normalizedRelativePath = relativePath
|
||||
.normalizeFileSeparatorCharacter(fileSeparator)
|
||||
.removeRepetitiveFileSeparators(fileSeparator)
|
||||
.normalizeRelativePath(fileSeparator)
|
||||
return "$normalizedBasePathForJoining$normalizedRelativePath"
|
||||
}
|
||||
|
||||
private fun String.normalizeFileSeparatorCharacter(fileSeparator: Char): String = if (fileSeparator == '\\') replace('/', fileSeparator) else this
|
||||
|
||||
private fun String.removeRepetitiveFileSeparators(fileSeparator: Char): String = replace("$fileSeparator$fileSeparator", fileSeparator.toString())
|
||||
|
||||
private fun String.normalizeRelativePath(fileSeparator: Char): String =
|
||||
when {
|
||||
length == 1 && this[0] == '.' -> ""
|
||||
startsWith(prefix = ".$fileSeparator") -> substring(startIndex = 2)
|
||||
else -> this
|
||||
}.removeSuffix(fileSeparator.toString())
|
||||
|
||||
private fun String.ensureEndsWithFileSeparator(fileSeparator: Char): String = if (endsWith(fileSeparator)) this else "$this$fileSeparator"
|
||||
+10
-4
@@ -27,18 +27,24 @@ class TargetEnvironmentPathsJoinFunctionTest(private val basePath: String,
|
||||
arrayOf("/foo/", "bar/", '/', "/foo/bar"),
|
||||
|
||||
arrayOf("/", ".", '/', "/"),
|
||||
arrayOf("/", "..", '/', "/"),
|
||||
|
||||
arrayOf("C:\\", ".", '\\', "C:\\"),
|
||||
arrayOf("C:\\\\", ".", '\\', "C:\\"),
|
||||
arrayOf("C:\\", "..", '\\', "C:\\"),
|
||||
arrayOf("C:\\\\", "..", '\\', "C:\\"),
|
||||
arrayOf("C:\\", "foo", '\\', "C:\\foo"),
|
||||
arrayOf("C:\\", "foo\\", '\\', "C:\\foo"),
|
||||
|
||||
arrayOf("C:/", ".", '\\', "C:\\"),
|
||||
arrayOf("C://", ".", '\\', "C:\\"),
|
||||
arrayOf("C:/", "foo", '\\', "C:\\foo"),
|
||||
arrayOf("C:", "foo/", '\\', "C:\\foo"),
|
||||
|
||||
arrayOf("C:\\", "Directory With Spaces\\", '\\', "C:\\Directory With Spaces"),
|
||||
arrayOf("C:\\Directory With Spaces", "File With Spaces.txt", '\\', "C:\\Directory With Spaces\\File With Spaces.txt"),
|
||||
arrayOf("C:\\Directory With Spaces", "Subdirectory With Spaces\\", '\\', "C:\\Directory With Spaces\\Subdirectory With Spaces")
|
||||
arrayOf("C:\\Directory With Spaces", "Subdirectory With Spaces\\", '\\', "C:\\Directory With Spaces\\Subdirectory With Spaces"),
|
||||
|
||||
arrayOf("C:/", "Directory With Spaces/", '\\', "C:\\Directory With Spaces"),
|
||||
arrayOf("C:/Directory With Spaces", "File With Spaces.txt", '\\', "C:\\Directory With Spaces\\File With Spaces.txt"),
|
||||
arrayOf("C:/Directory With Spaces", "Subdirectory With Spaces/", '\\', "C:\\Directory With Spaces\\Subdirectory With Spaces"),
|
||||
)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user