初始化

This commit is contained in:
2026-07-30 06:39:46 +08:00
commit 1a460f3f1d
23 changed files with 3025 additions and 0 deletions
+38
View File
@@ -0,0 +1,38 @@
import assert from "node:assert/strict";
import { readFile } from "node:fs/promises";
import test from "node:test";
import {
calculateSlotCanvasY,
calculateStackContentHeight,
} from "../web/pipeline_editor.js";
test("pipeline panel height is based only on children, gaps and padding", () => {
const height = calculateStackContentHeight([28, 116, 28], 8, 5, 9);
assert.equal(height, 202);
});
test("pipeline layout never feeds the allocated container height back into sizing", async () => {
const source = await readFile(new URL("../web/pipeline_editor.js", import.meta.url), "utf8");
assert.doesNotMatch(source, /root\.scrollHeight/);
});
test("custom branch slot positions cannot push the DOM widget down every frame", async () => {
const source = await readFile(new URL("../web/pipeline_editor.js", import.meta.url), "utf8");
assert.match(source, /node\.widgets_start_y\s*=\s*PIPELINE_WIDGET_START_Y/);
assert.doesNotMatch(source, /node\.computeSize\?\.\(\)/);
});
test("branch sockets include the DOM widget margin when aligning to rows", () => {
assert.equal(calculateSlotCanvasY(4, 120, 10), 134);
});
test("dynamic socket labels do not expose internal branch ids", async () => {
const source = await readFile(new URL("../web/pipeline_editor.js", import.meta.url), "utf8");
assert.match(source, /input\.label\s*=\s*" "/);
assert.doesNotMatch(source, /input\.label\s*=\s*""/);
});