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

49 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 und —
* gemäß Entscheidung — fehlende Achsen c (Palm) / e (Greifer) als 0 mitgesendet
* werden. 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('typischer Homing-State (x,y,z,a,b) → c/e als 0 ergänzt, alle 7 Achsen', () => {
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 C0.00 E0.00');
});
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- und undefined-Achsen werden als 0 gesendet', () => {
const state = { x: 10, y: null, z: undefined, a: 0, b: -0.0 };
expect(buildG92(state)).toBe('G92 X10.00 Y0.00 Z0.00 A0.00 B0.00 C0.00 E0.00');
});
test('fillMissingWithZero=false lässt fehlende Achsen weg', () => {
const state = { x: 10, y: 20 };
expect(buildG92(state, { fillMissingWithZero: false })).toBe('G92 X10.00 Y20.00');
});
test('decimals steuert die Nachkommastellen', () => {
expect(buildG92({ x: 1.23456 }, { decimals: 3 }))
.toBe('G92 X1.235 Y0.000 Z0.000 A0.000 B0.000 C0.000 E0.000');
});
test('leerer State → alle Achsen 0', () => {
expect(buildG92({})).toBe('G92 X0.00 Y0.00 Z0.00 A0.00 B0.00 C0.00 E0.00');
expect(buildG92()).toBe('G92 X0.00 Y0.00 Z0.00 A0.00 B0.00 C0.00 E0.00');
});
test('nicht-numerische Werte (NaN/Strings) werden als 0 behandelt', () => {
expect(buildG92({ x: 'abc', y: NaN, z: 5 }))
.toBe('G92 X0.00 Y0.00 Z5.00 A0.00 B0.00 C0.00 E0.00');
});
});