rea/tests/fixtures/processFidelity.mjs

54 lines
1.6 KiB
JavaScript

import { spawn } from "node:child_process";
const mode = process.argv[2];
if (mode === "interactive") {
process.stdin.setRawMode?.(true);
process.stdin.resume();
process.stdout.write("prompt> ");
process.on("SIGWINCH", () => {
process.stdout.write(
`resize:${String(process.stdout.columns)}x${String(process.stdout.rows)}\n`,
);
});
process.on("SIGINT", () => {
process.stdout.write("signal:SIGINT\n");
process.exit(0);
});
process.stdin.on("data", (value) => {
process.stdout.write(`input:${value.toString()} unicode:雪\n`);
});
} else if (mode === "silent-interactive") {
process.stdin.setRawMode?.(true);
process.stdin.resume();
process.stdin.on("data", (value) => {
process.stdout.write(`input:${value.toString()}\n`);
process.exit(0);
});
} else if (mode === "partial") {
process.stdout.write("partial-");
setTimeout(() => {
process.stdout.write("frame\n");
process.exit(0);
}, 25);
} else if (mode === "tree-child") {
spawn(process.execPath, [process.argv[1], "tree-grandchild"], {
stdio: "ignore",
});
setInterval(() => undefined, 1_000);
} else if (mode === "tree-grandchild") {
setInterval(() => undefined, 1_000);
} else if (mode === "tree") {
spawn(process.execPath, [process.argv[1], "tree-child"], { stdio: "ignore" });
process.stdout.write("tree-ready\n");
setInterval(() => undefined, 1_000);
} else if (mode === "crash") {
process.stderr.write("intentional-crash\n");
process.exit(23);
} else if (mode === "hang") {
setInterval(() => undefined, 1_000);
} else {
process.stderr.write("unknown fixture mode\n");
process.exit(2);
}