mirror of
https://github.com/TextPlace/CoreTextPlace.git
synced 2025-12-16 12:22:35 +00:00
121 lines
3.7 KiB
TypeScript
121 lines
3.7 KiB
TypeScript
import { describe, it, expect } from "vitest";
|
|
|
|
import {
|
|
createBoard,
|
|
getSectionOnBoard,
|
|
renderFullBoard,
|
|
} from "../src/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();
|
|
});
|
|
});
|