Files
remoteconn-gitea/apps/miniprogram/pages/terminal/terminalSnapshotCodec.test.ts
2026-03-21 18:57:10 +08:00

43 lines
1.5 KiB
TypeScript

import { describe, expect, it } from "vitest";
const {
createBlankCell,
createContinuationCell,
createTerminalCell,
lineCellsToText
} = require("./terminalCursorModel.js");
const {
deserializeTerminalSnapshotRows,
serializeTerminalSnapshotRows
} = require("./terminalSnapshotCodec.js");
describe("terminalSnapshotCodec", () => {
it("会用压缩 run 快照往返恢复 ANSI 样式与占位空白", () => {
const styleA = { fg: "#ff5f56", bg: "#1f2937", bold: true, underline: false };
const styleB = { fg: "#5bd2ff", bg: "", bold: false, underline: true };
const rows = [
[
createTerminalCell("E", styleA, 1),
createTerminalCell("R", styleA, 1),
createTerminalCell("R", styleA, 1),
createBlankCell(styleA),
createTerminalCell("中", styleB, 2),
createContinuationCell(styleB),
createTerminalCell("A", styleB, 1)
]
];
const snapshot = serializeTerminalSnapshotRows(rows);
const restored = deserializeTerminalSnapshotRows(snapshot.styledLines, snapshot.styleTable);
const restoredRow = restored[0] || [];
expect(lineCellsToText(restoredRow)).toBe("ERR 中A");
expect(restoredRow[0]?.style).toEqual(styleA);
expect(restoredRow[3]?.placeholder).toBe(true);
expect(restoredRow[3]?.style).toEqual(styleA);
expect(restoredRow[4]?.style).toEqual(styleB);
expect(restoredRow[5]?.continuation).toBe(true);
expect(restoredRow[6]?.style).toEqual(styleB);
});
});