Guard browser OPFS random tool-table values

This commit is contained in:
2026-06-14 06:45:40 +08:00
parent 037303245b
commit 8489ba9c09
2 changed files with 108 additions and 28 deletions

View File

@@ -351,3 +351,61 @@ host_wasm_opfs_browser_smokes=ok
的 tool-table load/save/readback expected lines 是否能用现有 helper 或局部常量收敛; 的 tool-table load/save/readback expected lines 是否能用现有 helper 或局部常量收敛;
只改测试胶水,不改变 random toolchanger 输入、OPFS path、WASM path 字符串或 只改测试胶水,不改变 random toolchanger 输入、OPFS path、WASM path 字符串或
保存/读取行为。 保存/读取行为。
九、2026-06-14 继续执行记录browser OPFS random session tool-table helper guard
本轮按上一条下一步建议继续收敛 direct random toolchanger session 的 tool-table
load/save/readback expected lines范围仍只触及
`wasm-port/tests/browser/interp_smoke.html` 的 browser/OPFS test glue。
完成内容:
- 新增 `opfsRandomToolTableResultLines(...)`,统一 random toolchanger load/save
result expected lines 的拼装;
- 新增 `opfsRandomToolTableTextLines(...)`,统一 random toolchanger saved
tool-table readback expected lines 的拼装;
- 为 direct random toolchanger session 增加 `browserRandomFinishTool`、
`browserRandomRoughTool` 与 `browserRandomTools` 局部常量;
- `opfs_load_random_tool_table` expected lines 改为复用
`opfsRandomToolTableResultLines("load", ...)`,并继续显式保留
`tooldata_random_toolchanger=1` 和 `tool_index_for_tool_2=7`
- `opfs_save_random_tool_table` expected lines 改为复用
`opfsRandomToolTableResultLines("save", ...)`
- `opfs_saved_random_tool_table_text` expected lines 改为复用
`opfsRandomToolTableTextLines(...)`
- 未改变 random toolchanger 输入、OPFS path、WASM path 字符串、save/read/load 行为;
- 未改变 staging path 模型、OPFS bridge behavior、file-service、SDK planner、
interpreter、INI、tool、parameter 或 LinuxCNC-owned runtime semantics。
验证已通过:
```bash
git diff --check
SKIP_INI_BUILD=1 SKIP_INTERP_BUILD=1 wasm-port/tests/browser/verify_interp_browser.sh
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
wasm-port/tests/host/verify_host_smokes.sh
```
关键输出:
```text
browser_interp_smoke=ok
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
host_wasm_opfs_browser_smokes=ok
```
下一步建议:
继续小批量 browser OPFS test glue guard。优先扫描 direct generated random
toolchanger file block 中的 load/save/readback expected lines 是否也能复用
`opfsRandomToolTable*` helpers 或局部常量;只改测试胶水,不改变 direct generated
file input、WASM path 字符串或保存/读取行为。

View File

@@ -4619,6 +4619,22 @@
]; ];
} }
function opfsRandomToolTableResultLines(operation, tools) {
return [
...(operation === "load" ? ["tooldata_random_toolchanger=1"] : []),
`tooldata_${operation}=0`,
...tools.flatMap((tool) => tool.resultLines),
];
}
function opfsRandomToolTableTextLines(tools) {
return tools.flatMap((tool) => [
`T${tool.toolNo}`,
`P${tool.pocketNo}`,
tool.comment,
]);
}
function opfsToolTableSeedText(toolNo, pocketNo, zOffset, diameter, comment) { function opfsToolTableSeedText(toolNo, pocketNo, zOffset, diameter, comment) {
return `T${toolNo} P${pocketNo} Z${zOffset} D${diameter} ${comment}\n`; return `T${toolNo} P${pocketNo} Z${zOffset} D${diameter} ${comment}\n`;
} }
@@ -9440,6 +9456,31 @@
const browserRandomMachineId = "browser-random-toolchanger"; const browserRandomMachineId = "browser-random-toolchanger";
const browserRandomWasmPaths = opfsBrowserSessionWasmPaths("browser-random"); const browserRandomWasmPaths = opfsBrowserSessionWasmPaths("browser-random");
const browserRandomFinishTool = {
toolNo: "2",
pocketNo: "7",
comment: ";browser random finish tool",
resultLines: [
"tool_pocket_7.toolno=2",
"tool_pocket_7.pocketno=7",
"tool_pocket_7.z=3.125",
"tool_pocket_7.diameter=1.5",
"tool_pocket_7.frontangle=12",
"tool_pocket_7.backangle=34",
"tool_pocket_7.orientation=4",
"tool_pocket_7.comment=browser random finish tool",
],
};
const browserRandomRoughTool = {
toolNo: "5",
pocketNo: "9",
comment: ";browser random rough tool",
resultLines: [
"tool_pocket_9.toolno=5",
"tool_pocket_9.pocketno=9",
],
};
const browserRandomTools = [browserRandomFinishTool, browserRandomRoughTool];
const browserRandomTextPaths = await saveMachineTextFiles(browserRandomMachineId, { const browserRandomTextPaths = await saveMachineTextFiles(browserRandomMachineId, {
ini: [ ini: [
"[EMC]", "[EMC]",
@@ -9477,21 +9518,10 @@
verifyOpfsLoadResult( verifyOpfsLoadResult(
"opfs_load_random_tool_table", "opfs_load_random_tool_table",
loadedRandomSession.toolTable, loadedRandomSession.toolTable,
[ opfsRandomToolTableResultLines("load", [
"tooldata_random_toolchanger=1", ...browserRandomTools,
"tooldata_load=0", { resultLines: ["tool_index_for_tool_2=7"] },
"tool_pocket_7.toolno=2", ]),
"tool_pocket_7.pocketno=7",
"tool_pocket_7.z=3.125",
"tool_pocket_7.diameter=1.5",
"tool_pocket_7.frontangle=12",
"tool_pocket_7.backangle=34",
"tool_pocket_7.orientation=4",
"tool_pocket_7.comment=browser random finish tool",
"tool_pocket_9.toolno=5",
"tool_pocket_9.pocketno=9",
"tool_index_for_tool_2=7",
],
); );
const savedRandomToolTable = await saveMachineToolTableToOpfs( const savedRandomToolTable = await saveMachineToolTableToOpfs(
interp, interp,
@@ -9508,24 +9538,16 @@
verifyOpfsSaveResult( verifyOpfsSaveResult(
"opfs_save_random_tool_table", "opfs_save_random_tool_table",
savedRandomToolTable, savedRandomToolTable,
[ opfsRandomToolTableResultLines("save", [
"tooldata_save=0", { resultLines: ["tool_pocket_7.toolno=2"] },
"tool_pocket_7.toolno=2", { resultLines: ["tool_pocket_9.toolno=5"] },
"tool_pocket_9.toolno=5", ]),
],
); );
await verifyOpfsMachineFileReadback( await verifyOpfsMachineFileReadback(
"opfs_saved_random_tool_table_text", "opfs_saved_random_tool_table_text",
browserRandomMachineId, browserRandomMachineId,
"toolTable", "toolTable",
[ opfsRandomToolTableTextLines(browserRandomTools),
"T2",
"P7",
";browser random finish tool",
"T5",
"P9",
";browser random rough tool",
],
); );
const iniFileMachineId = "browser-ini-file-session"; const iniFileMachineId = "browser-ini-file-session";