36 lines
2.2 KiB
JavaScript
36 lines
2.2 KiB
JavaScript
import assert from "node:assert/strict";
|
|
import { readFile } from "node:fs/promises";
|
|
import createModule from "../../build-wasm/linuxcnc-sim-core.js";
|
|
import { SimSession, CONTEXT_ID } from "./sim-session.mjs";
|
|
|
|
const core = await createModule({ wasmBinary: await readFile(new URL("../../build-wasm/linuxcnc-sim-core.wasm", import.meta.url)) });
|
|
const session = new SimSession(core, { sessionId: "p304-state" });
|
|
const base = { schema_version: 1, context_id: CONTEXT_ID, session_id: "p304-state" };
|
|
const send = (kind, seq, operation_id, payload = {}) => session.accept({ ...base, kind, seq, operation_id, payload });
|
|
|
|
assert.equal(send("HELLO", 1).kind, "CAPABILITIES");
|
|
assert.equal(send("SESSION_ATTACH", 2, "attach").kind, "SESSION_READY");
|
|
send("LOAD_WORKSPACE", 3, "workspace", { root_path: "/workspace" });
|
|
send("PROGRAM_LOAD", 4, "load", { path: "state.ngc", source: "G21 G90\nG1 X2 F60\nM2\n" });
|
|
const run = send("PROGRAM_RUN", 5, "run");
|
|
assert.equal(run.payload.task.state, "RUNNING");
|
|
const replay = send("PROGRAM_RUN", 6, "run", { changed: true });
|
|
assert.equal(replay.replayed, true);
|
|
const checkpointResponse = send("CHECKPOINT", 7, "checkpoint-pre");
|
|
const checkpoint = checkpointResponse.payload.checkpoint;
|
|
const mdiBlocked = send("MDI_EXECUTE", 8, "mdi-blocked", { block: "G1 X9" });
|
|
assert.equal(mdiBlocked.kind, "ERROR");
|
|
assert.equal(mdiBlocked.payload.message_key, "mdi_while_program_active");
|
|
send("SIM_STEP", 9, "tick", { cycles: 1 });
|
|
assert.equal(send("PROGRAM_PAUSE", 10, "pause").payload.task.state, "PAUSED");
|
|
assert.equal(send("PROGRAM_RESUME", 11, "resume").payload.task.state, "RUNNING");
|
|
assert.equal(send("PROGRAM_ABORT", 12, "abort").payload.task.state, "STOPPED");
|
|
assert.equal(send("PROGRAM_RESTART", 13, "restart").payload.task.program_status, "loaded");
|
|
const single = send("PROGRAM_STEP", 14, "single");
|
|
assert.equal(single.payload.task.state, "PAUSED");
|
|
assert.equal(single.payload.task.program_status, "paused");
|
|
const recovered = session.restoreCheckpoint(checkpoint, null, (operation) => operation);
|
|
assert.equal(recovered.status, "recovered");
|
|
assert.equal(recovered.state.task.state, "RUNNING");
|
|
console.log(`task_program_state=passed replay=${replay.replayed} restart=${single.payload.task.program_status} recovery=${recovered.state.task.state}`);
|