UNPKG

knxultimate

Version:

KNX IP protocol implementation for Node. This is the ENGINE of Node-Red KNX-Ultimate node.

94 lines (84 loc) 2.1 kB
import { describe, test } from 'node:test' import assert from 'node:assert/strict' import DPT21 from '../../src/dptlib/dpt21' describe('DPT21 (General Status)', () => { describe('formatAPDU', () => { test('should correctly format valid status objects', () => { // All flags false assert.deepEqual( DPT21.formatAPDU({ outOfService: false, fault: false, overridden: false, inAlarm: false, alarmUnAck: false, }), Buffer.from([0b00000000]), ) // All flags true assert.deepEqual( DPT21.formatAPDU({ outOfService: true, fault: true, overridden: true, inAlarm: true, alarmUnAck: true, }), Buffer.from([0b00011111]), ) // Mixed flags assert.deepEqual( DPT21.formatAPDU({ outOfService: true, fault: false, overridden: true, inAlarm: false, alarmUnAck: true, }), Buffer.from([0b00010101]), ) }) }) describe('fromBuffer', () => { test('should correctly parse valid buffers', () => { // All bits 0 assert.deepEqual(DPT21.fromBuffer(Buffer.from([0b00000000])), { outOfService: false, fault: false, overridden: false, inAlarm: false, alarmUnAck: false, }) // All relevant bits 1 assert.deepEqual(DPT21.fromBuffer(Buffer.from([0b00011111])), { outOfService: true, fault: true, overridden: true, inAlarm: true, alarmUnAck: true, }) // Mixed bits assert.deepEqual(DPT21.fromBuffer(Buffer.from([0b00010101])), { outOfService: true, fault: false, overridden: true, inAlarm: false, alarmUnAck: true, }) // Reserved bits should be ignored (bits 5-7) assert.deepEqual(DPT21.fromBuffer(Buffer.from([0b11110101])), { outOfService: true, fault: false, overridden: true, inAlarm: false, alarmUnAck: true, }) }) test('should handle invalid buffer lengths', () => { // Empty buffer assert.strictEqual(DPT21.fromBuffer(Buffer.from([])), null) // Buffer too long assert.strictEqual(DPT21.fromBuffer(Buffer.from([0, 1])), null) }) }) })