Files
linuxcncWebWASM/scripts/test_axis_control_inventory.mjs

37 lines
3.8 KiB
JavaScript

import assert from "node:assert/strict";
import { readFile } from "node:fs/promises";
const root = new URL("../", import.meta.url);
const read = (path) => readFile(new URL(path, root), "utf8");
const [contract, app, panel, preview] = await Promise.all([
read("docs/linuxcnc-axis-web-control-panel-source-logic.md"),
read("web/react/src/App.tsx"),
read("web/react/src/XyzacTrtPanel.tsx"),
read("web/react/src/XyzacToolPreview.tsx"),
]);
const controlIds = [
"menu-file", "menu-file-edit-tool-data", "menu-file-quit", "menu-help", "menu-help-about", "about-close",
"toolbar-estop", "toolbar-power", "toolbar-open", "toolbar-load-case", "toolbar-reload", "toolbar-run", "toolbar-step", "toolbar-pause-resume", "toolbar-stop", "toolbar-block-delete", "toolbar-optional-pause", "toolbar-zoom-in", "toolbar-zoom-out", "toolbar-view-z", "toolbar-view-z2", "toolbar-view-x", "toolbar-view-y", "toolbar-view-y2", "toolbar-view-p", "toolbar-rotate", "toolbar-clear-live-plot",
"workspace-case-select", "workspace-load-3d-chips", "workspace-rtcp-programs", "rtcp-program-scope", "rtcp-program-select", "rtcp-program-source", "rtcp-program-load", "rtcp-program-download", "machine-manager-settings", "machine-manager-import", "machine-manager-files", "machine-manager-delete", "machine-manager-translate", "machine-manager-rotate", "machine-manager-role", "machine-manager-parent", "machine-manager-show-origin", "machine-tree-node", "machine-tree-origin", "machine-tree-axis-role", "machine-test-x", "machine-test-y", "machine-test-z", "machine-test-a", "machine-test-b", "machine-test-c", "machine-test-reset", "machine-test-state", "machine-manager-apply", "machine-manager-export", "manual-home-all", "manual-home-joint-select",
"switchkins-0", "switchkins-1", "switchkins-2",
"tab-manual", "tab-mdi", "tab-diagnostics", "tab-preview", "tab-dro",
"manual-axis-x", "manual-axis-y", "manual-axis-z", "manual-axis-a", "manual-axis-c",
"manual-jog-increment", "manual-jog-negative", "manual-jog-positive", "manual-home-axis", "manual-touch-off", "manual-tool-touch-off", "manual-override-limits",
"manual-spindle-ccw", "manual-spindle-stop", "manual-spindle-cw", "manual-spindle-decrease", "manual-spindle-increase", "manual-spindle-brake", "manual-coolant-mist", "manual-coolant-flood",
"mdi-command", "mdi-submit", "mdi-history-select",
"preview-panLeft", "preview-panRight", "preview-panUp", "preview-panDown", "preview-reset",
"dro-coordinate", "dro-display", "dro-units",
"override-jog-speed", "override-feed", "override-spindle", "override-max-velocity", "override-rapid",
"preview-layer-path", "preview-layer-live", "preview-layer-limits", "preview-layer-velocity", "preview-layer-offsets", "preview-layer-extents",
"program-editor", "program-file-input",
];
for (const id of controlIds) assert.ok(contract.includes(`\`${id}\``), `control missing from source contract: ${id}`);
const [library, manager] = await Promise.all([read("web/react/src/RtcpProgramLibrary.tsx"), read("web/react/src/MachineManagerPanel.tsx")]);
const source = `${app}\n${panel}\n${preview}\n${library}\n${manager}`;
for (const term of ["data-axis-control", "manual-axis-${axis}", "switchkins-${item.type}", "preview-${action}", "preview-layer-${layer}"]) assert.ok(source.includes(term), `control marker missing: ${term}`);
for (const forbidden of ["Prepare T1", ">Change</TextButton>", "Arm Probe", ">Disarm</TextButton>", "Reload editor", "program-actions\"><TextButton", '<Menu label="Machine">', '<Menu label="View">']) assert.equal(source.includes(forbidden), false, `non-source or duplicate control rendered: ${forbidden}`);
console.log(JSON.stringify({ schema: "axis-control-inventory.v1", status: "verified", documented_controls: controlIds.length, duplicate_command_entries_removed: ["machine_menu", "view_menu", "program_pane_load", "tool_probe_commands"], contract: "linuxcnc-axis-web-control-panel-source-logic.md" }));