import lib fn isSome(opt: Option, expected: String): Bool = match opt { Some(v) => v == expected, None => false, } fn isNone(opt: Option): Bool = match opt { Some(_) => false, None => true, } fn test_basename(): Unit with {Test} = { Test.assertEqualMsg("baz.txt", lib.basename("/foo/bar/baz.txt"), "basename with dirs") Test.assertEqualMsg("file.txt", lib.basename("file.txt"), "basename no dir") Test.assertEqualMsg("", lib.basename("/foo/bar/"), "basename trailing slash") Test.assertEqualMsg("", lib.basename(""), "basename empty") } fn test_dirname(): Unit with {Test} = { Test.assertEqualMsg("/foo/bar", lib.dirname("/foo/bar/baz.txt"), "dirname with dirs") Test.assertEqualMsg(".", lib.dirname("file.txt"), "dirname no dir") Test.assertEqualMsg("/", lib.dirname("/file.txt"), "dirname root") } fn test_extension(): Unit with {Test} = { Test.assert(isSome(lib.extension("file.txt"), "txt"), "extension simple") Test.assert(isSome(lib.extension("file.tar.gz"), "gz"), "extension double") Test.assert(isNone(lib.extension("file")), "extension none") Test.assert(isSome(lib.extension("/foo/bar.txt"), "txt"), "extension with dir") Test.assert(isNone(lib.extension(".hidden")), "extension dotfile") } fn test_strip_extension(): Unit with {Test} = { Test.assertEqualMsg("file", lib.stripExtension("file.txt"), "stripExtension simple") Test.assertEqualMsg("file", lib.stripExtension("file"), "stripExtension none") Test.assertEqualMsg("/foo/bar", lib.stripExtension("/foo/bar.txt"), "stripExtension with dir") } fn test_join(): Unit with {Test} = { Test.assertEqualMsg("/foo/bar", lib.join("/foo", "bar"), "join basic") Test.assertEqualMsg("/foo/bar", lib.join("/foo/", "bar"), "join trailing slash") Test.assertEqualMsg("/foo/bar", lib.join("/foo", "/bar"), "join leading slash") Test.assertEqualMsg("/foo/bar", lib.join("/foo/", "/bar"), "join both slashes") Test.assertEqualMsg("bar", lib.join("", "bar"), "join empty first") Test.assertEqualMsg("foo", lib.join("foo", ""), "join empty second") } fn test_has_extension(): Unit with {Test} = { Test.assertEqualMsg(true, lib.hasExtension("file.txt", "txt"), "hasExtension true") Test.assertEqualMsg(false, lib.hasExtension("file.md", "txt"), "hasExtension false") } fn test_replace_extension(): Unit with {Test} = { Test.assertEqualMsg("file.md", lib.replaceExtension("file.txt", "md"), "replaceExtension simple") Test.assertEqualMsg("file.md", lib.replaceExtension("file", "md"), "replaceExtension no ext") } fn test_stem(): Unit with {Test} = { Test.assertEqualMsg("file", lib.stem("file.txt"), "stem simple") Test.assertEqualMsg("bar", lib.stem("/foo/bar.txt"), "stem with dir") Test.assertEqualMsg("file", lib.stem("file"), "stem no ext") } fn test_absolute_relative(): Unit with {Test} = { Test.assertEqualMsg(true, lib.isAbsolute("/foo/bar"), "isAbsolute true") Test.assertEqualMsg(false, lib.isAbsolute("foo/bar"), "isAbsolute false") Test.assertEqualMsg(true, lib.isRelative("foo/bar"), "isRelative true") Test.assertEqualMsg(false, lib.isRelative("/foo/bar"), "isRelative false") }