Files
cnc_wams/web-rtcp-5axis-xyzbc-trt-sim-plan/tests/node/verify_gmoccapy_icon_registry.mjs
2026-07-02 08:01:34 -04:00

64 lines
2.7 KiB
JavaScript

import assert from "node:assert/strict";
import { access, readFile } from "node:fs/promises";
import { join } from "node:path";
import {
GMOCAPY_ICON_REGISTRY_BOUNDARY,
getGmoccapyIcon,
listGmoccapyIconRegistryEntries,
} from "../../app/src/ui/gmoccapy-icon-registry.js";
const repoRoot = new URL("../../..", import.meta.url).pathname.replace(/\/$/, "");
const manifestPath = join(repoRoot, "web-rtcp-5axis-sim-plan/app/src/ui-reference/gmoccapy-button-icons.json");
const manifest = JSON.parse(await readFile(manifestPath, "utf8"));
const manifestIconNames = new Set(manifest.entries.map((entry) => entry.iconName).filter(Boolean));
const registryEntries = listGmoccapyIconRegistryEntries();
assert.equal(GMOCAPY_ICON_REGISTRY_BOUNDARY, "gmoccapy_icon_registry_from_working3_manifest_core_ui_subset");
assert.equal(registryEntries.length >= 40, true);
const required = [
["tbtn_estop", "active", "main_switch_on"],
["tbtn_estop", "inactive", "main_switch_off"],
["tbtn_on", "active", "power_on"],
["rbt_manual", "active", "mode_manual_active"],
["rbt_mdi", "active", "mode_mdi_active"],
["rbt_auto", "active", "mode_auto_active"],
["btn_load", "default", "open_file"],
["btn_reload", "default", "refresh"],
["btn_run", "default", "play"],
["btn_stop", "default", "stop"],
["tbtn_pause", "active", "pause_active"],
["btn_step", "default", "step"],
["btn_homing", "default", "ref_all"],
["btn_tool", "default", "hsk_mill_tool"],
["btn_touch", "default", "touch_off"],
["rbt_forward", "active", "spindle_right_on"],
["rbt_reverse", "active", "spindle_left_on"],
["rbt_stop", "active", "spindle_stop_on"],
["tbtn_flood", "active", "coolant_flood_active"],
["tbtn_mist", "inactive", "coolant_mist_inactive"],
["rbt_view_x", "default", "tool_axis_x"],
["rbt_view_y", "default", "tool_axis_y"],
["rbt_view_z", "default", "tool_axis_z"],
["rbt_view_p", "default", "tool_axis_p"],
["tbtn_view_tool_path", "default", "toolpath"],
["tbtn_view_dimension", "default", "dimensions"],
];
for (const [buttonId, variant, expectedIconName] of required) {
const icon = getGmoccapyIcon(buttonId, variant);
assert.equal(icon.iconName, expectedIconName, `${buttonId}/${variant}`);
assert.equal(icon.fallback, false, `${buttonId}/${variant} should use an asset`);
assert.equal(icon.semanticBoundary, GMOCAPY_ICON_REGISTRY_BOUNDARY);
assert.equal(manifestIconNames.has(icon.iconName), true, `${icon.iconName} missing from manifest`);
assert.match(icon.path, /\/assets\/gmoccapy-icons\//);
await access(new URL(icon.path));
}
const fallback = getGmoccapyIcon("unknown_button", "active");
assert.equal(fallback.iconName, "text_fallback");
assert.equal(fallback.fallback, true);
console.log("gmoccapy_icon_registry_smoke=ok");