Files
appRobotHoming/test/buildG92.test.js
2026-06-25 17:34:41 +02:00

50 lines
2.0 KiB
JavaScript

/**
* buildG92.test.js
* Unit-Tests für server/buildG92.cjs
*
* Sichert ab, dass aus dem Homing-State der korrekte G92-String entsteht:
* bekannte Achsen werden real gesendet, wirklich fehlende/null-Achsen per
* Default WEGGELASSEN (Driver lässt sie unverändert). Achsbuchstaben +
* Reihenfolge müssen zur Driver-Erwartung passen
* (X→xMotor, Y→alpha, Z→beta, A→a, B→b, C→c, E→e).
*/
const { buildG92 } = require('../server/buildG92.cjs');
describe('buildG92', () => {
test('Fallback-State (alle 7 DOF) → alle Achsen mit realem Wert', () => {
const state = { x: 164.57045, y: -2.08983, z: 60.58375, a: 86.75125, b: -46.96569, c: -64.90875, e: 22.58589 };
expect(buildG92(state)).toBe('G92 X164.57 Y-2.09 Z60.58 A86.75 B-46.97 C-64.91 E22.59');
});
test('4b-Primärkette (nur x,y,z,a,b) → c/e werden weggelassen', () => {
const state = { x: 192.72935, y: 35.99125, z: -30.87771, a: -1.69522, b: 12.34 };
expect(buildG92(state)).toBe('G92 X192.73 Y35.99 Z-30.88 A-1.70 B12.34');
});
test('Reihenfolge ist immer x,y,z,a,b,c,e (unabhängig von Key-Reihenfolge)', () => {
const state = { b: 1, a: 2, x: 3, e: 4, z: 5, y: 6, c: 7 };
expect(buildG92(state)).toBe('G92 X3.00 Y6.00 Z5.00 A2.00 B1.00 C7.00 E4.00');
});
test('null/undefined/NaN-Achsen werden weggelassen (keine falsche 0)', () => {
const state = { x: 10, y: null, z: undefined, a: 0, b: NaN, c: 'abc' };
expect(buildG92(state)).toBe('G92 X10.00 A0.00');
});
test('fillMissingWithZero=true füllt fehlende Achsen wieder mit 0', () => {
const state = { x: 10, y: 20 };
expect(buildG92(state, { fillMissingWithZero: true }))
.toBe('G92 X10.00 Y20.00 Z0.00 A0.00 B0.00 C0.00 E0.00');
});
test('decimals steuert die Nachkommastellen', () => {
expect(buildG92({ x: 1.23456 }, { decimals: 3 })).toBe('G92 X1.235');
});
test('leerer State → "G92 " ohne Achsen', () => {
expect(buildG92({})).toBe('G92 ');
expect(buildG92()).toBe('G92 ');
});
});