Fix tests on linux.

Add tests for File.startsWith
This commit is contained in:
Ilya Gorbunov
2015-12-10 05:30:06 +03:00
parent 645c78e2f4
commit d2e22dc794
+46 -25
View File
@@ -8,6 +8,8 @@ import kotlin.test.*
class FilesTest { class FilesTest {
private val isCaseInsensitiveFileSystem = File("C:/") == File("c:/") private val isCaseInsensitiveFileSystem = File("C:/") == File("c:/")
private val isBackslashSeparator = File.separatorChar == '\\'
@test fun testPath() { @test fun testPath() {
val fileSuf = System.currentTimeMillis().toString() val fileSuf = System.currentTimeMillis().toString()
@@ -96,21 +98,23 @@ class FilesTest {
assertEquals("../bar", file4.relativeToFile(file5).invariantSeparatorsPath) assertEquals("../bar", file4.relativeToFile(file5).invariantSeparatorsPath)
assertEquals("../baran", file5.relativeToFile(file4).invariantSeparatorsPath) assertEquals("../baran", file5.relativeToFile(file4).invariantSeparatorsPath)
val file6 = File("C:\\Users\\Me") if (isBackslashSeparator) {
val file7 = File("C:\\Users\\Me\\Documents") val file6 = File("C:\\Users\\Me")
val file7 = File("C:\\Users\\Me\\Documents")
assertEquals("..", file6.relativeTo(file7)) assertEquals("..", file6.relativeTo(file7))
assertEquals("Documents", file7.relativeTo(file6)) assertEquals("Documents", file7.relativeTo(file6))
val file8 = File("""\\my.host\home/user/documents/vip""")
val file9 = File("""\\my.host\home/other/images/nice""")
assertEquals("../../../user/documents/vip", file8.relativeToFile(file9).invariantSeparatorsPath)
assertEquals("../../../other/images/nice", file9.relativeToFile(file8).invariantSeparatorsPath)
}
if (isCaseInsensitiveFileSystem) { if (isCaseInsensitiveFileSystem) {
assertEquals("bar", File("C:/bar").relativeTo(File("c:/"))) assertEquals("bar", File("C:/bar").relativeTo(File("c:/")))
} }
val file8 = File("""\\my.host\home/user/documents/vip""")
val file9 = File("""\\my.host\home/other/images/nice""")
assertEquals("../../../user/documents/vip", file8.relativeToFile(file9).invariantSeparatorsPath)
assertEquals("../../../other/images/nice", file9.relativeToFile(file8).invariantSeparatorsPath)
} }
@test fun relativeToRelative() { @test fun relativeToRelative() {
@@ -150,14 +154,14 @@ class FilesTest {
val absolute = File("/foo/bar/baz") val absolute = File("/foo/bar/baz")
val relative = File("foo/bar") val relative = File("foo/bar")
val networkShare1 = File("""\\my.host\share1/folder""") val networkShare1 = File("""\\my.host\share1/folder""")
val networkShare2 = File("""\\my.host\share2/folder""") val networkShare2 = File("""\\my.host\share2\folder""")
fun assertFailsRelativeTo(file: File, base: File) { fun assertFailsRelativeTo(file: File, base: File) {
val e = assertFailsWith<IllegalArgumentException>("file: $file, base: $base") { file.relativeTo(base) } val e = assertFailsWith<IllegalArgumentException>("file: $file, base: $base") { file.relativeTo(base) }
println(e.message) println(e.message)
} }
val allFiles = listOf(absolute, relative, networkShare1, networkShare2) val allFiles = listOf(absolute, relative) + if (isBackslashSeparator) listOf(networkShare1, networkShare2) else emptyList()
for (file in allFiles) { for (file in allFiles) {
for (base in allFiles) { for (base in allFiles) {
if (file != base) assertFailsRelativeTo(file, base) if (file != base) assertFailsRelativeTo(file, base)
@@ -166,10 +170,11 @@ class FilesTest {
assertFailsRelativeTo(File("y"), File("../x")) assertFailsRelativeTo(File("y"), File("../x"))
// This test operates correctly only at Windows PCs with C & D drives if (isBackslashSeparator) {
val fileOnC = File("C:/dir1") val fileOnC = File("C:/dir1")
val fileOnD = File("D:/dir2") val fileOnD = File("D:/dir2")
assertFailsRelativeTo(fileOnC, fileOnD) assertFailsRelativeTo(fileOnC, fileOnD)
}
} }
@test fun relativeTo() { @test fun relativeTo() {
@@ -194,7 +199,7 @@ class FilesTest {
checkFilePathComponents(File("C:/bar/gav"), File("C:/"), listOf("bar", "gav")) checkFilePathComponents(File("C:/bar/gav"), File("C:/"), listOf("bar", "gav"))
checkFilePathComponents(File("C:/"), File("C:/"), listOf()) checkFilePathComponents(File("C:/"), File("C:/"), listOf())
checkFilePathComponents(File("C:"), File("C:"), listOf()) checkFilePathComponents(File("C:"), File("C:"), listOf())
if (File.separator == "\\") { if (isBackslashSeparator) {
// Check only in Windows // Check only in Windows
checkFilePathComponents(File("\\\\host.ru\\home\\mike"), File("\\\\host.ru\\home"), listOf("mike")) checkFilePathComponents(File("\\\\host.ru\\home\\mike"), File("\\\\host.ru\\home"), listOf("mike"))
checkFilePathComponents(File("//host.ru/home/mike"), File("//host.ru/home"), listOf("mike")) checkFilePathComponents(File("//host.ru/home/mike"), File("//host.ru/home"), listOf("mike"))
@@ -212,7 +217,7 @@ class FilesTest {
assertTrue(rooted.isRooted) assertTrue(rooted.isRooted)
assertEquals("/", rooted.root.invariantSeparatorsPath) assertEquals("/", rooted.root.invariantSeparatorsPath)
if (File.separator == "\\") { if (isBackslashSeparator) {
val diskRooted = File("""C:\foo\bar""") val diskRooted = File("""C:\foo\bar""")
assertTrue(rooted.isRooted) assertTrue(rooted.isRooted)
assertEquals("""C:\""", diskRooted.rootName) assertEquals("""C:\""", diskRooted.rootName)
@@ -228,9 +233,25 @@ class FilesTest {
} }
@test fun startsWith() { @test fun startsWith() {
assertTrue(File("C:\\Users\\Me\\Temp\\Game").startsWith("C:\\Users\\Me")) assertTrue(File("foo/bar").startsWith(File("foo/bar")))
assertFalse(File("C:\\Users\\Me\\Temp\\Game").startsWith("C:\\Users\\He")) assertTrue(File("foo/bar").startsWith(File("foo")))
assertTrue(File("C:\\Users\\Me").startsWith("C:\\")) assertTrue(File("foo/bar").startsWith(""))
assertFalse(File("foo/bar").startsWith(File("/")))
assertFalse(File("foo/bar").startsWith(File("/foo")))
assertFalse(File("foo/bar").startsWith("fo"))
assertTrue(File("/foo/bar").startsWith(File("/foo/bar")))
assertTrue(File("/foo/bar").startsWith(File("/foo")))
assertTrue(File("/foo/bar").startsWith("/"))
// TODO: assertFalse(File("/foo/bar").startsWith(""))
// TODO: assertFalse(File("/foo/bar").startsWith(File("foo")))
assertFalse(File("/foo/bar").startsWith("/fo"))
if (isBackslashSeparator) {
assertTrue(File("C:\\Users\\Me\\Temp\\Game").startsWith("C:\\Users\\Me"))
assertFalse(File("C:\\Users\\Me\\Temp\\Game").startsWith("C:\\Users\\He"))
assertTrue(File("C:\\Users\\Me").startsWith("C:\\"))
}
if (isCaseInsensitiveFileSystem) { if (isCaseInsensitiveFileSystem) {
assertTrue(File("C:\\Users\\Me").startsWith("c:\\")) assertTrue(File("C:\\Users\\Me").startsWith("c:\\"))
} }
@@ -249,7 +270,7 @@ class FilesTest {
} }
@test fun subPath() { @test fun subPath() {
if (File.separatorChar == '\\') { if (isBackslashSeparator) {
// Check only in Windows // Check only in Windows
assertEquals(File("mike"), File("//my.host.net/home/mike/temp").subPath(0, 1)) assertEquals(File("mike"), File("//my.host.net/home/mike/temp").subPath(0, 1))
assertEquals(File("mike"), File("\\\\my.host.net\\home\\mike\\temp").subPath(0, 1)) assertEquals(File("mike"), File("\\\\my.host.net\\home\\mike\\temp").subPath(0, 1))
@@ -264,7 +285,7 @@ class FilesTest {
assertEquals(File("/foo/bar/baaz"), File("/foo/bak/../bar/gav/../baaz").normalize()) assertEquals(File("/foo/bar/baaz"), File("/foo/bak/../bar/gav/../baaz").normalize())
assertEquals(File("../../bar"), File("../foo/../../bar").normalize()) assertEquals(File("../../bar"), File("../foo/../../bar").normalize())
// For Unix C:\windows is not correct so it's not the same as C:/windows // For Unix C:\windows is not correct so it's not the same as C:/windows
if (File.separator == "\\") { if (isBackslashSeparator) {
assertEquals(File("C:\\windows"), File("C:\\home\\..\\documents\\..\\windows").normalize()) assertEquals(File("C:\\windows"), File("C:\\home\\..\\documents\\..\\windows").normalize())
assertEquals(File("C:/windows"), File("C:/home/../documents/../windows").normalize()) assertEquals(File("C:/windows"), File("C:/home/../documents/../windows").normalize())
} }
@@ -277,7 +298,7 @@ class FilesTest {
assertEquals(File("/foo/bar/gav"), File("/foo/bar/").resolve("gav")) assertEquals(File("/foo/bar/gav"), File("/foo/bar/").resolve("gav"))
assertEquals(File("/gav"), File("/foo/bar").resolve("/gav")) assertEquals(File("/gav"), File("/foo/bar").resolve("/gav"))
// For Unix C:\path is not correct so it's cannot be automatically converted // For Unix C:\path is not correct so it's cannot be automatically converted
if (File.separator == "\\") { if (isBackslashSeparator) {
assertEquals(File("C:\\Users\\Me\\Documents\\important.doc"), assertEquals(File("C:\\Users\\Me\\Documents\\important.doc"),
File("C:\\Users\\Me").resolve("Documents\\important.doc")) File("C:\\Users\\Me").resolve("Documents\\important.doc"))
assertEquals(File("C:/Users/Me/Documents/important.doc"), assertEquals(File("C:/Users/Me/Documents/important.doc"),
@@ -297,7 +318,7 @@ class FilesTest {
assertEquals(File("/foo/gav"), File("/foo/bar/").resolveSibling("gav")) assertEquals(File("/foo/gav"), File("/foo/bar/").resolveSibling("gav"))
assertEquals(File("/gav"), File("/foo/bar").resolveSibling("/gav")) assertEquals(File("/gav"), File("/foo/bar").resolveSibling("/gav"))
// For Unix C:\path is not correct so it's cannot be automatically converted // For Unix C:\path is not correct so it's cannot be automatically converted
if (File.separator == "\\") { if (isBackslashSeparator) {
assertEquals(File("C:\\Users\\Me\\Documents\\important.doc"), assertEquals(File("C:\\Users\\Me\\Documents\\important.doc"),
File("C:\\Users\\Me\\profile.ini").resolveSibling("Documents\\important.doc")) File("C:\\Users\\Me\\profile.ini").resolveSibling("Documents\\important.doc"))
assertEquals(File("C:/Users/Me/Documents/important.doc"), assertEquals(File("C:/Users/Me/Documents/important.doc"),