Guard browser direct non-random generated tool-table

This commit is contained in:
2026-06-14 06:56:41 +08:00
parent e5ea24729c
commit 5cf6f8f339
2 changed files with 114 additions and 32 deletions

View File

@@ -465,3 +465,60 @@ host_wasm_opfs_browser_smokes=ok
tool-table file block 中的 load/save/readback expected lines 是否能复用现有
`opfsToolTable*` helpers 或局部常量;只改测试胶水,不改变 direct generated file input、
WASM path 字符串或保存/读取行为。
十一、2026-06-14 继续执行记录browser direct generated non-random tool-table helper guard
本轮按上一条下一步建议继续收敛 direct non-random generated toolchanger file block 的
load/save/readback expected lines范围仍只触及
`wasm-port/tests/browser/interp_smoke.html` 的 browser test glue。
完成内容:
- 新增 `directToolTableResultLines(...)`,统一 direct non-random generated load/save
result expected lines 的拼装;
- 新增 `directToolTableTextLines(...)`,统一 direct non-random generated saved
tool-table readback expected lines 的拼装;
- 为 direct non-random generated file block 增加 `browserDirectFinishTool`、
`browserDirectRoughTool` 与 `browserDirectTools` 局部常量;
- `load_tool_table_direct` expected lines 改为复用
`directToolTableResultLines("load", ...)`,并继续显式保留 `tooldata_last_index=2`
和 `tool_index_for_tool_2=1`
- `save_tool_table_direct` expected lines 改为复用
`directToolTableResultLines("save", ...)`
- `saved_tool_table_direct_text` expected lines 改为复用
`directToolTableTextLines(...)`
- 未改变 direct generated file input、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 test glue guard。优先扫描 direct `browser-interp` session 和
direct generated file block 之间是否还能抽出更小的共享 tool-table helper只改测试
胶水不改变输入、OPFS path、WASM path 字符串或保存/读取行为。

View File

@@ -4619,6 +4619,23 @@
];
}
function directToolTableResultLines(operation, tools, extraLines = []) {
return [
`tooldata_${operation}=0`,
...extraLines,
...tools.flatMap((tool) => tool.resultLines),
];
}
function directToolTableTextLines(tools) {
return tools.flatMap((tool) => [
`T${tool.toolNo}`,
`P${tool.pocketNo}`,
...(tool.extraTextLines ?? []),
tool.comment,
]);
}
function opfsRandomToolTableResultLines(operation, tools) {
return [
...(operation === "load" ? ["tooldata_random_toolchanger=1"] : []),
@@ -9238,12 +9255,11 @@
"",
].join("\n"),
);
verifyExpectedOutput(
"load_tool_table_direct",
interp.loadToolTable(browserToolTablePath),
[
"tooldata_load=0",
"tooldata_last_index=2",
const browserDirectFinishTool = {
toolNo: "2",
pocketNo: "7",
comment: ";browser direct finish tool",
resultLines: [
"tool_1.toolno=2",
"tool_1.pocketno=7",
"tool_1.z=3.125",
@@ -9252,37 +9268,46 @@
"tool_1.backangle=34",
"tool_1.orientation=4",
"tool_1.comment=browser direct finish tool",
"tool_2.toolno=5",
"tool_2.pocketno=9",
"tool_2.comment=browser direct rough tool",
"tool_index_for_tool_2=1",
].join("\n"),
);
verifyExpectedOutput(
"save_tool_table_direct",
interp.saveToolTable(browserToolTablePath),
[
"tooldata_save=0",
"tool_1.toolno=2",
"tool_2.toolno=5",
].join("\n"),
);
verifyExpectedOutput(
"saved_tool_table_direct_text",
interp.readTextFile(browserToolTablePath),
[
"T2",
"P7",
],
extraTextLines: [
"Z+3.125000",
"D+1.500000",
"I+12.000000",
"J+34.000000",
"Q4",
";browser direct finish tool",
"T5",
"P9",
";browser direct rough tool",
].join("\n"),
],
};
const browserDirectRoughTool = {
toolNo: "5",
pocketNo: "9",
comment: ";browser direct rough tool",
resultLines: [
"tool_2.toolno=5",
"tool_2.pocketno=9",
"tool_2.comment=browser direct rough tool",
],
};
const browserDirectTools = [browserDirectFinishTool, browserDirectRoughTool];
verifyExpectedOutput(
"load_tool_table_direct",
interp.loadToolTable(browserToolTablePath),
directToolTableResultLines("load", browserDirectTools, [
"tooldata_last_index=2",
"tool_index_for_tool_2=1",
]).join("\n"),
);
verifyExpectedOutput(
"save_tool_table_direct",
interp.saveToolTable(browserToolTablePath),
directToolTableResultLines("save", [
{ resultLines: ["tool_1.toolno=2"] },
{ resultLines: ["tool_2.toolno=5"] },
]).join("\n"),
);
verifyExpectedOutput(
"saved_tool_table_direct_text",
interp.readTextFile(browserToolTablePath),
directToolTableTextLines(browserDirectTools).join("\n"),
);
const browserRandomToolTablePath = writeGeneratedToolTableFixture(