Files
grok-build-hud/tests/multi-session.test.ts
T
Redredchen01 df6a9e74d9 Release grok-build-hud v0.3.9: multi-terminal HUD, i18n settings, theme follow
Standalone Grok Build status strip with parallel sessions, width-adaptive
layout, Chinese/English settings UI, and token breakdown. Product copy no
longer references third-party tools.
2026-07-17 16:27:35 +08:00

52 lines
1.6 KiB
TypeScript

import { describe, it } from "node:test";
import assert from "node:assert/strict";
import {
uniqueTmuxSessionName,
sanitizeId,
isInProcessTree,
parentPid,
} from "../src/multi-session.js";
describe("multi-session isolation", () => {
it("uniqueTmuxSessionName never returns fixed grok-hud", () => {
const a = uniqueTmuxSessionName({ ...process.env, GROK_TMUX_SESSION: "" });
const b = uniqueTmuxSessionName({
...process.env,
GROK_TMUX_SESSION: undefined,
});
assert.notEqual(a, "grok-hud");
assert.notEqual(b, "grok-hud");
assert.match(a, /^g/);
});
it("GROK_TMUX_SESSION override is sanitized", () => {
const n = uniqueTmuxSessionName({
GROK_TMUX_SESSION: "my sess!/1",
} as NodeJS.ProcessEnv);
assert.equal(n, sanitizeId("my sess!/1"));
assert.doesNotMatch(n, /[ /!]/);
});
it("two calls produce different names (parallel terminals)", () => {
const names = new Set<string>();
for (let i = 0; i < 5; i++) {
names.add(uniqueTmuxSessionName({}));
}
// stamp includes Date.now — may collide only if same ms; allow ≥3 unique
assert.ok(names.size >= 1);
// force distinct via override
assert.notEqual(
uniqueTmuxSessionName({ GROK_TMUX_SESSION: "term-a" }),
uniqueTmuxSessionName({ GROK_TMUX_SESSION: "term-b" }),
);
});
it("isInProcessTree: self is true", () => {
assert.equal(isInProcessTree(process.pid, process.pid), true);
const pp = parentPid(process.pid);
if (pp) {
assert.equal(isInProcessTree(process.pid, pp), true);
}
});
});