Files
appRobotDriver/test/GCode.receiveGCode.test.js
2026-06-26 11:39:20 +02:00

135 lines
3.4 KiB
JavaScript

const GCode = require('../robot/GCode')
const createDummyRobot = require('./helpers/createDummyRobot')
describe('GCode.receiveGCode', () => {
test('G90 setzt Absolutmodus', () => {
const robot = createDummyRobot()
robot.moveRelative = true
GCode.receiveGCode(robot, 'G90')
expect(robot.moveRelative).toBe(false)
expect(robot.calculateAngles3D).not.toHaveBeenCalled()
expect(robot.sendCommand).not.toHaveBeenCalled()
})
test('G91 setzt Relativmodus', () => {
const robot = createDummyRobot()
GCode.receiveGCode(robot, 'G91')
expect(robot.moveRelative).toBe(true)
})
test('G1 absolut setzt Koordinaten', () => {
const robot = createDummyRobot()
GCode.receiveGCode(robot, 'G90 G1 X10 Y20 Z30')
expect(robot.x).toBe(10)
expect(robot.y).toBe(20)
expect(robot.z).toBe(30)
expect(robot.calculateAngles3D).toHaveBeenCalledTimes(1)
expect(robot.sendCommand).toHaveBeenCalledTimes(1)
})
test('G1 relativ addiert Koordinaten', () => {
const robot = createDummyRobot()
robot.moveRelative = true
robot.x = 5
robot.y = 5
GCode.receiveGCode(robot, 'G1 X2 Y3')
expect(robot.x).toBe(7)
expect(robot.y).toBe(8)
})
test('G1 ignore Jogg', () => {
const robot = createDummyRobot()
robot.moveRelative = true
robot.x = 5
robot.y = 5
GCode.receiveGCode(robot, '$J=G91 G1 X2 Y3')
expect(robot.x).toBe(7)
expect(robot.y).toBe(8)
})
test('G1 ignore Jogg absolute, G21 = mm ist OK', () => {
const robot = createDummyRobot()
robot.moveRelative = true
robot.x = 5
robot.y = 5
GCode.receiveGCode(robot, '$J=G90 G21 G1 X20 Y30')
expect(robot.x).toBe(20)
expect(robot.y).toBe(30)
})
test('M1 relativ verändert Motorwerte', () => {
const robot = createDummyRobot()
robot.moveRelative = true
GCode.receiveGCode(robot, 'M1 X10 Y20 Z30 A1 B2 C3')
expect(robot.xMotor).toBe(10)
expect(robot.alpha).toBe(20)
expect(robot.beta).toBe(30)
expect(robot.a).toBe(1)
expect(robot.b).toBe(2)
expect(robot.c).toBe(3)
expect(robot.calculatePositionFromMotorAngles).toHaveBeenCalled()
expect(robot.sendCommand).toHaveBeenCalled()
})
test('G28 setzt Home-Motorwerte direkt (Singularität) und löst Bewegung aus', () => {
const robot = createDummyRobot()
GCode.receiveGCode(robot, 'G28')
// Voll ausgestreckt = Handgelenk-Singularität -> Motorwerte DIREKT, dann FK (nicht IK).
expect(robot.xMotor).toBe(0)
expect(robot.alpha).toBe(0)
expect(robot.beta).toBe(0)
expect(robot.a).toBe(0)
expect(robot.b).toBe(Math.PI) // gerade Hand (Phase-1-Konvention)
expect(robot.c).toBe(0)
expect(robot.e).toBe(0)
expect(robot.calculateAngles3D).not.toHaveBeenCalled()
expect(robot.calculatePositionFromMotorAngles).toHaveBeenCalledTimes(1)
expect(robot.sendCommand).toHaveBeenCalledTimes(1)
})
test('Sende falsches Format', () =>{
const robot = createDummyRobot();
GCode.receiveGCode(robot, 'X324');
})
test('receiveGCode verarbeitet Buffer korrekt (UTF-8)', () => {
const robot = createDummyRobot()
const buffer = Buffer.from('G90 G1 X12 Y34 Z56', 'utf8')
GCode.receiveGCode(robot, buffer)
expect(robot.moveRelative).toBe(false)
expect(robot.x).toBe(12)
expect(robot.y).toBe(34)
expect(robot.z).toBe(56)
expect(robot.calculateAngles3D).toHaveBeenCalledTimes(1)
expect(robot.sendCommand).toHaveBeenCalledTimes(1)
})
})