Guard browser OPFS save result helper

This commit is contained in:
2026-06-14 00:49:14 +08:00
parent 74be85cd01
commit 6e8778f4c3
2 changed files with 75 additions and 21 deletions

View File

@@ -275,3 +275,53 @@ host_wasm_opfs_browser_smokes=ok
verification helper。优先只收敛 `wasm-port/tests/browser/interp_smoke.html` 中 verification helper。优先只收敛 `wasm-port/tests/browser/interp_smoke.html` 中
`saveMachineParametersToOpfs(...)` / `saveMachineToolTableToOpfs(...)` 的 result `saveMachineParametersToOpfs(...)` / `saveMachineToolTableToOpfs(...)` 的 result
校验胶水,不改变 expected text不触碰 runtime bridge 与 LinuxCNC 语义。 校验胶水,不改变 expected text不触碰 runtime bridge 与 LinuxCNC 语义。
八、2026-06-14 继续执行记录browser OPFS save result helper guard
本轮按上一条下一步建议继续推进 OPFS save result verification 小批收敛,范围仍只触及
`wasm-port/tests/browser/interp_smoke.html` 的 browser/OPFS test glue。
完成内容:
- 新增 `verifyOpfsSaveResult(...)`,统一 OPFS save helper result 的
`verifyExpectedOutput(...)` 精确校验入口;
- 收敛 `saveMachineParametersToOpfs(...)` / `saveMachineToolTableToOpfs(...)`
后续 7 个 result 校验调用;
- expected output 行内容未改,只把 `.result` 读取和 `join("\n")` 胶水放入 helper
- 未改变 OPFS bridge behavior、file-service、path-model、SDK planner、interpreter、
INI、tool、parameter 或 LinuxCNC-owned runtime semantics。
验证已通过:
```bash
git diff --check
wasm-port/tools/verify_vendor_sync.sh
wasm-port/tools/verify_no_standalone_cnc_semantics.sh
SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_interp_wasm.sh
SKIP_INTERP_BUILD=1 wasm-port/tests/wasm/node/verify_sim_configs_inventory_wasm.sh
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_interp_browser.sh
wasm-port/tests/host/verify_host_smokes.sh
```
关键输出:
```text
vendor sync up to date
standalone CNC semantics guard complete
interp_wasm_node_smoke=ok
sim_configs_wasm_node_inventory_executed=28
sim_configs_wasm_node_inventory_passed=28
sim_configs_wasm_node_inventory_skipped=131
sim_configs_wasm_node_inventory_unexpected_fail=0
browser_interp_smoke=ok
host_wasm_opfs_browser_smokes=ok
```
下一步建议:
继续沿 browser/OPFS boundary guard 方向小批量推进。优先扫描
`wasm-port/tests/browser/interp_smoke.html` 里 OPFS load result 的重复
`verifyExpectedOutput(...)` 调用,若 `loadedSession.parameters.result` /
`loadedSession.toolTable.result` 等形态足够一致,可抽一个只处理 result 精确校验的
helper。仍不改变 expected text不触碰 runtime bridge、file-service 或 LinuxCNC
语义。

View File

@@ -4535,6 +4535,10 @@
); );
} }
function verifyOpfsSaveResult(label, saveResult, expectedLines) {
verifyExpectedOutput(label, saveResult.result, expectedLines.join("\n"));
}
async function verifyOpfsSavedText(label, loadActualText, expectedText) { async function verifyOpfsSavedText(label, loadActualText, expectedText) {
verifyExpectedOutput(label, await loadActualText(), expectedText); verifyExpectedOutput(label, await loadActualText(), expectedText);
} }
@@ -9237,16 +9241,16 @@
"linuxcnc.var", "linuxcnc.var",
browserInterpParameterWasmPath, browserInterpParameterWasmPath,
); );
verifyExpectedOutput( verifyOpfsSaveResult(
"opfs_save_parameters", "opfs_save_parameters",
savedParameters.result, savedParameters,
[ [
"save_parameters=0", "save_parameters=0",
"parameter_5161=12.34", "parameter_5161=12.34",
"parameter_5162=56.78", "parameter_5162=56.78",
"parameter_5221=9.87", "parameter_5221=9.87",
"parameter_5399=66.6", "parameter_5399=66.6",
].join("\n"), ],
); );
await verifyOpfsMachineFileReadback( await verifyOpfsMachineFileReadback(
"opfs_saved_parameter_text", "opfs_saved_parameter_text",
@@ -9283,14 +9287,14 @@
"tool.tbl", "tool.tbl",
browserInterpToolTableWasmPath, browserInterpToolTableWasmPath,
); );
verifyExpectedOutput( verifyOpfsSaveResult(
"opfs_save_tool_table", "opfs_save_tool_table",
savedToolTable.result, savedToolTable,
[ [
"tooldata_save=0", "tooldata_save=0",
"tool_1.toolno=2", "tool_1.toolno=2",
"tool_1.pocketno=7", "tool_1.pocketno=7",
].join("\n"), ],
); );
await verifyOpfsMachineFileReadback( await verifyOpfsMachineFileReadback(
"opfs_saved_tool_table_text", "opfs_saved_tool_table_text",
@@ -9393,14 +9397,14 @@
"tool.tbl", "tool.tbl",
browserRandomToolTableWasmPath, browserRandomToolTableWasmPath,
); );
verifyExpectedOutput( verifyOpfsSaveResult(
"opfs_save_random_tool_table", "opfs_save_random_tool_table",
savedRandomToolTable.result, savedRandomToolTable,
[ [
"tooldata_save=0", "tooldata_save=0",
"tool_pocket_7.toolno=2", "tool_pocket_7.toolno=2",
"tool_pocket_9.toolno=5", "tool_pocket_9.toolno=5",
].join("\n"), ],
); );
await verifyOpfsMachineFileReadback( await verifyOpfsMachineFileReadback(
"opfs_saved_random_tool_table_text", "opfs_saved_random_tool_table_text",
@@ -9509,16 +9513,16 @@
iniFileParameterFilename, iniFileParameterFilename,
opfsCustomSessionWasmPath(iniFileParameterFilename), opfsCustomSessionWasmPath(iniFileParameterFilename),
); );
verifyExpectedOutput( verifyOpfsSaveResult(
"opfs_save_ini_named_parameter_file", "opfs_save_ini_named_parameter_file",
savedIniNamedParameters.result, savedIniNamedParameters,
[ [
"save_parameters=0", "save_parameters=0",
"parameter_5161=33.75", "parameter_5161=33.75",
"parameter_5162=67.5", "parameter_5162=67.5",
"parameter_5221=5.25", "parameter_5221=5.25",
"parameter_5399=199", "parameter_5399=199",
].join("\n"), ],
); );
await verifyOpfsReadback( await verifyOpfsReadback(
"opfs_saved_ini_named_parameter_text", "opfs_saved_ini_named_parameter_text",
@@ -9567,14 +9571,14 @@
iniFileToolTableFilename, iniFileToolTableFilename,
opfsCustomSessionWasmPath(iniFileToolTableFilename), opfsCustomSessionWasmPath(iniFileToolTableFilename),
); );
verifyExpectedOutput( verifyOpfsSaveResult(
"opfs_save_ini_named_tool_table", "opfs_save_ini_named_tool_table",
savedIniNamedToolTable.result, savedIniNamedToolTable,
[ [
"tooldata_save=0", "tooldata_save=0",
"tool_1.toolno=8", "tool_1.toolno=8",
"tool_1.pocketno=8", "tool_1.pocketno=8",
].join("\n"), ],
); );
await verifyOpfsSavedText( await verifyOpfsSavedText(
"opfs_saved_ini_named_tool_table_text", "opfs_saved_ini_named_tool_table_text",
@@ -9695,16 +9699,16 @@
explicitParameterFilename, explicitParameterFilename,
opfsCustomSessionWasmPath(explicitParameterFilename), opfsCustomSessionWasmPath(explicitParameterFilename),
); );
verifyExpectedOutput( verifyOpfsSaveResult(
"opfs_save_explicit_parameter_file", "opfs_save_explicit_parameter_file",
savedExplicitParameters.result, savedExplicitParameters,
[ [
"save_parameters=0", "save_parameters=0",
"parameter_5161=51.25", "parameter_5161=51.25",
"parameter_5162=102.5", "parameter_5162=102.5",
"parameter_5221=7.5", "parameter_5221=7.5",
"parameter_5399=202", "parameter_5399=202",
].join("\n"), ],
); );
await verifyOpfsSavedText( await verifyOpfsSavedText(
"opfs_saved_explicit_parameter_text", "opfs_saved_explicit_parameter_text",
@@ -9741,14 +9745,14 @@
explicitToolTableFilename, explicitToolTableFilename,
opfsCustomSessionWasmPath(explicitToolTableFilename), opfsCustomSessionWasmPath(explicitToolTableFilename),
); );
verifyExpectedOutput( verifyOpfsSaveResult(
"opfs_save_explicit_tool_table", "opfs_save_explicit_tool_table",
savedExplicitToolTable.result, savedExplicitToolTable,
[ [
"tooldata_save=0", "tooldata_save=0",
"tool_1.toolno=9", "tool_1.toolno=9",
"tool_1.pocketno=9", "tool_1.pocketno=9",
].join("\n"), ],
); );
await verifyOpfsSavedText( await verifyOpfsSavedText(
"opfs_saved_explicit_tool_table_text", "opfs_saved_explicit_tool_table_text",