85 lines
4.0 KiB
JavaScript
85 lines
4.0 KiB
JavaScript
import assert from "node:assert/strict";
|
|
import { readFile } from "node:fs/promises";
|
|
|
|
import {
|
|
applyIniConfigToProfile,
|
|
parseLinuxCncIni,
|
|
} from "../../app/src/runtime/linuxcnc-ini-runtime.js";
|
|
import { xyzacTrtProfile } from "../../app/src/profiles/xyzac-trt.js";
|
|
import { xyzbcTrtProfile } from "../../app/src/profiles/xyzbc-trt.js";
|
|
|
|
const xyzacIniText = await readFile(
|
|
new URL("../../../wasm-port/vendor/linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzac-trt.ini", import.meta.url),
|
|
"utf8",
|
|
);
|
|
const xyzbcIniText = await readFile(
|
|
new URL("../../../wasm-port/vendor/linuxcnc/configs/sim/axis/vismach/5axis/table-rotary-tilting/xyzbc-trt.ini", import.meta.url),
|
|
"utf8",
|
|
);
|
|
|
|
const xyzacIni = parseLinuxCncIni(xyzacIniText, {
|
|
path: xyzacTrtProfile.iniPath,
|
|
profileId: xyzacTrtProfile.id,
|
|
});
|
|
assert.equal(xyzacIni.apiName, "web-rtcp-5axis-linuxcnc-ini-config");
|
|
assert.equal(xyzacIni.validation.ready, true);
|
|
assert.equal(xyzacIni.machineName, "sim-xyzac-trt-kins (switchkins)");
|
|
assert.equal(xyzacIni.kinematics.name, "xyzac-trt-kins");
|
|
assert.equal(xyzacIni.kinematicsParameters.sparm, "identityfirst");
|
|
assert.equal(xyzacIni.kinematicsParameters.joints, 5);
|
|
assert.equal(xyzacIni.traj.coordinates, "XYZAC");
|
|
assert.equal(xyzacIni.rs274ngc.halPinVars, true);
|
|
assert.equal(xyzacIni.rs274ngc.parameterFile, "xyzac.var");
|
|
assert.equal(xyzacIni.hal.halFiles.includes("LIB:basic_sim.tcl"), true);
|
|
assert.equal(xyzacIni.hal.postguiHalFiles.includes("switchkins_postgui.hal"), true);
|
|
assert.equal(xyzacIni.hal.halcmd.some((line) => line.includes("motion.analog-out-03") && line.includes("motion.switchkins-type")), true);
|
|
assert.equal(xyzacIni.emcmot.module, "motmod");
|
|
assert.equal(xyzacIni.emcmot.servoPeriodNs, 1000000);
|
|
assert.equal(xyzacIni.task.module, "milltask");
|
|
assert.equal(xyzacIni.task.cycleTimeSeconds, 0.01);
|
|
assert.equal(xyzacIni.emcio.toolTable, "xyzac-trt.tbl");
|
|
assert.equal(xyzacIni.axisLimits.A.max, 50);
|
|
assert.equal(xyzacIni.jointConfig[3].axis, "A");
|
|
assert.equal(xyzacIni.jointConfig[4].max, 36000);
|
|
assert.deepEqual(xyzacIni.halui.mdiCommands, ["M429", "M428", "M430"]);
|
|
assert.equal(xyzacIni.rs274ngc.remaps.map((remap) => remap.code).join(","), "M428,M429,M430");
|
|
assert.equal(xyzacIni.hal.initialSets.some((set) => set.pin === "y-offset" && set.value === 20), true);
|
|
|
|
const derivedXyzac = applyIniConfigToProfile(xyzacTrtProfile, xyzacIni);
|
|
assert.equal(derivedXyzac.machineName, xyzacIni.machineName);
|
|
assert.equal(derivedXyzac.traj.coordinates, "XYZAC");
|
|
assert.equal(derivedXyzac.axisLimits.X.min, -200);
|
|
assert.equal(derivedXyzac.jointConfig.length, 5);
|
|
assert.equal(derivedXyzac.linuxCncIniConfig.path.endsWith("xyzac-trt.ini"), true);
|
|
|
|
const xyzbcIni = parseLinuxCncIni(xyzbcIniText, {
|
|
path: xyzbcTrtProfile.iniPath,
|
|
profileId: xyzbcTrtProfile.id,
|
|
});
|
|
assert.equal(xyzbcIni.validation.ready, true);
|
|
assert.equal(xyzbcIni.kinematics.name, "xyzbc-trt-kins");
|
|
assert.equal(xyzbcIni.kinematicsModuleId, "xyzbc-trt");
|
|
assert.equal(xyzbcIni.traj.coordinates, "XYZBC");
|
|
assert.equal(xyzbcIni.rs274ngc.parameterFile, "xyzbc.var");
|
|
assert.equal(xyzbcIni.emcio.toolTable, "xyzbc-trt.tbl");
|
|
assert.equal(xyzbcIni.axisLimits.B.max, 36000);
|
|
assert.equal(xyzbcIni.jointConfig[3].axis, "B");
|
|
assert.equal(xyzbcIni.kinematicsParameters.switchkinsTypes[1].webKinsType, "tcp-xyzbc");
|
|
|
|
const missingHalPinVarsIni = parseLinuxCncIni(xyzacIniText.replace(/^\s*HAL_PIN_VARS\s*=\s*1$/m, ""), {
|
|
path: xyzacTrtProfile.iniPath,
|
|
profileId: xyzacTrtProfile.id,
|
|
});
|
|
assert.equal(missingHalPinVarsIni.validation.ready, false);
|
|
assert.equal(missingHalPinVarsIni.validation.missing.includes("RS274NGC.HAL_PIN_VARS=1"), true);
|
|
|
|
const missingTaskIni = parseLinuxCncIni(xyzacIniText.replace(/\n\[TASK\][\s\S]*?(?=\n\[EMCIO\])/m, "\n"), {
|
|
path: xyzacTrtProfile.iniPath,
|
|
profileId: xyzacTrtProfile.id,
|
|
});
|
|
assert.equal(missingTaskIni.validation.ready, false);
|
|
assert.equal(missingTaskIni.validation.missing.includes("[TASK]"), true);
|
|
assert.equal(missingTaskIni.validation.missing.includes("TASK.CYCLE_TIME"), true);
|
|
|
|
console.log("linuxcnc_ini_runtime_smoke=ok");
|