import { describe, expect, test } from "bun:test" import { isNushell, mergeShellEnv, parseShellEnv } from "./shell-env" describe("shell env", () => { test("parseShellEnv supports null-delimited pairs", () => { const env = parseShellEnv(Buffer.from("PATH=/usr/bin:/bin\0FOO=bar=baz\0\0")) expect(env.PATH).toBe("/usr/bin:/bin") expect(env.FOO).toBe("bar=baz") }) test("parseShellEnv ignores invalid entries", () => { const env = parseShellEnv(Buffer.from("INVALID\0=empty\0OK=1\0")) expect(Object.keys(env).length).toBe(1) expect(env.OK).toBe("1") }) test("mergeShellEnv keeps explicit overrides", () => { const env = mergeShellEnv( { PATH: "/shell/path", HOME: "/tmp/home", }, { PATH: "/desktop/path", OPENCODE_CLIENT: "desktop", }, ) expect(env.PATH).toBe("/desktop/path") expect(env.HOME).toBe("/tmp/home") expect(env.OPENCODE_CLIENT).toBe("desktop") }) test("isNushell handles path and binary name", () => { expect(isNushell("nu")).toBe(true) expect(isNushell("/opt/homebrew/bin/nu")).toBe(true) expect(isNushell("C:\\Program Files\\nu.exe")).toBe(true) expect(isNushell("/bin/zsh")).toBe(false) }) })