按规划继续工作
结论:解释器 WASM、SDK 统一入口、浏览器解释器 smoke 与兼容性文档已闭环,native 和 host/WASM/browser 验证全部通过。
This commit is contained in:
@@ -36,6 +36,12 @@ The current browser smoke validation command is:
|
||||
wasm-port/tests/browser/verify_ini_panel_browser.sh
|
||||
```
|
||||
|
||||
The current browser interpreter smoke validation command is:
|
||||
|
||||
```bash
|
||||
wasm-port/tests/browser/verify_interp_browser.sh
|
||||
```
|
||||
|
||||
The current aggregate host/WASM/browser smoke command is:
|
||||
|
||||
```bash
|
||||
@@ -53,7 +59,8 @@ The native validation script runs these checks in order:
|
||||
Confirms every manifest file is present in `vendor/linuxcnc/`, no extra
|
||||
vendored file exists, and every vendored file is byte-identical to upstream.
|
||||
3. `tools/verify_no_standalone_cnc_semantics.sh`
|
||||
Confirms standalone code has not reintroduced `Interp::convert_g()`.
|
||||
Confirms standalone code has not introduced project-owned `Interp::...`
|
||||
member definitions outside the documented Python/remap runtime-edge stubs.
|
||||
4. `tools/verify_native_linuxcnc_fixture_baseline.sh`
|
||||
Runs a side-by-side fixture baseline through upstream
|
||||
`../linuxcnc/bin/rs274` and compares normalized canonical events for
|
||||
@@ -67,17 +74,18 @@ The native validation script runs these checks in order:
|
||||
|
||||
The WASM INI smoke script builds `runtime/ui/ini-panel/linuxcnc_ini.js` and
|
||||
`linuxcnc_ini.wasm` from vendored LinuxCNC `inifile.cc`, then loads that
|
||||
module through `runtime/sdk/src/linuxcnc-ini.js` in Node and verifies INI
|
||||
module through `runtime/sdk/src/index.js` in Node and verifies INI
|
||||
queries against a file written to the Emscripten filesystem.
|
||||
|
||||
The WASM interpreter-core smoke script builds
|
||||
`build/wasm/core/linuxcnc_interp.js` and `linuxcnc_interp.wasm` from the same
|
||||
vendored LinuxCNC interpreter source set used by the native minimal
|
||||
interpreter harness. It loads the module in Node, runs the first WASM
|
||||
interpreter fixture group through `Interp::execute()`, and compares emitted
|
||||
canonical events plus required LinuxCNC `_setup` state readback with the
|
||||
matching files in `tests/fixtures/canon/`. It also writes selected G-code
|
||||
fixtures into the Emscripten filesystem and runs them through LinuxCNC
|
||||
interpreter harness. It loads the module in Node through
|
||||
`runtime/sdk/src/index.js`, runs the first WASM interpreter fixture
|
||||
group through `Interp::execute()`, and compares emitted canonical events plus
|
||||
required LinuxCNC `_setup` state readback with the matching files in
|
||||
`tests/fixtures/canon/`. It also writes selected G-code fixtures into the
|
||||
Emscripten filesystem through the SDK and runs them through LinuxCNC
|
||||
`Interp::open()`, `Interp::read()`, and `Interp::execute()` to validate the
|
||||
file execution path.
|
||||
|
||||
@@ -90,15 +98,24 @@ targets. It also validates the host-side session snapshot JSON envelope and
|
||||
round-trip store plus pure-text machine file and G-code stores without
|
||||
defining CNC machine-state or file-format semantics.
|
||||
|
||||
The browser smoke script serves `wasm-port/` over localhost and runs Chromium
|
||||
headless against a test page that imports the JS SDK, loads the INI WASM
|
||||
module, queries vendored LinuxCNC INI parsing through the SDK, and performs an
|
||||
OPFS text-file, generic session snapshot, machine file, and G-code text
|
||||
round trip.
|
||||
The browser INI/OPFS smoke script serves `wasm-port/` over localhost and runs
|
||||
Chromium headless against a test page that imports the JS SDK, loads the INI
|
||||
WASM module, queries vendored LinuxCNC INI parsing through the SDK, and
|
||||
performs an OPFS text-file, generic session snapshot, machine file, and G-code
|
||||
text round trip.
|
||||
|
||||
The browser interpreter smoke script serves `wasm-port/` over localhost and
|
||||
runs Chromium headless against a test page that loads the interpreter-core
|
||||
WASM module through `runtime/sdk/src/index.js`, writes no CNC
|
||||
behavior in JavaScript, and verifies existing canonical fixtures through the
|
||||
exported C ABI backed by vendored LinuxCNC `Interp::execute()` and
|
||||
`Interp::open()`/`read()`/`execute()` paths, including the INI-aware
|
||||
named-parameter file path and negative interpreter fixtures with expected
|
||||
error text plus absent canonical motion output.
|
||||
|
||||
The aggregate host smoke script builds the INI and interpreter-core WASM
|
||||
artifacts once, then runs the Node WASM smokes, the Node OPFS mock smoke, and
|
||||
the Chromium browser smoke.
|
||||
the Chromium browser smokes.
|
||||
|
||||
## Source Coverage
|
||||
|
||||
@@ -147,9 +164,10 @@ The validation fails if:
|
||||
| Harness | Purpose |
|
||||
| --- | --- |
|
||||
| `tests/wasm/node/verify_ini_wasm.sh` | Validates the browser-facing INI WASM module can be built from vendored LinuxCNC `inifile.cc`, loaded through the JS SDK in Node, and queried through the exported C ABI. |
|
||||
| `tests/wasm/node/verify_interp_wasm.sh` | Validates the initial interpreter-core WASM module can be built from vendored LinuxCNC interpreter source, run the first fixture group through `Interp::execute()` and selected file fixtures through `Interp::open()`/`read()`/`execute()`, and match the native canonical event plus required state readback fixtures. |
|
||||
| `tests/wasm/node/verify_interp_wasm.sh` | Validates the initial interpreter-core WASM module can be built from vendored LinuxCNC interpreter source, loaded through the interpreter JS SDK, run the first fixture group through `Interp::execute()` and selected file fixtures through `Interp::open()`/`read()`/`execute()`, and match the native canonical event plus required state readback fixtures. |
|
||||
| `tests/opfs/node/verify_file_service.sh` | Validates the host-owned OPFS text-file adapter, path model, session snapshot store, machine file store, and G-code text store used by the browser INI panel without moving file persistence into the WASM core. |
|
||||
| `tests/browser/verify_ini_panel_browser.sh` | Validates the INI SDK, WASM module loading, OPFS text-file round trip, generic session snapshot round trip, machine file text round trip, and G-code text round trip in a real browser runtime. |
|
||||
| `tests/browser/verify_interp_browser.sh` | Validates the interpreter-core WASM module loads through the interpreter JS SDK in a real browser runtime and runs selected positive and negative canonical fixtures through vendored LinuxCNC `Interp::execute()` plus `Interp::open()`/`read()`/`execute()` via the exported C ABI. |
|
||||
| `tests/host/verify_host_smokes.sh` | Runs the current host-side Node, WASM interpreter-core, OPFS, and browser smoke validation with shared WASM builds. |
|
||||
|
||||
## Fixture Coverage
|
||||
@@ -206,12 +224,127 @@ plus the `g1_zero_feed`, `arc_radius_mismatch`, `arc_zero_radius`,
|
||||
`cutter_comp_plane_change`, `g53_incremental`, `namedparam_readonly`,
|
||||
`numbered_param_readonly`, `tool_not_found`, and
|
||||
`tool_length_offset_not_found` negative fixtures. The WASM interpreter file
|
||||
path additionally covers the same canonical-event fixture group except
|
||||
`namedparam_semantics` and `position_params`, plus `file_open_reset`,
|
||||
`percent_file_finish`, and `oword_subroutine`. OPFS validation is limited to
|
||||
the JavaScript host-boundary adapter plus the INI browser smoke harness. Full
|
||||
browser coverage, full SDK coverage, and full machine-session validation remain
|
||||
future work.
|
||||
path additionally covers the same canonical-event fixture group, plus
|
||||
`namedparam_semantics` through the INI-aware file execution ABI,
|
||||
`file_open_reset`, `percent_file_finish`, and `oword_subroutine`.
|
||||
`position_params` uses a dedicated file-path expectation under
|
||||
`tests/fixtures/canon_file/` because LinuxCNC file execution advances the
|
||||
post-execute position parameters differently than the line-by-line MDI smoke.
|
||||
OPFS validation is limited to the JavaScript host-boundary adapter plus the INI
|
||||
browser smoke harness. Full browser coverage, full SDK coverage, and full
|
||||
machine-session validation remain future work.
|
||||
|
||||
## WASM/Browser Fixture Matrix
|
||||
|
||||
Node WASM `Interp::execute()` coverage currently includes:
|
||||
|
||||
- `minimal_linear`
|
||||
- `arc_semantics`
|
||||
- `length_units`
|
||||
- `modal_incremental`
|
||||
- `plane_selection`
|
||||
- `coordinate_offsets`
|
||||
- `g53_machine_coordinates`
|
||||
- `feed_control_modes`
|
||||
- `position_params`
|
||||
- `probe_semantics`
|
||||
- `spindle_orient`
|
||||
- `comment_logging`
|
||||
- `numbered_params`
|
||||
- `tool_semantics`
|
||||
- `tool_table_setup`
|
||||
- `tool_reload`
|
||||
- `canned_cycles`
|
||||
- `cutter_comp_motion`
|
||||
- `threading_sync`
|
||||
- `nurbs_g5_semantics`
|
||||
- `nurbs_g6_semantics`
|
||||
- `state_tag_motion`
|
||||
- `canon_runtime_edges`
|
||||
- `program_end_modal_reset`
|
||||
- `namedparam_semantics` through the INI-aware program ABI
|
||||
|
||||
Node WASM file-path coverage currently includes:
|
||||
|
||||
- `minimal_linear`
|
||||
- `arc_semantics`
|
||||
- `length_units`
|
||||
- `modal_incremental`
|
||||
- `plane_selection`
|
||||
- `coordinate_offsets`
|
||||
- `g53_machine_coordinates`
|
||||
- `feed_control_modes`
|
||||
- `probe_semantics`
|
||||
- `spindle_orient`
|
||||
- `comment_logging`
|
||||
- `numbered_params`
|
||||
- `tool_semantics`
|
||||
- `tool_table_setup`
|
||||
- `tool_reload`
|
||||
- `canned_cycles`
|
||||
- `cutter_comp_motion`
|
||||
- `threading_sync`
|
||||
- `nurbs_g5_semantics`
|
||||
- `nurbs_g6_semantics`
|
||||
- `state_tag_motion`
|
||||
- `canon_runtime_edges`
|
||||
- `program_end_modal_reset`
|
||||
- `file_open_reset`
|
||||
- `percent_file_finish`
|
||||
- `oword_subroutine`
|
||||
- `position_params` through the dedicated `canon_file/` expectation
|
||||
- `namedparam_semantics` through the INI-aware file ABI
|
||||
|
||||
Browser interpreter `Interp::execute()` coverage currently includes:
|
||||
|
||||
- `minimal_linear`
|
||||
- `arc_semantics`
|
||||
- `length_units`
|
||||
- `modal_incremental`
|
||||
- `plane_selection`
|
||||
- `coordinate_offsets`
|
||||
- `g53_machine_coordinates`
|
||||
- `feed_control_modes`
|
||||
- `canned_cycles`
|
||||
- `numbered_params`
|
||||
- `comment_logging`
|
||||
- `tool_semantics`
|
||||
- `tool_table_setup`
|
||||
- `probe_semantics`
|
||||
- `spindle_orient`
|
||||
- `cutter_comp_motion`
|
||||
- `threading_sync`
|
||||
- `nurbs_g5_semantics`
|
||||
- `nurbs_g6_semantics`
|
||||
- `state_tag_motion`
|
||||
- `canon_runtime_edges`
|
||||
- `tool_reload`
|
||||
- `program_end_modal_reset`
|
||||
|
||||
Browser interpreter negative coverage currently includes every fixture under
|
||||
`tests/fixtures/gcode_errors/`:
|
||||
|
||||
- `g1_zero_feed`
|
||||
- `arc_radius_mismatch`
|
||||
- `arc_zero_radius`
|
||||
- `g53_incremental`
|
||||
- `cutter_comp_plane_change`
|
||||
- `namedparam_readonly`
|
||||
- `numbered_param_readonly`
|
||||
- `tool_length_offset_not_found`
|
||||
- `tool_not_found`
|
||||
|
||||
Browser interpreter file-path coverage currently includes:
|
||||
|
||||
- `position_params` through the dedicated `canon_file/` expectation
|
||||
- `file_open_reset`
|
||||
- `percent_file_finish`
|
||||
- `oword_subroutine`
|
||||
- `namedparam_semantics` through the INI-aware file ABI
|
||||
|
||||
All current positive G-code fixtures have browser interpreter smoke coverage
|
||||
through either `Interp::execute()`, the file-path ABI, or the INI-aware
|
||||
file-path ABI.
|
||||
|
||||
The current fixture expectations validate standalone behavior against both the
|
||||
vendored LinuxCNC source path and an upstream `rs274` side-by-side baseline for
|
||||
|
||||
Reference in New Issue
Block a user