Guard INI context fixture staging

This commit is contained in:
2026-06-13 15:22:21 +08:00
parent dfeedeb675
commit dfa817a0f8
3 changed files with 159 additions and 33 deletions

View File

@@ -4344,6 +4344,45 @@
return wasmPath;
}
async function writeIniToolTableFixtureStaging(interp, wasmDir, expectedWasmDir) {
if (wasmDir !== expectedWasmDir) {
throw new Error("browser_ini_tool_table_staging_root: path drift");
}
const files = ["ini_tool_table.ini", "ini_tool_table.tbl", "ini_tool_table.ngc"];
if (files.length !== new Set(files).size) {
throw new Error("browser_ini_tool_table_staging_manifest: list drift");
}
for (const file of files) {
if (`${wasmDir}/${file}` !== `${expectedWasmDir}/${file}`) {
throw new Error(`browser_ini_tool_table_${file}_staging: path drift`);
}
}
await writeLocalIniFixture(
interp,
"ini_tool_table.ini",
`${wasmDir}/ini_tool_table.ini`,
`${expectedWasmDir}/ini_tool_table.ini`,
);
await writeLocalIniFixture(
interp,
"ini_tool_table.tbl",
`${wasmDir}/ini_tool_table.tbl`,
`${expectedWasmDir}/ini_tool_table.tbl`,
);
await writeLocalGcodeFixture(
interp,
"ini_tool_table",
`${wasmDir}/ini_tool_table.ngc`,
`${expectedWasmDir}/ini_tool_table.ngc`,
);
return {
iniPath: `${wasmDir}/ini_tool_table.ini`,
programPath: `${wasmDir}/ini_tool_table.ngc`,
};
}
async function loadSimMachineFiles(machineRel, iniFile, programFile = null) {
const iniText = await fetchText(
`../../vendor/linuxcnc/configs/sim/${machineRel}/${iniFile}`,
@@ -5342,8 +5381,12 @@
].join("\n"),
);
const namedParamPath = `/work/${INTERP_INI_FIXTURE}.ngc`;
interp.writeTextFile(namedParamPath, namedParamProgramText);
const namedParamPath = await writeLocalGcodeFixture(
interp,
INTERP_INI_FIXTURE,
`/work/${INTERP_INI_FIXTURE}.ngc`,
`/work/${INTERP_INI_FIXTURE}.ngc`,
);
verifyExpectedOutput(
`${INTERP_INI_FIXTURE}_file`,
interp.runFileWithIni(namedParamPath, namedParamIniPath),
@@ -5351,25 +5394,23 @@
);
const iniToolTableDir = "/work/browser-ini-tool-table";
const iniToolTableIniPath = `${iniToolTableDir}/ini_tool_table.ini`;
const iniToolTableProgramPath = `${iniToolTableDir}/ini_tool_table.ngc`;
interp.writeTextFile(iniToolTableIniPath, await fetchText("../fixtures/ini/ini_tool_table.ini"));
interp.writeTextFile(
`${iniToolTableDir}/ini_tool_table.tbl`,
await fetchText("../fixtures/ini/ini_tool_table.tbl"),
);
interp.writeTextFile(
iniToolTableProgramPath,
await fetchText("../fixtures/gcode/ini_tool_table.ngc"),
const iniToolTable = await writeIniToolTableFixtureStaging(
interp,
iniToolTableDir,
"/work/browser-ini-tool-table",
);
verifyExpectedOutput(
"browser_ini_tool_table_file",
interp.runFileWithIni(iniToolTableProgramPath, iniToolTableIniPath),
interp.runFileWithIni(iniToolTable.programPath, iniToolTable.iniPath),
(await fetchText("../fixtures/canon/ini_tool_table.events")).trimEnd(),
);
const baselineIniPath = `/work/${INTERP_BASELINE_INI_FIXTURE}.ngc`;
interp.writeTextFile(baselineIniPath, baselineIniProgramText);
const baselineIniPath = await writeLocalGcodeFixture(
interp,
INTERP_BASELINE_INI_FIXTURE,
`/work/${INTERP_BASELINE_INI_FIXTURE}.ngc`,
`/work/${INTERP_BASELINE_INI_FIXTURE}.ngc`,
);
verifyExpectedOutput(
`${INTERP_BASELINE_INI_FIXTURE}_file`,
interp.runFileWithIni(baselineIniPath, namedParamIniPath),

View File

@@ -133,6 +133,24 @@ function writeLocalErrorGcodeFixture(fixtureName, wasmPath, expectedWasmPath, ta
return wasmPath;
}
function writeIniToolTableFixtureStaging(wasmDir, expectedWasmDir, targetInterp = interp) {
assert.equal(wasmDir, expectedWasmDir, "ini_tool_table staging root drift");
const files = ["ini_tool_table.ini", "ini_tool_table.tbl", "ini_tool_table.ngc"];
assert.equal(new Set(files).size, files.length, "ini_tool_table staging manifest duplicate");
for (const file of files) {
assert.equal(`${wasmDir}/${file}`, `${expectedWasmDir}/${file}`, `ini_tool_table ${file} staging path drift`);
}
writeLocalIniFixture("ini_tool_table.ini", `${wasmDir}/ini_tool_table.ini`, `${expectedWasmDir}/ini_tool_table.ini`, targetInterp);
writeLocalIniFixture("ini_tool_table.tbl", `${wasmDir}/ini_tool_table.tbl`, `${expectedWasmDir}/ini_tool_table.tbl`, targetInterp);
writeLocalGcodeFixture("ini_tool_table", `${wasmDir}/ini_tool_table.ngc`, `${expectedWasmDir}/ini_tool_table.ngc`, targetInterp);
return {
iniPath: `${wasmDir}/ini_tool_table.ini`,
programPath: `${wasmDir}/ini_tool_table.ngc`,
};
}
function stageInterpIniContext(name, programFile = "test.ngc") {
const sourceRootRel = `tests/interp/${name}`;
const iniText = readFileSync(
@@ -732,8 +750,11 @@ verifyExpectedOutput(
].join("\n"),
);
const namedParamFilePath = `/work/${INTERP_INI_FIXTURE}.ngc`;
interp.writeTextFile(namedParamFilePath, namedParamProgramText);
const namedParamFilePath = writeLocalGcodeFixture(
INTERP_INI_FIXTURE,
`/work/${INTERP_INI_FIXTURE}.ngc`,
`/work/${INTERP_INI_FIXTURE}.ngc`,
);
verifyExpectedOutput(
"namedparam_semantics_file",
interp.runFileWithIni(namedParamFilePath, namedParamIniPath),
@@ -741,28 +762,21 @@ verifyExpectedOutput(
);
const iniToolTableDir = "/work/ini-tool-table";
const iniToolTableIniPath = `${iniToolTableDir}/ini_tool_table.ini`;
const iniToolTableProgramPath = `${iniToolTableDir}/ini_tool_table.ngc`;
interp.writeTextFile(
iniToolTableIniPath,
readFileSync(resolve(rootDir, "tests/fixtures/ini/ini_tool_table.ini"), "utf8"),
);
interp.writeTextFile(
`${iniToolTableDir}/ini_tool_table.tbl`,
readFileSync(resolve(rootDir, "tests/fixtures/ini/ini_tool_table.tbl"), "utf8"),
);
interp.writeTextFile(
iniToolTableProgramPath,
readFileSync(resolve(rootDir, "tests/fixtures/gcode/ini_tool_table.ngc"), "utf8"),
const iniToolTable = writeIniToolTableFixtureStaging(
iniToolTableDir,
"/work/ini-tool-table",
);
verifyExpectedOutput(
"ini_tool_table_file",
interp.runFileWithIni(iniToolTableProgramPath, iniToolTableIniPath),
interp.runFileWithIni(iniToolTable.programPath, iniToolTable.iniPath),
readFileSync(resolve(rootDir, "tests/fixtures/canon/ini_tool_table.events"), "utf8").trimEnd(),
);
const baselineIniFilePath = `/work/${INTERP_BASELINE_INI_FIXTURE}.ngc`;
interp.writeTextFile(baselineIniFilePath, baselineIniProgramText);
const baselineIniFilePath = writeLocalGcodeFixture(
INTERP_BASELINE_INI_FIXTURE,
`/work/${INTERP_BASELINE_INI_FIXTURE}.ngc`,
`/work/${INTERP_BASELINE_INI_FIXTURE}.ngc`,
);
verifyExpectedOutput(
`${INTERP_BASELINE_INI_FIXTURE}_file`,
interp.runFileWithIni(baselineIniFilePath, namedParamIniPath),