Something went wrong. Try again.
[READ-ONLY] Mirror of https://github.com/bombshell-dev/tty. Platform independent 2D layout engine for terminal applications based on Clay bomb.sh/docs/tty
Something went wrong. Try again.
TypeScript
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112import { beforeEach, describe, expect, it } from "./suite.ts";import { createTerm, type Term } from "../term.ts";import { close, grow, open, text } from "../ops.ts";import { assert, validate, validated } from "../validate.ts";import { print } from "./print.ts";
const decode = (bytes: Uint8Array) => new TextDecoder().decode(bytes);
describe("validate", () => { it("accepts valid ops", () => { expect(validate([ open("root", { layout: { width: grow(), height: grow() } }), text("hello"), close(), ])).toBe(true); });
it("accepts empty array", () => { expect(validate([])).toBe(true); });
it("rejects ops with wrong directive", () => { expect(validate([{ directive: 0xff }])).toBe(false); });
it("rejects open element missing id", () => { expect(validate([{ directive: 0x02 }])).toBe(false); });
it("rejects text missing content", () => { expect(validate([{ directive: 0x03 }])).toBe(false); });
it("rejects non-array", () => { expect(validate("garbage")).toBe(false); });
it("rejects null", () => { expect(validate(null)).toBe(false); });
it("assert throws TypeError on bad input", () => { expect(() => assert([{ directive: 0x02 }])).toThrow(TypeError); });
it("rejects padding > 255 (u8 overflow)", () => { expect(validate([ open("x", { layout: { padding: { left: 300 } } }), close(), ])).toBe(false); });
it("rejects fractional padding", () => { expect(validate([ open("x", { layout: { padding: { left: 1.5 } } }), close(), ])).toBe(false); });
it("rejects fontSize > 255", () => { expect(validate([text("hi", { fontSize: 256 })])).toBe(false); });
it("rejects gap > 65535 (u16 overflow)", () => { expect(validate([ open("x", { layout: { gap: 70000 } }), close(), ])).toBe(false); });
it("rejects negative border width", () => { expect(validate([ open("x", { border: { color: 0xFF0000, left: -1 } }), close(), ])).toBe(false); });
it("rejects fractional color", () => { expect(validate([text("hi", { color: 1.5 })])).toBe(false); });});
describe("validated", () => { let term: Term;
beforeEach(async () => { term = validated(await createTerm({ width: 40, height: 10 })); });
it("renders valid ops normally", () => { let out = print( decode( term.render([ open("root", { layout: { width: grow(), height: grow(), direction: "ttb" }, }), text("Hello, World!"), close(), ]).output, ), 40, 10, ); expect(out).toContain("Hello, World!"); });
it("throws on invalid ops", () => { // deno-lint-ignore no-explicit-any expect(() => term.render([{ directive: 0xff }] as any)).toThrow(TypeError); });});