[READ-ONLY] Mirror of https://github.com/bombshell-dev/tools. Internal CLI to standardize tooling across all Bombshell projects
Something went wrong. Try again.
1.9 kB · 79 lines
TypeScript
at feat/docs
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980import { describe, it, expect } from "vitest";import { MockReadable, MockWritable } from "./stdio.ts";
describe("MockReadable", () => { it("defaults to non-TTY", () => { const r = new MockReadable(); expect(r.isTTY).toBe(false); expect(r.isRaw).toBe(false); });
it("respects isTTY config", () => { const r = new MockReadable({ isTTY: true }); expect(r.isTTY).toBe(true); });
it("setRawMode enables raw mode", () => { const r = new MockReadable(); r.setRawMode(); expect(r.isRaw).toBe(true); });
it("pushValue delivers data on read", () => new Promise<void>((resolve) => { const r = new MockReadable(); r.on("data", (chunk) => { expect(chunk.toString()).toBe("hello"); resolve(); }); r.pushValue("hello"); }));
it("close ends the stream", async () => { const r = new MockReadable(); r.close();
const chunks: string[] = []; for await (const chunk of r) { chunks.push(chunk.toString()); } expect(chunks).toEqual([]); });});
describe("MockWritable", () => { it("defaults to 80x20 non-TTY", () => { const w = new MockWritable(); expect(w.isTTY).toBe(false); expect(w.columns).toBe(80); expect(w.rows).toBe(20); });
it("accepts custom config", () => { const w = new MockWritable({ columns: 120, rows: 40, isTTY: true }); expect(w.isTTY).toBe(true); expect(w.columns).toBe(120); expect(w.rows).toBe(40); });
it("captures written chunks", () => { const w = new MockWritable(); w.write("hello"); w.write(" world"); expect(w.buffer).toEqual(["hello", " world"]); });
it("resize updates dimensions and emits event", () => { const w = new MockWritable({ columns: 80, rows: 20 }); let resized = false; w.on("resize", () => { resized = true; });
w.resize(120, 40);
expect(w.columns).toBe(120); expect(w.rows).toBe(40); expect(resized).toBe(true); });});