mirror of
https://github.com/morluto/rea
synced 2026-10-26 06:16:17 -04:00
d01ee7b19a
Join identity-verified PTY family cleanup and native exit before workspace removal, retaining failed cleanup capabilities for retry. Replace duplicate kill-and-reject loops with shared process ownership and deadlines. Capture configuration before setup using owned file handles and compare raw bytes. Preserve interactive cancellation, terminal restoration, redirected output, and selected inputs; remove the test-only forwarding export. Verified 122 focused cases, 9 README cases, build, static checks, docs, discovery, and duplication at 3.58%.
64 lines
2.4 KiB
TypeScript
64 lines
2.4 KiB
TypeScript
import { readFile, writeFile } from "node:fs/promises";
|
|
import { join } from "node:path";
|
|
import { expect, it } from "vitest";
|
|
|
|
import { assertClientConfig } from "../../../scripts/verify-package-setup.mjs";
|
|
import { terminalModesRestored } from "../../../scripts/lib/verify-setup-terminal.mjs";
|
|
import { createTestTempDirectory } from "../../fixtures/temporaryDirectory.js";
|
|
|
|
it("requires positive canonical-input and echo terminal mode tokens", () => {
|
|
expect(terminalModesRestored("speed 38400 baud; icanon echo isig")).toBe(
|
|
true,
|
|
);
|
|
expect(terminalModesRestored("speed 38400 baud; -icanon -echo isig")).toBe(
|
|
false,
|
|
);
|
|
expect(terminalModesRestored("speed 38400 baud; -icanon echo isig")).toBe(
|
|
false,
|
|
);
|
|
expect(terminalModesRestored("speed 38400 baud; icanon -echo isig")).toBe(
|
|
false,
|
|
);
|
|
});
|
|
|
|
it("rejects a backup replaced with the post-setup client configuration", async () => {
|
|
const directory = await createTestTempDirectory("rea-client-backup-");
|
|
const path = join(directory, "client.json");
|
|
const original = Buffer.from('{"existing":true,"model":"caller"}\n');
|
|
const configured = JSON.stringify({
|
|
existing: true,
|
|
model: "caller",
|
|
mcpServers: { rea: { command: process.execPath, args: ["mcp"] } },
|
|
});
|
|
await writeFile(path, configured);
|
|
await writeFile(`${path}.rea.backup`, original);
|
|
await assertClientConfig(process.execPath, path, original);
|
|
|
|
await writeFile(`${path}.rea.backup`, configured);
|
|
await expect(
|
|
assertClientConfig(process.execPath, path, original),
|
|
).rejects.toThrow("packaged client backup failed");
|
|
expect(await readFile(path, "utf8")).toBe(configured);
|
|
});
|
|
|
|
it("compares backup bytes even when invalid UTF-8 decodes to the same text", async () => {
|
|
const directory = await createTestTempDirectory("rea-client-backup-bytes-");
|
|
const path = join(directory, "client.json");
|
|
const original = Buffer.from('{"existing":true,"note":"\uFFFD"}\n');
|
|
const configured = JSON.stringify({
|
|
existing: true,
|
|
mcpServers: { rea: { command: process.execPath, args: ["mcp"] } },
|
|
});
|
|
const changed = Buffer.concat([
|
|
Buffer.from('{"existing":true,"note":"'),
|
|
Buffer.from([0xff]),
|
|
Buffer.from('"}\n'),
|
|
]);
|
|
expect(changed.toString("utf8")).toBe(original.toString("utf8"));
|
|
await writeFile(path, configured);
|
|
await writeFile(`${path}.rea.backup`, changed);
|
|
await expect(
|
|
assertClientConfig(process.execPath, path, original),
|
|
).rejects.toThrow("packaged client backup failed");
|
|
});
|