import assert from "node:assert/strict"; import { PythonBridge, manifest } from "./python-bridge.mjs"; let loadOptions = null; const bridge = new PythonBridge({ loadPyodide: async (options) => { loadOptions = options; return { runPythonAsync: async (source) => source.length }; } }); assert.equal((await bridge.initialize()).status, "verified"); assert.equal(loadOptions.indexURL, manifest.index_url); assert.equal(bridge.importModule("linuxcnc").status, "verified"); assert.equal(bridge.importModule("os").code, "python_unsupported_module"); assert.equal(bridge.checkCapability("subprocess").status, "REAL-EXCLUDED"); assert.equal(bridge.invoke("hal", "pin", ["demo.pin"]).status, "verified"); assert.equal(bridge.invoke("linuxcnc", "command", ["mode", "MDI"]).value.mode, "MDI"); assert.equal(bridge.invoke("hal", "component", ["demo"]).status, "verified"); assert.equal(bridge.invoke("hal", "pin", ["demo.pin", 1.5]).value.value, 1.5); assert.equal(bridge.importModule("tool").status, "verified"); assert.equal(bridge.invoke("tool", "set", [7, { length: 12 }]).value.length, 12); assert.equal(bridge.invoke("parameter", "set", [100, 2.5]).value, 2.5); assert.equal(bridge.configureIni({ RS274NGC: { PROGRAM: "main.ngc" } }).status, "verified"); assert.equal(bridge.invoke("INI", "find", ["RS274NGC", "PROGRAM"]).value, "main.ngc"); assert.equal((await bridge.execute("1 + 1")).value, 5); assert.equal((await bridge.execute("import subprocess")).status, "REAL-EXCLUDED"); assert.equal(bridge.virtualClock().source, "logical_tick"); assert.equal(bridge.setTick(4).clock.seconds, 0.004); assert.equal(bridge.setTick(3).code, "python_clock_regression"); assert.equal(bridge.restoreState(bridge.exportState()).status, "verified"); console.log(`python_bridge=passed calls=${bridge.state.calls.length} errors=${bridge.state.errors.length} hash=${bridge.hash()}`);