From 17a7d4e8ddcc0117f5b800e40f258c003224d15d Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Fri, 9 Jan 2026 15:40:02 +0100 Subject: [PATCH] test: stabilize Windows test env (#567) (thanks @erikpr1994) --- src/agents/bash-tools.test.ts | 59 +++++++++++++++++++---------------- test/setup.ts | 5 +++ 2 files changed, 37 insertions(+), 27 deletions(-) diff --git a/src/agents/bash-tools.test.ts b/src/agents/bash-tools.test.ts index 825a4cc20..19a961bf9 100644 --- a/src/agents/bash-tools.test.ts +++ b/src/agents/bash-tools.test.ts @@ -50,35 +50,40 @@ beforeEach(() => { }); describe("bash tool backgrounding", () => { - it("backgrounds after yield and can be polled", async () => { - const result = await bashTool.execute("call1", { - command: joinCommands([yieldDelayCmd, "echo done"]), - yieldMs: 10, - }); - - expect(result.details.status).toBe("running"); - const sessionId = (result.details as { sessionId: string }).sessionId; - - let status = "running"; - let output = ""; - const deadline = Date.now() + (process.platform === "win32" ? 8000 : 2000); - - while (Date.now() < deadline && status === "running") { - const poll = await processTool.execute("call2", { - action: "poll", - sessionId, + it( + "backgrounds after yield and can be polled", + async () => { + const result = await bashTool.execute("call1", { + command: joinCommands([yieldDelayCmd, "echo done"]), + yieldMs: 10, }); - status = (poll.details as { status: string }).status; - const textBlock = poll.content.find((c) => c.type === "text"); - output = textBlock?.text ?? ""; - if (status === "running") { - await sleep(20); - } - } - expect(status).toBe("completed"); - expect(output).toContain("done"); - }); + expect(result.details.status).toBe("running"); + const sessionId = (result.details as { sessionId: string }).sessionId; + + let status = "running"; + let output = ""; + const deadline = + Date.now() + (process.platform === "win32" ? 8000 : 2000); + + while (Date.now() < deadline && status === "running") { + const poll = await processTool.execute("call2", { + action: "poll", + sessionId, + }); + status = (poll.details as { status: string }).status; + const textBlock = poll.content.find((c) => c.type === "text"); + output = textBlock?.text ?? ""; + if (status === "running") { + await sleep(20); + } + } + + expect(status).toBe("completed"); + expect(output).toContain("done"); + }, + isWin ? 15_000 : 5_000, + ); it("supports explicit background", async () => { const result = await bashTool.execute("call1", { diff --git a/test/setup.ts b/test/setup.ts index 0af5a6299..b52d10977 100644 --- a/test/setup.ts +++ b/test/setup.ts @@ -12,12 +12,16 @@ const originalXdgConfigHome = process.env.XDG_CONFIG_HOME; const originalXdgDataHome = process.env.XDG_DATA_HOME; const originalXdgStateHome = process.env.XDG_STATE_HOME; const originalXdgCacheHome = process.env.XDG_CACHE_HOME; +const originalStateDir = process.env.CLAWDBOT_STATE_DIR; const originalTestHome = process.env.CLAWDBOT_TEST_HOME; const tempHome = fs.mkdtempSync(path.join(os.tmpdir(), "clawdbot-test-home-")); process.env.HOME = tempHome; process.env.USERPROFILE = tempHome; process.env.CLAWDBOT_TEST_HOME = tempHome; +if (process.platform === "win32") { + process.env.CLAWDBOT_STATE_DIR = path.join(tempHome, ".clawdbot"); +} process.env.XDG_CONFIG_HOME = path.join(tempHome, ".config"); process.env.XDG_DATA_HOME = path.join(tempHome, ".local", "share"); process.env.XDG_STATE_HOME = path.join(tempHome, ".local", "state"); @@ -35,6 +39,7 @@ process.on("exit", () => { restoreEnv("XDG_DATA_HOME", originalXdgDataHome); restoreEnv("XDG_STATE_HOME", originalXdgStateHome); restoreEnv("XDG_CACHE_HOME", originalXdgCacheHome); + restoreEnv("CLAWDBOT_STATE_DIR", originalStateDir); restoreEnv("CLAWDBOT_TEST_HOME", originalTestHome); try { fs.rmSync(tempHome, { recursive: true, force: true });