按规划继续工作
结论:OPFS 参数文件已通过桥接进入 LinuxCNC-backed WASM restore/save 路径,native 与 host/WASM/browser 验证全部通过。
This commit is contained in:
@@ -8,6 +8,14 @@
|
||||
<pre id="status">running</pre>
|
||||
<script type="module">
|
||||
import { createLinuxCncInterpSdk } from "../../runtime/sdk/src/index.js";
|
||||
import {
|
||||
restoreMachineParametersFromOpfs,
|
||||
saveMachineParametersToOpfs,
|
||||
} from "../../runtime/opfs/linuxcnc-parameter-bridge.js";
|
||||
import {
|
||||
loadMachineTextFiles,
|
||||
saveMachineTextFiles,
|
||||
} from "../../runtime/opfs/machine-file-store.js";
|
||||
import {
|
||||
INTERP_BROWSER_FILE_FIXTURES,
|
||||
INTERP_BROWSER_MDI_FIXTURES,
|
||||
@@ -108,6 +116,71 @@
|
||||
(await fetchText(`../fixtures/canon/${INTERP_INI_FIXTURE}.events`)).trimEnd(),
|
||||
);
|
||||
|
||||
await saveMachineTextFiles("browser-interp", {
|
||||
ini: "[EMC]\nMACHINE = browser-interp\n",
|
||||
toolTable: "T0 P0 ; no tool\n",
|
||||
parameters: [
|
||||
"5161 10.5",
|
||||
"5162 20.25",
|
||||
"5220 1",
|
||||
"5221 2.25",
|
||||
"5399 44",
|
||||
"<_named_param> 123",
|
||||
"",
|
||||
].join("\n"),
|
||||
});
|
||||
const restoredParameters = await restoreMachineParametersFromOpfs(
|
||||
interp,
|
||||
"browser-interp",
|
||||
{ wasmPath: "/work/browser-linuxcnc.var" },
|
||||
);
|
||||
verifyExpectedOutput(
|
||||
"opfs_restore_parameters",
|
||||
restoredParameters.result,
|
||||
[
|
||||
"restore_parameters=0",
|
||||
"parameter_5161=10.5",
|
||||
"parameter_5162=20.25",
|
||||
"parameter_5221=2.25",
|
||||
"parameter_5399=44",
|
||||
].join("\n"),
|
||||
);
|
||||
const savedParameters = await saveMachineParametersToOpfs(
|
||||
interp,
|
||||
"browser-interp",
|
||||
{
|
||||
5161: 12.34,
|
||||
5162: 56.78,
|
||||
5220: 1.0,
|
||||
5221: 9.87,
|
||||
5399: 66.6,
|
||||
},
|
||||
{ wasmPath: "/work/browser-linuxcnc.var" },
|
||||
);
|
||||
verifyExpectedOutput(
|
||||
"opfs_save_parameters",
|
||||
savedParameters.result,
|
||||
[
|
||||
"save_parameters=0",
|
||||
"parameter_5161=12.34",
|
||||
"parameter_5162=56.78",
|
||||
"parameter_5221=9.87",
|
||||
"parameter_5399=66.6",
|
||||
].join("\n"),
|
||||
);
|
||||
const machineFiles = await loadMachineTextFiles("browser-interp");
|
||||
verifyExpectedOutput(
|
||||
"opfs_saved_parameter_text",
|
||||
machineFiles.parameters,
|
||||
[
|
||||
"5161\t12.340000",
|
||||
"5162\t56.780000",
|
||||
"5221\t9.870000",
|
||||
"5399\t66.600000",
|
||||
"absent=<_named_param>",
|
||||
].join("\n"),
|
||||
);
|
||||
|
||||
status.textContent = "browser_interp_smoke=ok";
|
||||
} catch (error) {
|
||||
status.textContent = `browser_interp_smoke=fail ${error.stack || error.message}`;
|
||||
|
||||
@@ -28,6 +28,10 @@ import {
|
||||
saveGcodeProgram,
|
||||
saveMachineTextFiles,
|
||||
} from "../../../runtime/opfs/machine-file-store.js";
|
||||
import {
|
||||
restoreMachineParametersFromOpfs,
|
||||
saveMachineParametersToOpfs,
|
||||
} from "../../../runtime/opfs/linuxcnc-parameter-bridge.js";
|
||||
|
||||
class MockFileHandle {
|
||||
constructor(name) {
|
||||
@@ -153,6 +157,57 @@ assert.equal(
|
||||
);
|
||||
assert.equal(await loadGcodeProgram("fixture.ngc", { storage }), "G0 X0 Y0\nM2\n");
|
||||
|
||||
const bridgeFiles = new Map();
|
||||
const bridgeInterp = {
|
||||
writeTextFile(path, text) {
|
||||
bridgeFiles.set(path, text);
|
||||
},
|
||||
readTextFile(path) {
|
||||
if (!bridgeFiles.has(path)) {
|
||||
throw new Error(`missing wasm file: ${path}`);
|
||||
}
|
||||
return bridgeFiles.get(path);
|
||||
},
|
||||
restoreParameters(path) {
|
||||
return `restore_parameters=0\nrestore_path=${path}\n`;
|
||||
},
|
||||
saveParameters(path, values) {
|
||||
bridgeFiles.set(path, "5161\t12.340000\n5162\t56.780000\n");
|
||||
bridgeFiles.set(`${path}.bak`, "5161 0.0\n5162 0.0\n");
|
||||
return `save_parameters=0\nsave_path=${path}\nvalues=${Object.keys(values).join(",")}\n`;
|
||||
},
|
||||
};
|
||||
|
||||
const restoredParameters = await restoreMachineParametersFromOpfs(
|
||||
bridgeInterp,
|
||||
"xyzab-tdr",
|
||||
{ storage, wasmPath: "/work/bridge.var" },
|
||||
);
|
||||
assert.deepEqual(restoredParameters, {
|
||||
opfsPath: "linuxcnc/machines/xyzab-tdr/linuxcnc.var",
|
||||
wasmPath: "/work/bridge.var",
|
||||
result: "restore_parameters=0\nrestore_path=/work/bridge.var\n",
|
||||
});
|
||||
assert.equal(bridgeFiles.get("/work/bridge.var"), "5161 0.0\n5162 0.0\n");
|
||||
|
||||
const savedParameters = await saveMachineParametersToOpfs(
|
||||
bridgeInterp,
|
||||
"xyzab-tdr",
|
||||
{ 5161: 12.34, 5162: 56.78 },
|
||||
{ storage, wasmPath: "/work/bridge.var" },
|
||||
);
|
||||
assert.equal(savedParameters.opfsPath, "linuxcnc/machines/xyzab-tdr/linuxcnc.var");
|
||||
assert.equal(savedParameters.backupOpfsPath, "linuxcnc/machines/xyzab-tdr/linuxcnc.var.bak");
|
||||
assert.equal(savedParameters.result.includes("save_parameters=0"), true);
|
||||
assert.equal(
|
||||
await loadTextFile("linuxcnc/machines/xyzab-tdr/linuxcnc.var", storage),
|
||||
"5161\t12.340000\n5162\t56.780000\n",
|
||||
);
|
||||
assert.equal(
|
||||
await loadTextFile("linuxcnc/machines/xyzab-tdr/linuxcnc.var.bak", storage),
|
||||
"5161 0.0\n5162 0.0\n",
|
||||
);
|
||||
|
||||
await assert.rejects(
|
||||
() => loadTextFile("linuxcnc/machines/missing.ini", storage),
|
||||
/missing file/,
|
||||
|
||||
Reference in New Issue
Block a user