import lib // Snapshot tests: verify complete path decomposition output against golden values // Snapshot: decompose a typical web project file fn test_snapshot_web_project_file(): Unit with {Test} = { let path = "/home/user/project/src/components/Button.tsx" Test.assertEqualMsg("Button.tsx", lib.basename(path), "snap: basename") Test.assertEqualMsg("/home/user/project/src/components", lib.dirname(path), "snap: dirname") Test.assertEqualMsg("tsx", match lib.extension(path) { Some(e) => e, None => "" }, "snap: extension") Test.assertEqualMsg("Button", lib.stem(path), "snap: stem") Test.assertEqualMsg("/home/user/project/src/components/Button", lib.stripExtension(path), "snap: stripExtension") Test.assertEqualMsg(true, lib.isAbsolute(path), "snap: isAbsolute") Test.assertEqualMsg(false, lib.isRelative(path), "snap: isRelative") Test.assertEqualMsg(true, lib.hasExtension(path, "tsx"), "snap: hasExtension tsx") Test.assertEqualMsg(false, lib.hasExtension(path, "ts"), "snap: hasExtension ts") Test.assertEqualMsg("/home/user/project/src/components/Button.jsx", lib.replaceExtension(path, "jsx"), "snap: replaceExtension") } // Snapshot: decompose a markdown blog post path fn test_snapshot_blog_post(): Unit with {Test} = { let path = "content/posts/2025/my-first-post.md" Test.assertEqualMsg("my-first-post.md", lib.basename(path), "snap: basename") Test.assertEqualMsg("content/posts/2025", lib.dirname(path), "snap: dirname") Test.assertEqualMsg("md", match lib.extension(path) { Some(e) => e, None => "" }, "snap: extension") Test.assertEqualMsg("my-first-post", lib.stem(path), "snap: stem") Test.assertEqualMsg("content/posts/2025/my-first-post", lib.stripExtension(path), "snap: stripExtension") Test.assertEqualMsg(false, lib.isAbsolute(path), "snap: isAbsolute") Test.assertEqualMsg(true, lib.isRelative(path), "snap: isRelative") Test.assertEqualMsg("content/posts/2025/my-first-post.html", lib.replaceExtension(path, "html"), "snap: replaceExtension") } // Snapshot: SSG path transformation pipeline fn test_snapshot_ssg_pipeline(): Unit with {Test} = { let input = "pages/about.md" let slug = lib.stem(input) let outputDir = lib.join("_site", slug) let indexFile = lib.join(outputDir, "index.html") Test.assertEqualMsg("about", slug, "snap: slug") Test.assertEqualMsg("_site/about", outputDir, "snap: output dir") Test.assertEqualMsg("_site/about/index.html", indexFile, "snap: index file") Test.assertEqualMsg("_site/about", lib.dirname(indexFile), "snap: dirname of index") Test.assertEqualMsg("index.html", lib.basename(indexFile), "snap: basename of index") Test.assertEqualMsg("index", lib.stem(indexFile), "snap: stem of index") } // Snapshot: dotfile handling fn test_snapshot_dotfiles(): Unit with {Test} = { Test.assertEqualMsg(".gitignore", lib.basename("/project/.gitignore"), "snap: dotfile basename") Test.assertEqualMsg("/project", lib.dirname("/project/.gitignore"), "snap: dotfile dirname") Test.assertEqualMsg(".gitignore", lib.stem(".gitignore"), "snap: dotfile stem") Test.assertEqualMsg("json", match lib.extension(".eslintrc.json") { Some(e) => e, None => "" }, "snap: dotconfig extension") Test.assertEqualMsg(".eslintrc", lib.stem(".eslintrc.json"), "snap: dotconfig stem") } // Snapshot: path join normalization fn test_snapshot_join_normalization(): Unit with {Test} = { Test.assertEqualMsg("/a/b", lib.join("/a", "b"), "snap: normal join") Test.assertEqualMsg("/a/b", lib.join("/a/", "b"), "snap: trailing slash join") Test.assertEqualMsg("/a/b", lib.join("/a", "/b"), "snap: leading slash join") Test.assertEqualMsg("/a/b", lib.join("/a/", "/b"), "snap: both slash join") Test.assertEqualMsg("b", lib.join("", "b"), "snap: empty first join") Test.assertEqualMsg("a", lib.join("a", ""), "snap: empty second join") Test.assertEqualMsg("", lib.join("", ""), "snap: both empty join") }