Files
yawn/vendor/fxnode/test/control-edit.test.ts
T

72 lines
2.3 KiB
TypeScript

import test from "node:test";
import assert from "node:assert/strict";
import {
clampNumber,
cycleEnum,
numericStep,
scrubValue,
setNumericComponent,
snapNumber,
} from "@lib/worker/control-edit.js";
import type { LayoutControl } from "@lib/layout/types.js";
const numberControl: LayoutControl = {
id: "number",
nodeId: "node" as LayoutControl["nodeId"],
source: "parameter",
key: "value",
label: "Value",
kind: "number",
value: { kind: "number", value: 0 },
schema: { type: "number", default: { kind: "number", value: 0 }, minimum: -1, maximum: 1, step: 0.25 },
linked: false,
bounds: { x: 0, y: 0, width: 10, height: 10 },
subfields: [],
numericFields: [],
};
test("control edit helpers clamp, snap and apply fine scrub", () => {
assert.equal(clampNumber(2, numberControl.schema), 1);
assert.equal(snapNumber(0.38, numberControl.schema), 0.5);
assert.deepEqual(scrubValue(numberControl, { kind: "number", value: 0 }, 0, 5, true, false), {
kind: "number",
value: 0.05,
});
assert.deepEqual(scrubValue(numberControl, { kind: "number", value: 0 }, 0, 3.8, false, true), {
kind: "number",
value: 0.5,
});
assert.deepEqual(setNumericComponent(numberControl, { kind: "number", value: 0 }, 0, 2), {
kind: "number",
value: 1,
});
assert.equal(numericStep(numberControl, false), 0.25);
assert.equal(numericStep(numberControl, true), 0.025);
});
test("vector/color edits preserve other components and enum cycling wraps", () => {
const vector = {
...numberControl,
kind: "vector" as const,
schema: { type: "vector" as const, default: { kind: "vector" as const, value: [0, 0, 0] as const } },
};
assert.deepEqual(scrubValue(vector, { kind: "vector", value: [1, 2, 3] }, 1, 10, false, false), {
kind: "vector",
value: [1, 3, 3],
});
assert.deepEqual(setNumericComponent(vector, { kind: "vector", value: [1, 2, 3] }, 1, 4), {
kind: "vector",
value: [1, 4, 3],
});
const color = {
...numberControl,
kind: "color" as const,
schema: { type: "color" as const, default: { kind: "color" as const, value: [0, 0, 0, 1] as const } },
};
assert.deepEqual(scrubValue(color, { kind: "color", value: [0, 0.5, 0, 1] }, 1, 10, false, false), {
kind: "color",
value: [0, 1, 0, 1],
});
assert.equal(cycleEnum(["a", "b"], "b", 1), "a");
});