diff options
Diffstat (limited to 'src/jsTest/kotlin/io/PathTest.kt')
-rw-r--r-- | src/jsTest/kotlin/io/PathTest.kt | 90 |
1 files changed, 76 insertions, 14 deletions
diff --git a/src/jsTest/kotlin/io/PathTest.kt b/src/jsTest/kotlin/io/PathTest.kt index 8ea577c..174c2b2 100644 --- a/src/jsTest/kotlin/io/PathTest.kt +++ b/src/jsTest/kotlin/io/PathTest.kt @@ -2,30 +2,92 @@ package io import io.kotest.assertions.assertSoftly import io.kotest.core.spec.style.FunSpec +import io.kotest.data.forAll +import io.kotest.data.row +import io.kotest.matchers.be +import io.kotest.matchers.should +import io.kotest.matchers.shouldBe +import io.kotest.matchers.types.beOfType import io.kotest.matchers.types.shouldBeTypeOf class PathTest : FunSpec({ val homeDir = Path.of("/home") as Path.Absolute test("recognize relative paths as such") { - listOf( - Path.of("a/b"), - Path.of("."), - Path.of("a", "b"), - Path.ofShell("a/b", userHome = homeDir), - Path.ofShell(".", userHome = homeDir), - Path.ofShell("a", "b", userHome = homeDir), - Path.ofShell(listOf("a", "b"), userHome = homeDir), - ).forEach { + forAll( + row(Path.of("a/b")), + row(Path.of(".")), + row(Path.of("a", "b")), + row(Path.ofShell("a/b", userHome = homeDir)), + row(Path.ofShell(".", userHome = homeDir)), + row(Path.ofShell("a", "b", userHome = homeDir)), + row(Path.ofShell(listOf("a", "b"), userHome = homeDir)), + ) { assertSoftly(it) { shouldBeTypeOf<Path.Relative>() } } } test("recognize absolute paths as such") { - listOf( - Path.of("/a/b"), - Path.of("/"), - Path.ofShell("/b/c", userHome = homeDir), - ).forEach { + forAll( + row(Path.of("/a/b")), + row(Path.of("/")), + row(Path.ofShell("/b/c", userHome = homeDir)), + ) { assertSoftly(it) { shouldBeTypeOf<Path.Absolute>() } } } + test("Path.of(x).stringPath == x") { + forAll( + row("/"), + row("/a/b"), + row("a/b"), + row("."), + ) { name -> + assertSoftly(Path.of(name).stringPath) { + shouldBe(name) + } + assertSoftly(Path.ofShell(name, homeDir).stringPath) { + shouldBe(name) + } + } + } + test("Shell resolution of home directory") { + forAll( + row("~/a", "/home/a"), + row("~", "/home"), + row("~/.", "/home/."), + row("/a", "/a"), + row("a", "a"), + ) { a, b -> + assertSoftly(Path.ofShell(a, homeDir).stringPath) { + shouldBe(b) + } + } + } + test("Relative path resolution works") { + forAll( + row("/a/b", "c/d", "/a/b/c/d"), + row("/a/b", "/c/d", "/c/d"), + row("/a/", "c", "/a/c"), + ) { a, b, c -> + val x = Path.of(a) + val y = Path.of(b) + val z = x.resolve(y) + assertSoftly { + x should beOfType<Path.Absolute>() + z should beOfType<Path.Absolute>() + z.stringPath should be(c) + } + } + } + test("Equality checks should work") { + forAll( + row("a"), + row("a/b"), + row("/a/b"), + row("c//d") + ) { + assertSoftly { + Path.of(it) should be(Path.of(it)) + } + } + } }) |