test: reclassify bash pty suites as unit tests
This commit is contained in:
78
src/agents/bash-tools.process.send-keys.test.ts
Normal file
78
src/agents/bash-tools.process.send-keys.test.ts
Normal file
@@ -0,0 +1,78 @@
|
||||
import { afterEach, expect, test } from "vitest";
|
||||
import { resetProcessRegistryForTests } from "./bash-process-registry.js";
|
||||
import { createExecTool } from "./bash-tools.exec.js";
|
||||
import { createProcessTool } from "./bash-tools.process.js";
|
||||
|
||||
afterEach(() => {
|
||||
resetProcessRegistryForTests();
|
||||
});
|
||||
|
||||
async function startPtySession(command: string) {
|
||||
const execTool = createExecTool({ security: "full", ask: "off" });
|
||||
const processTool = createProcessTool();
|
||||
const result = await execTool.execute("toolcall", {
|
||||
command,
|
||||
pty: true,
|
||||
background: true,
|
||||
});
|
||||
|
||||
expect(result.details.status).toBe("running");
|
||||
const sessionId = (result.details as { sessionId: string }).sessionId;
|
||||
expect(sessionId).toBeTruthy();
|
||||
return { processTool, sessionId };
|
||||
}
|
||||
|
||||
async function waitForSessionCompletion(params: {
|
||||
processTool: ReturnType<typeof createProcessTool>;
|
||||
sessionId: string;
|
||||
expectedText: string;
|
||||
}) {
|
||||
await expect
|
||||
.poll(
|
||||
async () => {
|
||||
const poll = await params.processTool.execute("toolcall", {
|
||||
action: "poll",
|
||||
sessionId: params.sessionId,
|
||||
});
|
||||
const details = poll.details as { status?: string; aggregated?: string };
|
||||
if (details.status === "running") {
|
||||
return false;
|
||||
}
|
||||
expect(details.status).toBe("completed");
|
||||
expect(details.aggregated ?? "").toContain(params.expectedText);
|
||||
return true;
|
||||
},
|
||||
{
|
||||
timeout: process.platform === "win32" ? 4000 : 2000,
|
||||
interval: 30,
|
||||
},
|
||||
)
|
||||
.toBe(true);
|
||||
}
|
||||
|
||||
test("process send-keys encodes Enter for pty sessions", async () => {
|
||||
const { processTool, sessionId } = await startPtySession(
|
||||
'node -e "const dataEvent=String.fromCharCode(100,97,116,97);process.stdin.on(dataEvent,d=>{process.stdout.write(d);if(d.includes(10)||d.includes(13))process.exit(0);});"',
|
||||
);
|
||||
|
||||
await processTool.execute("toolcall", {
|
||||
action: "send-keys",
|
||||
sessionId,
|
||||
keys: ["h", "i", "Enter"],
|
||||
});
|
||||
|
||||
await waitForSessionCompletion({ processTool, sessionId, expectedText: "hi" });
|
||||
});
|
||||
|
||||
test("process submit sends Enter for pty sessions", async () => {
|
||||
const { processTool, sessionId } = await startPtySession(
|
||||
'node -e "const dataEvent=String.fromCharCode(100,97,116,97);const submitted=String.fromCharCode(115,117,98,109,105,116,116,101,100);process.stdin.on(dataEvent,d=>{if(d.includes(10)||d.includes(13)){process.stdout.write(submitted);process.exit(0);}});"',
|
||||
);
|
||||
|
||||
await processTool.execute("toolcall", {
|
||||
action: "submit",
|
||||
sessionId,
|
||||
});
|
||||
|
||||
await waitForSessionCompletion({ processTool, sessionId, expectedText: "submitted" });
|
||||
});
|
||||
Reference in New Issue
Block a user