diff options
author | nea <romangraef@gmail.com> | 2021-08-20 15:33:32 +0200 |
---|---|---|
committer | nea <romangraef@gmail.com> | 2021-08-20 15:33:58 +0200 |
commit | 5042498c8fe12751c1b6560ae1fde07e7cd78259 (patch) | |
tree | 688aa93978ffffd0b15c639768fdad6f17609bdd /src/test/kotlin/io/PathTest.kt | |
parent | 65a6ffeb6761994d4d69011c87f23fe074f7a1f7 (diff) | |
download | webos-5042498c8fe12751c1b6560ae1fde07e7cd78259.tar.gz webos-5042498c8fe12751c1b6560ae1fde07e7cd78259.tar.bz2 webos-5042498c8fe12751c1b6560ae1fde07e7cd78259.zip |
Diffstat (limited to 'src/test/kotlin/io/PathTest.kt')
-rw-r--r-- | src/test/kotlin/io/PathTest.kt | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/src/test/kotlin/io/PathTest.kt b/src/test/kotlin/io/PathTest.kt new file mode 100644 index 0000000..9ba8a9e --- /dev/null +++ b/src/test/kotlin/io/PathTest.kt @@ -0,0 +1,104 @@ +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") { + 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") { + 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)) + } + } + } + test("relaitivization works") { + forAll( + row("/a/b", "/a", ".."), + row("/a", "/a/b", "b"), + row("/a/b", "/a/c", "../c"), + ) { a, b, c -> + assertSoftly { + Path.of(a).shouldBeTypeOf<Path.Absolute>().relativize(Path.of(b)) shouldBe Path.of(c) + } + } + } +}) |