Files
matrix-screen-controller/核桃派软件源代码/tests/test_ui_copy_editor.mjs
T

50 lines
2.5 KiB
JavaScript

import assert from "node:assert/strict";
import { readFile } from "node:fs/promises";
import test from "node:test";
const editorRoot = new URL("../app/ui_copy_editor/static/", import.meta.url);
test("special editor exposes the agreed modes and guarded editing flow", async () => {
const [source, style, runtime, board, device, html] = await Promise.all([
readFile(new URL("editor.js", editorRoot), "utf8"),
readFile(new URL("editor.css", editorRoot), "utf8"),
readFile(new URL("../../static/ui-copy-runtime.js", editorRoot), "utf8"),
readFile(new URL("../../static/scene-board.js", editorRoot), "utf8"),
readFile(new URL("../../static/views/device.js", editorRoot), "utf8"),
readFile(new URL("../../static/index.html", editorRoot), "utf8"),
]);
assert.match(source, /data-mode="browse"/);
assert.match(source, /data-mode="select"/);
assert.match(source, /data-mode="insert"/);
assert.match(source, /确定修改/);
assert.match(source, /删除这行文字/);
assert.match(source, /确认删除文字/);
assert.match(source, /"If-Match": etag/);
assert.match(source, /event\.stopImmediatePropagation\(\)/);
assert.match(source, /crypto\.randomUUID\(\)/);
assert.match(source, /history\.push/);
assert.match(source, /页面和输入内容均未改变/);
assert.doesNotMatch(source, /MutationObserver/);
assert.doesNotMatch(source, /setTimeout/);
assert.doesNotMatch(source, /applyAllBindings/);
assert.doesNotMatch(source, /innerHTML\s*=\s*copyTextInput/);
const inputHandler = source.match(/elements\.copyForm\.addEventListener\("input", \(\) => \{([\s\S]*?)\n\}\);/)?.[1] || "";
assert.doesNotMatch(inputHandler, /fetch|setUiCopyDraft|applyUiCopyId|textContent\s*=/);
assert.match(runtime, /preserveAccessibleName/);
assert.match(runtime, /record\.defaultHidden/);
assert.match(source, /恢复显示这行文字/);
assert.doesNotMatch(runtime, /\.hidden\s*=/);
assert.doesNotMatch(runtime, /MutationObserver/);
assert.match(board, /renderUiCopy\("copy\.dynamic\.board\.monitor_eyebrow"/);
assert.match(device, /copy\.dynamic\.device\.voltage_ok/);
assert.match(html, /id="topbar-cpu"[^>]*data-ui-copy-value/);
assert.match(html, /id="brightness-value"[^>]*data-ui-copy-value/);
assert.match(style, /#ui-copy-editor-toggle[\s\S]*position:\s*fixed/);
assert.match(style, /right:\s*max\(16px, env\(safe-area-inset-right\)\)/);
assert.match(style, /@media \(max-width: 40rem\)/);
assert.doesNotMatch(style, /\.ui-copy-custom-insertion[\s\S]{0,250}position:\s*absolute/);
});