import { describe, it, expect } from "vitest"; import { createBoard, getSectionOnBoard, renderFullBoard, } from "../logic/board.ts"; import type { BoardData } from "../src/types/board.ts"; import { checkFullBoard } from "./checkFullBoard.ts"; import { locateSection } from "../src/logic/board.ts"; import { applyChangeOnBoard } from "../src/logic/board.ts"; describe("board", () => { let board: BoardData | undefined; it("createBoard", () => { board = createBoard({ xSections: 3, ySections: 3, sectionWidth: 4, sectionHeight: 3, defaultCh: " ", defaultColor: "F", defaultBgColor: "0", defaultWidth: 1, }); // Sections are created on demand. expect(board.sections.length).toBe(0); }); it("locateSection", () => { expect(board).toBeDefined(); const { sx, sy } = locateSection({ x: 0, y: 0 }, board!.config); expect(sx).toBe(0); expect(sy).toBe(0); const { sx: sx2, sy: sy2 } = locateSection({ x: 4, y: 0 }, board!.config); expect(sx2).toBe(1); expect(sy2).toBe(0); }); it("applyChangeOnBoard", () => { expect(board).toBeDefined(); applyChangeOnBoard({ x: 0, y: 0, ch: "A" }, board!); applyChangeOnBoard({ x: 4, y: 0, ch: "B" }, board!); applyChangeOnBoard({ x: 0, y: 3, ch: "C" }, board!); applyChangeOnBoard({ x: 4, y: 3, ch: "D" }, board!); applyChangeOnBoard({ x: 5, y: 3, ch: "E" }, board!); expect(board!.sections[0][0].ch[0][0]).toBe("A"); expect(board!.sections[0][1].ch[0][0]).toBe("B"); expect(board!.sections[1][0].ch[0][0]).toBe("C"); expect(board!.sections[1][1].ch[0]).toEqual(["D", "E", " ", " "]); applyChangeOnBoard({ x: 0, y: 1, ch: "你" }, board!); applyChangeOnBoard({ x: 4, y: 2, ch: "好" }, board!); applyChangeOnBoard({ x: 0, y: 4, ch: "嗎" }, board!); applyChangeOnBoard({ x: 4, y: 4, ch: "嘛" }, board!); expect(board!.sections[0][0].ch[1][0]).toBe("你"); expect(board!.sections[0][1].ch[2][0]).toBe("好"); expect(board!.sections[1][0].ch[1][0]).toBe("嗎"); expect(board!.sections[1][1].ch[1]).toEqual(["嘛", " ", " ", " "]); applyChangeOnBoard({ x: 5, y: 4, ch: "啊" }, board!); expect(board!.sections[1][1].ch[1]).toEqual(["啊", " ", " ", " "]); }); it("getSectionOnBoard: existing section", () => { expect(board).toBeDefined(); const section = getSectionOnBoard({ sx: 1, sy: 1 }, board!, { readOnly: true, }); expect(section.ch[0]).toEqual(["D", "E", " ", " "]); expect(section.color[0][0]).toBe("F"); expect(section.bgColor[0][0]).toBe("0"); expect(section.width[0]).toEqual([1, 1, 1, 1]); }); it("getSectionOnBoard: non-existing row", () => { expect(board).toBeDefined(); const section = getSectionOnBoard({ sx: 1, sy: 2 }, board!, { readOnly: true, }); expect(section.ch[0][0]).toBe(" "); expect(section.color[0][0]).toBe("F"); expect(section.bgColor[0][0]).toBe("0"); expect(section.width[0][0]).toBe(1); }); it("getSectionOnBoard: non-existing section", () => { expect(board).toBeDefined(); const section = getSectionOnBoard({ sx: 2, sy: 1 }, board!, { readOnly: true, }); expect(section.ch[0][0]).toBe(" "); expect(section.color[0][0]).toBe("F"); expect(section.bgColor[0][0]).toBe("0"); expect(section.width[0][0]).toBe(1); }); it("renderFullBoard", () => { expect(board).toBeDefined(); const rendered = renderFullBoard(board!); checkFullBoard(rendered); }); it("on-demand creation: only changed sections are saved", () => { expect(board).toBeDefined(); expect(board!.sections[2]).toBeUndefined(); expect(board!.sections[0][2]).toBeUndefined(); }); });