mirror of
https://github.com/TextPlace/CoreTextPlace.git
synced 2025-05-01 05:01:11 +00:00
115 lines
2.8 KiB
TypeScript
115 lines
2.8 KiB
TypeScript
import {
|
|
assert,
|
|
assertEquals,
|
|
assertThrows,
|
|
} from "https://deno.land/std@0.224.0/assert/mod.ts";
|
|
|
|
import { applyChange, createSection } from "../logic/section.ts";
|
|
import type { SectionData } from "../types/section.ts";
|
|
|
|
Deno.test("section", async (t) => {
|
|
let section: SectionData | undefined;
|
|
|
|
await t.step("createSection non-lcm", () => {
|
|
assertThrows(() => {
|
|
createSection(
|
|
{ sx: 0, sy: 0 },
|
|
{
|
|
xSections: 2,
|
|
ySections: 2,
|
|
sectionWidth: 3,
|
|
sectionHeight: 3,
|
|
defaultCh: " ",
|
|
defaultColor: "F",
|
|
defaultBgColor: "0",
|
|
defaultWidth: 1,
|
|
},
|
|
);
|
|
});
|
|
});
|
|
|
|
await t.step("createSection non-origin section", () => {
|
|
section = createSection(
|
|
{ sx: 1, sy: 1 },
|
|
{
|
|
xSections: 2,
|
|
ySections: 2,
|
|
sectionWidth: 4,
|
|
sectionHeight: 3,
|
|
defaultCh: " ",
|
|
defaultColor: "F",
|
|
defaultBgColor: "0",
|
|
defaultWidth: 1,
|
|
},
|
|
);
|
|
|
|
assertEquals(section.offsetX, 4);
|
|
assertEquals(section.offsetY, 3);
|
|
});
|
|
|
|
await t.step("createSection", () => {
|
|
section = createSection(
|
|
{ sx: 0, sy: 0 },
|
|
{
|
|
xSections: 2,
|
|
ySections: 2,
|
|
sectionWidth: 4,
|
|
sectionHeight: 3,
|
|
defaultCh: " ",
|
|
defaultColor: "F",
|
|
defaultBgColor: "0",
|
|
defaultWidth: 1,
|
|
},
|
|
);
|
|
|
|
assertEquals(section.offsetX, 0);
|
|
assertEquals(section.offsetY, 0);
|
|
|
|
function assertSectionContent<T>(
|
|
content: T[][],
|
|
rowCount: number,
|
|
columnCount: number,
|
|
value: T,
|
|
) {
|
|
assertEquals(content.length, rowCount);
|
|
for (const row of content) {
|
|
assertEquals(row.length, columnCount);
|
|
for (const item of row) {
|
|
assertEquals(item, value);
|
|
}
|
|
}
|
|
}
|
|
|
|
assertSectionContent(section.ch, 3, 4, " ");
|
|
assertSectionContent(section.color, 3, 4, "F");
|
|
assertSectionContent(section.bgColor, 3, 4, "0");
|
|
assertSectionContent(section.width, 3, 4, 1);
|
|
});
|
|
|
|
await t.step("applyChange 1-width", () => {
|
|
assert(section);
|
|
|
|
applyChange({ x: 0, y: 0, ch: "t" }, section);
|
|
assertEquals(section.ch[0][0], "t");
|
|
assertEquals(section.ch[0][1], " ");
|
|
assertEquals(section.width[0][0], 1);
|
|
});
|
|
|
|
await t.step("applyChange 2-width at a correct position", () => {
|
|
assert(section);
|
|
|
|
applyChange({ x: 0, y: 0, ch: "あ" }, section);
|
|
assertEquals(section.ch[0][0], "あ");
|
|
assertEquals(section.ch[0][1], " ");
|
|
assertEquals(section.width[0][0], 2);
|
|
});
|
|
|
|
await t.step("applyChange 2-width at an alternate position", () => {
|
|
assert(section);
|
|
|
|
applyChange({ x: 1, y: 0, ch: "あ" }, section);
|
|
assertEquals(section.ch[0][0], "あ");
|
|
assertEquals(section.ch[0][1], " ");
|
|
assertEquals(section.width[0][0], 2);
|
|
});
|
|
});
|