Files
linuxcncWebWASM/web/worker/test_python_callbacks.mjs

28 lines
2.1 KiB
JavaScript

import assert from "node:assert/strict";
import { readFile } from "node:fs/promises";
import createModule from "../../build-wasm/linuxcnc-sim-core.js";
import { PythonCallbacks } from "./python-callbacks.mjs";
import { SimSession, CONTEXT_ID } from "./sim-session.mjs";
const callbacks = new PythonCallbacks();
assert.equal(callbacks.registerRemap("M6", { prolog: "m6_prolog", epilog: "m6_epilog" }, ({ phase }) => phase).status, "verified");
assert.equal(callbacks.invoke("remap", "M6", "prolog", [1]).value, "prolog");
assert.equal(callbacks.registerFilter("pure", () => "G1 X1").status, "verified");
assert.equal(callbacks.filter("pure", "G1 X1").status, "verified");
assert.equal(callbacks.filter("pure", "import subprocess").code, "real_hardware_excluded");
assert.equal(callbacks.registerVcp("panel", [{ name: "enabled", type: "bit" }], ({ args }) => args[1]).status, "verified");
assert.equal(callbacks.updateVcp("panel", "enabled", 1).status, "verified");
const saved = callbacks.export(); const restored = new PythonCallbacks(); assert.deepEqual(restored.restore(saved), saved);
const core = await createModule({ wasmBinary: await readFile(new URL("../../build-wasm/linuxcnc-sim-core.wasm", import.meta.url)) });
const session = new SimSession(core, { sessionId: "callbacks" });
const base = { schema_version: 1, context_id: CONTEXT_ID, session_id: "callbacks" };
const send = (kind, seq, operation_id, payload = {}) => session.accept({ ...base, kind, seq, operation_id, payload });
send("HELLO", 1); send("SESSION_ATTACH", 2, "attach");
assert.equal(send("REMAP_REGISTER", 3, "remap", { name: "M6", prolog: "m6_prolog" }).payload.callbacks.remaps.M6.name, "M6");
assert.equal(send("REMAP_CALL", 4, "call", { name: "M6", phase: "prolog" }).payload.status, "verified");
const blocked = send("FILTER_EXEC", 5, "filter", { name: "M6", source: "os.system('x')" });
assert.equal(blocked.kind, "ERROR");
assert.equal(blocked.payload.code, "real_hardware_excluded");
console.log(`python_callbacks=passed remap=${callbacks.state.calls.length} errors=${callbacks.state.errors.length} worker=${blocked.payload.code}`);