From 6a2f63c894bde0b559deca9fe9e0d090740633ca Mon Sep 17 00:00:00 2001 From: cnc Date: Fri, 5 Jun 2026 07:39:12 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=BD=E5=BF=AB=E6=8E=A8=E8=BF=9B=EF=BC=9A?= =?UTF-8?q?=E5=8A=A0=E5=BC=BAOPFS=E5=8F=82=E6=95=B0=E5=A4=87=E4=BB=BD?= =?UTF-8?q?=E7=9B=AE=E5=BD=95=E8=BE=B9=E7=95=8C=E9=AA=8C=E8=AF=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 结论:真实浏览器app smoke继续使用LinuxCNC rs274ngc_pre.cc save_parameters() 语义,验证OPFS下备份link失败非致命时主参数仍持久化且目录不被误删;未扩展smoke parser功能。 --- web/test-browser-wasm-smoke-app-sections.js | 29 ++++++++++++++++----- 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/web/test-browser-wasm-smoke-app-sections.js b/web/test-browser-wasm-smoke-app-sections.js index 42b9dec..5e90795 100644 --- a/web/test-browser-wasm-smoke-app-sections.js +++ b/web/test-browser-wasm-smoke-app-sections.js @@ -39,6 +39,26 @@ export async function runBrowserAppOpfsSections(context) { const updatedParameterFile = new TextDecoder().decode(await appSimulator.fs.opfs.readFile("parameters/rs274ngc.var")); expectIncludes(updatedParameterFile, "5161\t2.000000", "app frame did not replace LinuxCNC parameter state after second parse"); + const savedParameterBackup = new TextDecoder().decode(await appSimulator.fs.opfs.readFile("parameters/rs274ngc.var.bak")); + expectIncludes(savedParameterBackup, "5161\t1.000000", + "app frame did not persist LinuxCNC parameter backup into OPFS"); + await appSimulator.fs.opfs.removeFile("parameters/rs274ngc.var.bak"); + const backupDirectory = appSimulator.fs.opfs.resolvePath("parameters/rs274ngc.var.bak"); + appSimulator.fs.module.FS.mkdir(backupDirectory); + await appSimulator.fs.opfs.persistDirectory("parameters/rs274ngc.var.bak"); + parseAppFrameProgram(appFrame, "G21 G90\nG0 X3\nG28.1\nM30\n"); + await waitFor( + () => appFrame.contentDocument?.querySelector("#axisX")?.value === "3.000", + "app frame did not parse third program for backup-directory coverage", + ); + const directoryBackupParameterFile = new TextDecoder().decode(await appSimulator.fs.opfs.readFile("parameters/rs274ngc.var")); + expectIncludes(directoryBackupParameterFile, "5161\t3.000000", + "app frame did not save LinuxCNC parameter state when backup link failed"); + await context.expectOpfsDirectoryStat( + appSimulator, + "parameters/rs274ngc.var.bak", + "app frame removed an existing OPFS backup directory after LinuxCNC non-fatal backup failure", + ); // LinuxCNC source basis: rs274ngc_pre.cc save_parameters() // renames filename + ".new" over filename after a successful save. await context.expectOpfsMissing( @@ -46,9 +66,6 @@ export async function runBrowserAppOpfsSections(context) { "parameters/rs274ngc.var.new", "app frame did not clean up LinuxCNC temporary parameter file in OPFS", ); - const savedParameterBackup = new TextDecoder().decode(await appSimulator.fs.opfs.readFile("parameters/rs274ngc.var.bak")); - expectIncludes(savedParameterBackup, "5161\t1.000000", - "app frame did not persist LinuxCNC parameter backup into OPFS"); } finally { await disposeAppFrame(appFrame); } @@ -59,7 +76,7 @@ export async function runBrowserAppOpfsSections(context) { await waitForAppControls(restoredAppFrame, "restored app frame did not load CNC controls"); await waitFor(() => { const restoredInput = restoredAppFrame.contentDocument?.querySelector("#programInput"); - return restoredInput?.value === "G21 G90\nG0 X2\nG28.1\nM30\n"; + return restoredInput?.value === "G21 G90\nG0 X3\nG28.1\nM30\n"; }, "app frame did not restore current program from OPFS after reload"); await waitForAppAlarm( restoredAppFrame, @@ -69,7 +86,7 @@ export async function runBrowserAppOpfsSections(context) { await getAppFrameSimulator(restoredAppFrame, "restored app frame did not create OPFS simulator workspace"); parseAppFrameProgram( restoredAppFrame, - "G21 G90\nF100\nO10 if [#5161 EQ 2]\nG1 X12\nO10 endif\nM30\n", + "G21 G90\nF100\nO10 if [#5161 EQ 3]\nG1 X13\nO10 endif\nM30\n", ); await waitForAppAlarm( restoredAppFrame, @@ -77,7 +94,7 @@ export async function runBrowserAppOpfsSections(context) { "restored app frame did not parse program with reloaded parameter state", ); await waitFor( - () => restoredAppFrame.contentDocument?.querySelector("#axisX")?.value === "12.000", + () => restoredAppFrame.contentDocument?.querySelector("#axisX")?.value === "13.000", "app frame did not reload LinuxCNC parameter state from OPFS after reload", ); } finally {