summaryrefslogtreecommitdiffhomepage
path: root/packages/desktop-electron/src/main/shell-env.test.ts
diff options
context:
space:
mode:
authorBrendan Allan <[email protected]>2026-04-01 15:01:44 +0800
committerGitHub <[email protected]>2026-04-01 07:01:44 +0000
commit506dd758187c93bae028fbe7bbfd6ed75772ee1b (patch)
treebaae9537e0e123d70a639adbbe3cf34b76d41bd0 /packages/desktop-electron/src/main/shell-env.test.ts
parentc8ecd640220331ce7695d72ea8c618dd8909eab1 (diff)
downloadopencode-506dd758187c93bae028fbe7bbfd6ed75772ee1b.tar.gz
opencode-506dd758187c93bae028fbe7bbfd6ed75772ee1b.zip
electron: port mergeShellEnv logic from tauri (#20192)
Diffstat (limited to 'packages/desktop-electron/src/main/shell-env.test.ts')
-rw-r--r--packages/desktop-electron/src/main/shell-env.test.ts43
1 files changed, 43 insertions, 0 deletions
diff --git a/packages/desktop-electron/src/main/shell-env.test.ts b/packages/desktop-electron/src/main/shell-env.test.ts
new file mode 100644
index 000000000..cfe88277e
--- /dev/null
+++ b/packages/desktop-electron/src/main/shell-env.test.ts
@@ -0,0 +1,43 @@
+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)
+ })
+})