lobster/test/exec_stdin.test.ts
2026-05-04 01:56:15 +01:00

46 lines
1.2 KiB
TypeScript

import test from "node:test";
import assert from "node:assert/strict";
import { createDefaultRegistry } from "../src/commands/registry.js";
function streamOf(items) {
return (async function* () {
for (const item of items) yield item;
})();
}
test("exec --stdin jsonl feeds pipeline input to subprocess", async () => {
const registry = createDefaultRegistry();
const cmd = registry.get("exec");
const nodeScript = [
"let d='';",
"process.stdin.on('data',c=>d+=c);",
"process.stdin.on('end',()=>{",
" const lines=d.trim().split('\\n').filter(Boolean);",
" console.log(JSON.stringify(lines));",
"});",
].join("");
const result = await cmd.run({
input: streamOf([{ a: 1 }, { a: 2 }]),
args: {
_: ["node", "-e", nodeScript],
stdin: "jsonl",
json: true,
},
ctx: {
stdin: process.stdin,
stdout: process.stdout,
stderr: process.stderr,
env: process.env,
registry,
mode: "human",
render: { json() {}, lines() {} },
},
});
const items = [];
for await (const item of result.output) items.push(item);
assert.deepEqual(items, ['{"a":1}', '{"a":2}']);
});