/** * 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 '); }); });