推进 OPFS 会话快照清单能力
This commit is contained in:
@@ -15,6 +15,7 @@
|
||||
sessionSnapshotPath,
|
||||
} from "../../runtime/opfs/path-model.js";
|
||||
import {
|
||||
createMachineSessionSnapshotPayload,
|
||||
loadSessionSnapshot,
|
||||
saveSessionSnapshot,
|
||||
} from "../../runtime/opfs/snapshot-store.js";
|
||||
@@ -124,7 +125,26 @@ TOOL_TABLE = browser-tool.tbl
|
||||
await saveTextFile(opfsPath, iniText);
|
||||
assertEqual(await loadTextFile(opfsPath), iniText, "opfs roundtrip");
|
||||
|
||||
const snapshotPayload = { files: { ini: opfsPath } };
|
||||
const snapshotPayload = createMachineSessionSnapshotPayload("browser-smoke", {
|
||||
gcodeFilename: "browser-smoke.ngc",
|
||||
});
|
||||
assertEqual(snapshotPayload.machineId, "browser-smoke", "snapshot machine");
|
||||
assertEqual(snapshotPayload.files.ini, opfsPath, "snapshot payload INI");
|
||||
assertEqual(
|
||||
snapshotPayload.files.parameters,
|
||||
"linuxcnc/machines/browser-smoke/linuxcnc.var",
|
||||
"snapshot payload parameter file",
|
||||
);
|
||||
assertEqual(
|
||||
snapshotPayload.files.toolTable,
|
||||
"linuxcnc/machines/browser-smoke/tool.tbl",
|
||||
"snapshot payload tool table",
|
||||
);
|
||||
assertEqual(
|
||||
snapshotPayload.files.gcode,
|
||||
"linuxcnc/gcode/browser-smoke.ngc",
|
||||
"snapshot payload G-code",
|
||||
);
|
||||
const savedSnapshot = await saveSessionSnapshot(
|
||||
"browser-session",
|
||||
snapshotPayload,
|
||||
@@ -139,7 +159,28 @@ TOOL_TABLE = browser-tool.tbl
|
||||
assertEqual(loadedSnapshot.sessionId, "browser-session", "snapshot session");
|
||||
assertEqual(loadedSnapshot.createdAt, savedSnapshot.createdAt, "snapshot timestamp");
|
||||
assertEqual(loadedSnapshot.payload.files.ini, opfsPath, "snapshot payload");
|
||||
assertEqual(loadedSnapshot.payload.files.gcode, snapshotPayload.files.gcode, "snapshot G-code payload");
|
||||
assertEqual(loadedSnapshot.metadata.source, "browser-smoke", "snapshot metadata");
|
||||
const customMachineSnapshotPayload = createMachineSessionSnapshotPayload("browser-smoke", {
|
||||
parameterFilename: "browser-linuxcnc.var",
|
||||
toolTableFilename: "browser-tool.tbl",
|
||||
gcodeOpfsPath: "linuxcnc/gcode/browser-custom.ngc",
|
||||
});
|
||||
assertEqual(
|
||||
customMachineSnapshotPayload.files.parameters,
|
||||
"linuxcnc/machines/browser-smoke/browser-linuxcnc.var",
|
||||
"custom snapshot parameter file",
|
||||
);
|
||||
assertEqual(
|
||||
customMachineSnapshotPayload.files.toolTable,
|
||||
"linuxcnc/machines/browser-smoke/browser-tool.tbl",
|
||||
"custom snapshot tool table",
|
||||
);
|
||||
assertEqual(
|
||||
customMachineSnapshotPayload.files.gcode,
|
||||
"linuxcnc/gcode/browser-custom.ngc",
|
||||
"custom snapshot G-code",
|
||||
);
|
||||
assertEqual(
|
||||
sessionSnapshotPath("browser-session", "browser-custom-snapshot.json"),
|
||||
"linuxcnc/sessions/browser-session/browser-custom-snapshot.json",
|
||||
|
||||
@@ -16,6 +16,7 @@ import {
|
||||
toolTablePath,
|
||||
} from "../../../runtime/opfs/path-model.js";
|
||||
import {
|
||||
createMachineSessionSnapshotPayload,
|
||||
createSessionSnapshot,
|
||||
loadSessionSnapshot,
|
||||
saveSessionSnapshot,
|
||||
@@ -216,12 +217,38 @@ assertSessionSnapshotStoragePath(
|
||||
assertMachineFileStoragePaths("xyzab-tdr", defaultMachinePaths("xyzab-tdr"));
|
||||
assertMachineFileStoragePaths("xyzab-tdr", machineFilePaths("xyzab-tdr"));
|
||||
|
||||
const snapshotPayload = {
|
||||
const snapshotPayload = createMachineSessionSnapshotPayload("xyzab-tdr", {
|
||||
gcodeFilename: "fixture.ngc",
|
||||
});
|
||||
assert.deepEqual(snapshotPayload, {
|
||||
machineId: "xyzab-tdr",
|
||||
files: {
|
||||
ini: machineIniPath("xyzab-tdr"),
|
||||
parameters: parameterFilePath("xyzab-tdr"),
|
||||
toolTable: toolTablePath("xyzab-tdr"),
|
||||
gcode: gcodeProgramPath("fixture.ngc"),
|
||||
},
|
||||
};
|
||||
});
|
||||
assert.deepEqual(
|
||||
createMachineSessionSnapshotPayload("custom-machine", {
|
||||
parameterFilename: "custom.var",
|
||||
toolTableFilename: "custom-tool.tbl",
|
||||
gcodeOpfsPath: "linuxcnc/gcode/custom-fixture.ngc",
|
||||
}),
|
||||
{
|
||||
machineId: "custom-machine",
|
||||
files: {
|
||||
ini: "linuxcnc/machines/custom-machine/machine.ini",
|
||||
parameters: "linuxcnc/machines/custom-machine/custom.var",
|
||||
toolTable: "linuxcnc/machines/custom-machine/custom-tool.tbl",
|
||||
gcode: "linuxcnc/gcode/custom-fixture.ngc",
|
||||
},
|
||||
},
|
||||
);
|
||||
assert.throws(
|
||||
() => createMachineSessionSnapshotPayload("bad-machine", { gcodeFilename: "../escape.ngc" }),
|
||||
/Invalid G-code filename/,
|
||||
);
|
||||
const snapshot = createSessionSnapshot("session-1", snapshotPayload, {
|
||||
createdAt: "2026-06-08T00:00:00.000Z",
|
||||
metadata: { source: "node-smoke" },
|
||||
|
||||
Reference in New Issue
Block a user