import { test } from 'tap'; import MarlinRunner from '../src/server/controllers/Marlin/MarlinRunner'; test('MarlinLineParserResultEcho', (t) => { const runner = new MarlinRunner(); runner.on('echo', ({ raw, message }) => { t.equal(raw, 'echo:message'); t.equal(message, 'message'); t.end(); }); const line = 'echo:message'; runner.parse(line); }); test('MarlinLineParserResultError', (t) => { const runner = new MarlinRunner(); runner.on('error', ({ raw, message }) => { t.equal(raw, 'Error:Printer halted. kill() called!'); t.equal(message, 'Printer halted. kill() called!'); t.end(); }); const line = 'Error:Printer halted. kill() called!'; runner.parse(line); }); test('MarlinLineParserResultFirmware', (t) => { const runner = new MarlinRunner(); runner.on('firmware', (payload) => { const { raw, firmwareName, protocolVersion, machineType, extruderCount, uuid } = payload; t.equal(raw, 'FIRMWARE_NAME:Marlin 1.1.0 (Github) SOURCE_CODE_URL:https://github.com/MarlinFirmware/Marlin PROTOCOL_VERSION:1.0 MACHINE_TYPE:RepRap EXTRUDER_COUNT:1 UUID:cede2a2f-41a2-4748-9b12-c55c62f367ff'); t.equal(firmwareName, 'Marlin 1.1.0'); t.equal(protocolVersion, '1.0'); t.equal(machineType, 'RepRap'); t.equal(extruderCount, 1); t.equal(uuid, 'cede2a2f-41a2-4748-9b12-c55c62f367ff'); t.end(); }); const line = 'FIRMWARE_NAME:Marlin 1.1.0 (Github) SOURCE_CODE_URL:https://github.com/MarlinFirmware/Marlin PROTOCOL_VERSION:1.0 MACHINE_TYPE:RepRap EXTRUDER_COUNT:1 UUID:cede2a2f-41a2-4748-9b12-c55c62f367ff'; runner.parse(line); }); test('MarlinLineParserResultOk', (t) => { const runner = new MarlinRunner(); runner.on('ok', ({ raw }) => { t.equal(raw, 'ok'); t.end(); }); const line = 'ok'; runner.parse(line); }); test('MarlinLineParserResultPosition', (t) => { const runner = new MarlinRunner(); runner.on('pos', ({ raw, pos }) => { t.equal(raw, 'X:1.529 Y:-5.440 Z:0.00 E:0.00 Count X:0 Y:0 Z:0'); t.same(pos, { x: '1.529', y: '-5.440', z: '0.00', e: '0.00' }); t.end(); }); const line = 'X:1.529 Y:-5.440 Z:0.00 E:0.00 Count X:0 Y:0 Z:0'; runner.parse(line); }); test('MarlinLineParserResultStart', (t) => { const runner = new MarlinRunner(); runner.on('start', ({ raw }) => { t.equal(raw, 'start'); t.end(); }); const line = 'start'; runner.parse(line); }); test('MarlinLineParserResultTemperature', (t) => { t.test('ok T:0', (t) => { const runner = new MarlinRunner(); runner.on('temperature', ({ raw, ok, extruder, heatedBed, wait }) => { t.equal(raw, 'ok T:0'); t.equal(ok, true); t.same(extruder, {}); t.same(heatedBed, {}); t.equal(wait, undefined); t.end(); }); const line = 'ok T:0'; runner.parse(line); }); t.test('ok T:293.0 /0.0 B:25.9 /0.0 @:0 B@:0', (t) => { const runner = new MarlinRunner(); runner.on('temperature', ({ raw, ok, extruder, heatedBed, wait }) => { t.equal(raw, 'ok T:293.0 /0.0 B:25.9 /0.0 @:0 B@:0'); t.equal(ok, true); t.same(extruder, { deg: '293.0', degTarget: '0.0', power: 0, }); t.same(heatedBed, { deg: '25.9', degTarget: '0.0', power: 0, }); t.equal(wait, undefined); t.end(); }); const line = 'ok T:293.0 /0.0 B:25.9 /0.0 @:0 B@:0'; runner.parse(line); }); t.test('ok T:293.0 /0.0 B:25.9 /0.0 T0:293.0 /0.0 T1:100.0 /0.0 @:0 B@:0 @0:0 @1:0', (t) => { const runner = new MarlinRunner(); runner.on('temperature', ({ raw, ok, extruder, heatedBed, wait }) => { t.equal(raw, 'ok T:293.0 /0.0 B:25.9 /0.0 T0:293.0 /0.0 T1:100.0 /0.0 @:0 B@:0 @0:0 @1:0'); t.equal(ok, true); t.same(extruder, { deg: '293.0', degTarget: '0.0', power: 0, }); t.same(heatedBed, { deg: '25.9', degTarget: '0.0', power: 0, }); t.equal(wait, undefined); t.end(); }); const line = 'ok T:293.0 /0.0 B:25.9 /0.0 T0:293.0 /0.0 T1:100.0 /0.0 @:0 B@:0 @0:0 @1:0'; runner.parse(line); }); t.test('ok T:293.0 /0.0 (0.0) B:25.9 /0.0 T0:293.0 /0.0 (0.0) T1:100.0 /0.0 (0.0) @:0 B@:0 @0:0 @1:0', (t) => { const runner = new MarlinRunner(); runner.on('temperature', ({ raw, ok, extruder, heatedBed, wait }) => { t.equal(raw, 'ok T:293.0 /0.0 (0.0) B:25.9 /0.0 T0:293.0 /0.0 (0.0) T1:100.0 /0.0 (0.0) @:0 B@:0 @0:0 @1:0'); t.equal(ok, true); t.same(extruder, { deg: '293.0', degTarget: '0.0', power: 0, }); t.same(heatedBed, { deg: '25.9', degTarget: '0.0', power: 0, }); t.equal(wait, undefined); t.end(); }); const line = 'ok T:293.0 /0.0 (0.0) B:25.9 /0.0 T0:293.0 /0.0 (0.0) T1:100.0 /0.0 (0.0) @:0 B@:0 @0:0 @1:0'; runner.parse(line); }); t.test('ok T:293.0 /0.0 (0.0) B:25.9 /0.0 T0:293.0 /0.0 (0.0) T1:100.0 /0.0 (0.0) @:0 B@:0 @0:0 @1:0 W:?', (t) => { const runner = new MarlinRunner(); runner.on('temperature', ({ raw, ok, extruder, heatedBed, wait }) => { t.equal(raw, 'ok T:293.0 /0.0 (0.0) B:25.9 /0.0 T0:293.0 /0.0 (0.0) T1:100.0 /0.0 (0.0) @:0 B@:0 @0:0 @1:0 W:?'); t.equal(ok, true); t.same(extruder, { deg: '293.0', degTarget: '0.0', power: 0, }); t.same(heatedBed, { deg: '25.9', degTarget: '0.0', power: 0, }); t.equal(wait, '?'); t.end(); }); const line = 'ok T:293.0 /0.0 (0.0) B:25.9 /0.0 T0:293.0 /0.0 (0.0) T1:100.0 /0.0 (0.0) @:0 B@:0 @0:0 @1:0 W:?'; runner.parse(line); }); t.test('ok T:293.0 /0.0 (0.0) B:25.9 /0.0 T0:293.0 /0.0 (0.0) T1:100.0 /0.0 (0.0) @:0 B@:0 @0:0 @1:0 W:0', (t) => { const runner = new MarlinRunner(); runner.on('temperature', ({ raw, ok, extruder, heatedBed, wait }) => { t.equal(raw, 'ok T:293.0 /0.0 (0.0) B:25.9 /0.0 T0:293.0 /0.0 (0.0) T1:100.0 /0.0 (0.0) @:0 B@:0 @0:0 @1:0 W:0'); t.equal(ok, true); t.same(extruder, { deg: '293.0', degTarget: '0.0', power: 0, }); t.same(heatedBed, { deg: '25.9', degTarget: '0.0', power: 0, }); t.equal(wait, '0'); t.end(); }); const line = 'ok T:293.0 /0.0 (0.0) B:25.9 /0.0 T0:293.0 /0.0 (0.0) T1:100.0 /0.0 (0.0) @:0 B@:0 @0:0 @1:0 W:0'; runner.parse(line); }); t.test(' T:293.0 /0.0 B:25.9 /0.0 @:0 B@:0', (t) => { const runner = new MarlinRunner(); runner.on('temperature', ({ raw, ok, extruder, heatedBed, wait }) => { t.equal(raw, ' T:293.0 /0.0 B:25.9 /0.0 @:0 B@:0'); t.equal(ok, false); t.same(extruder, { deg: '293.0', degTarget: '0.0', power: 0, }); t.same(heatedBed, { deg: '25.9', degTarget: '0.0', power: 0, }); t.equal(wait, undefined); t.end(); }); const line = ' T:293.0 /0.0 B:25.9 /0.0 @:0 B@:0'; runner.parse(line); }); t.test(' T:293.0 /0.0 B:25.9 /0.0 T0:293.0 /0.0 T1:100.0 /0.0 @:0 B@:0 @0:0 @1:0', (t) => { const runner = new MarlinRunner(); runner.on('temperature', ({ raw, ok, extruder, heatedBed, wait }) => { t.equal(raw, ' T:293.0 /0.0 B:25.9 /0.0 T0:293.0 /0.0 T1:100.0 /0.0 @:0 B@:0 @0:0 @1:0'); t.equal(ok, false); t.same(extruder, { deg: '293.0', degTarget: '0.0', power: 0, }); t.same(heatedBed, { deg: '25.9', degTarget: '0.0', power: 0, }); t.equal(wait, undefined); t.end(); }); const line = ' T:293.0 /0.0 B:25.9 /0.0 T0:293.0 /0.0 T1:100.0 /0.0 @:0 B@:0 @0:0 @1:0'; runner.parse(line); }); t.test(' T:293.0 /0.0 (0.0) B:25.9 /0.0 T0:293.0 /0.0 (0.0) T1:100.0 /0.0 (0.0) @:0 B@:0 @0:0 @1:0', (t) => { const runner = new MarlinRunner(); runner.on('temperature', ({ raw, ok, extruder, heatedBed, wait }) => { t.equal(raw, ' T:293.0 /0.0 (0.0) B:25.9 /0.0 T0:293.0 /0.0 (0.0) T1:100.0 /0.0 (0.0) @:0 B@:0 @0:0 @1:0'); t.equal(ok, false); t.same(extruder, { deg: '293.0', degTarget: '0.0', power: 0, }); t.same(heatedBed, { deg: '25.9', degTarget: '0.0', power: 0, }); t.equal(wait, undefined); t.end(); }); const line = ' T:293.0 /0.0 (0.0) B:25.9 /0.0 T0:293.0 /0.0 (0.0) T1:100.0 /0.0 (0.0) @:0 B@:0 @0:0 @1:0'; runner.parse(line); }); t.end(); });