import { describe, expect, test } from "bun:test"; import { windowsPathToPosixPath, posixPathToWindowsPath, } from "../windowsPaths"; // ─── windowsPathToPosixPath ──────────────────────────────────────────── describe("windowsPathToPosixPath", () => { test("converts drive letter path to posix", () => { expect(windowsPathToPosixPath("C:\\Users\\foo")).toBe("/c/Users/foo"); }); test("lowercases the drive letter", () => { expect(windowsPathToPosixPath("D:\\Work\\project")).toBe( "/d/Work/project" ); }); test("handles lowercase drive letter input", () => { expect(windowsPathToPosixPath("e:\\data")).toBe("/e/data"); }); test("converts UNC path", () => { expect(windowsPathToPosixPath("\\\\server\\share\\dir")).toBe( "//server/share/dir" ); }); test("converts root drive path", () => { expect(windowsPathToPosixPath("D:\\")).toBe("/d/"); }); test("converts relative path by flipping backslashes", () => { expect(windowsPathToPosixPath("src\\main.ts")).toBe("src/main.ts"); }); test("handles forward slashes in windows drive path", () => { // The regex matches both / and \\ after drive letter expect(windowsPathToPosixPath("C:/Users/foo")).toBe("/c/Users/foo"); }); test("already-posix relative path passes through", () => { expect(windowsPathToPosixPath("src/main.ts")).toBe("src/main.ts"); }); test("handles deeply nested path", () => { expect( windowsPathToPosixPath("C:\\Users\\me\\Documents\\project\\src\\index.ts") ).toBe("/c/Users/me/Documents/project/src/index.ts"); }); }); // ─── posixPathToWindowsPath ──────────────────────────────────────────── describe("posixPathToWindowsPath", () => { test("converts MSYS2/Git Bash drive path to windows", () => { expect(posixPathToWindowsPath("/c/Users/foo")).toBe("C:\\Users\\foo"); }); test("uppercases the drive letter", () => { expect(posixPathToWindowsPath("/d/Work/project")).toBe( "D:\\Work\\project" ); }); test("converts cygdrive path", () => { expect(posixPathToWindowsPath("/cygdrive/d/work")).toBe("D:\\work"); }); test("converts cygdrive root path", () => { expect(posixPathToWindowsPath("/cygdrive/c/")).toBe("C:\\"); }); test("converts UNC posix path to windows UNC", () => { expect(posixPathToWindowsPath("//server/share/dir")).toBe( "\\\\server\\share\\dir" ); }); test("converts root drive posix path", () => { expect(posixPathToWindowsPath("/d/")).toBe("D:\\"); }); test("converts bare drive mount (no trailing slash)", () => { // /d matches the regex ^\/([A-Za-z])(\/|$) where $2 is empty expect(posixPathToWindowsPath("/d")).toBe("D:\\"); }); test("converts relative path by flipping forward slashes", () => { expect(posixPathToWindowsPath("src/main.ts")).toBe("src\\main.ts"); }); test("handles already-windows relative path", () => { // No leading / or //, just flips / to backslash expect(posixPathToWindowsPath("foo\\bar")).toBe("foo\\bar"); }); }); // ─── round-trip conversions ──────────────────────────────────────────── describe("round-trip conversions", () => { test("drive path round-trips windows -> posix -> windows", () => { const original = "C:\\Users\\foo\\bar"; const posix = windowsPathToPosixPath(original); const back = posixPathToWindowsPath(posix); expect(back).toBe(original); }); test("drive path round-trips posix -> windows -> posix", () => { const original = "/c/Users/foo/bar"; const win = posixPathToWindowsPath(original); const back = windowsPathToPosixPath(win); expect(back).toBe(original); }); });