import { describe, expect, it } from "vitest";
import { writeAllSync } from "../src/cli/commands/desktop.js";
describe("desktop stdout writes", () => {
it("continues after partial writes and EAGAIN", () => {
const input = Buffer.from('{"type":"$session_loaded","messages":["large"]}\n', "utf8");
const chunks: Buffer[] = [];
let calls = 0;
let waits = 0;
writeAllSync(1, input, {
write: (_fd, buffer, offset, length) => {
calls++;
if (calls === 1) {
const written = Math.min(4, length);
chunks.push(Buffer.from(buffer.subarray(offset, offset + written)));
return written;
}
if (calls === 2) {
const err = new Error("try again") as NodeJS.ErrnoException;
err.code = "EAGAIN";
throw err;
}
chunks.push(Buffer.from(buffer.subarray(offset, offset + length)));
return length;
},
wait: () => {
waits++;
},
});
expect(Buffer.concat(chunks).toString("utf8")).toBe(input.toString("utf8"));
expect(calls).toBe(3);
expect(waits).toBe(1);
});
});