/** * @file desktop-env.test.js * @description Unit tests for the graphical-session variables forwarded into a * lane's tmux pane. Without them a `claude` started by the dashboard has no * DISPLAY/WAYLAND_DISPLAY at all and answers "no image found in clipboard" on * a paste, while the same CLI works in a normal terminal. * @author Nguyễn Ngọc Trí Vĩ */ const { describe, it, beforeEach, afterEach } = require("node:test"); const assert = require("node:assert/strict"); const { desktopEnv, FORWARDED, __setExecImpl } = require("../lib/desktop-env"); const saved = {}; describe("desktopEnv", () => { beforeEach(() => { for (const name of FORWARDED) { saved[name] = process.env[name]; delete process.env[name]; } }); afterEach(() => { for (const name of FORWARDED) { if (saved[name] === undefined) delete process.env[name]; else process.env[name] = saved[name]; } }); it("reads the systemd user manager's environment", () => { __setExecImpl( () => "XDG_RUNTIME_DIR=/run/user/1001\nDISPLAY=:0\nXAUTHORITY=/run/user/1001/gdm/Xauthority\n" ); assert.deepEqual(desktopEnv(), { DISPLAY: ":0", XAUTHORITY: "/run/user/1001/gdm/Xauthority", XDG_RUNTIME_DIR: "/run/user/1001", }); }); it("prefers this process's own value — a checkout run from a terminal has the real one", () => { process.env.DISPLAY = ":1"; __setExecImpl(() => "DISPLAY=:0\n"); assert.equal(desktopEnv().DISPLAY, ":1"); }); it("forwards nothing when there is no systemd user manager (macOS, a container)", () => { __setExecImpl(() => { throw new Error("systemctl: not found"); }); assert.deepEqual(desktopEnv(), {}); }); it("forwards only the clipboard-related names, never the whole session", () => { __setExecImpl(() => "DISPLAY=:0\nSSH_AUTH_SOCK=/tmp/agent\nPATH=/usr/bin\n"); assert.deepEqual(Object.keys(desktopEnv()), ["DISPLAY"]); }); it("drops a value carrying a newline — it becomes a tmux -e argv", () => { __setExecImpl(() => ""); process.env.WAYLAND_DISPLAY = "wayland-0\ninjected"; assert.equal(desktopEnv().WAYLAND_DISPLAY, undefined); }); });