node-red-contrib-victron-ble
Version:
node-red node to parse Instant Readout advertisement data from Victron BLE devices
68 lines (58 loc) • 2.55 kB
JavaScript
const { describe, test } = require('node:test');
const assert = require('node:assert/strict');
const { BitReader, AlarmReason } = require('../dist/devices/base');
describe('BitReader', () => {
describe('toSignedInt static method', () => {
test('converts unsigned to signed integers correctly', () => {
assert.equal(BitReader.toSignedInt(0x000, 12), 0x000);
assert.equal(BitReader.toSignedInt(0x001, 12), 0x001);
assert.equal(BitReader.toSignedInt(0x242, 12), 0x242);
assert.equal(BitReader.toSignedInt(0x7ff, 12), 0x7ff);
assert.equal(BitReader.toSignedInt(0x800, 12), -0x800);
assert.equal(BitReader.toSignedInt(0xcad, 12), -0x353);
assert.equal(BitReader.toSignedInt(0xfff, 12), -0x001);
assert.equal(BitReader.toSignedInt(0x00, 5), 0x00);
assert.equal(BitReader.toSignedInt(0x01, 5), 0x01);
assert.equal(BitReader.toSignedInt(0x0f, 5), 0x0f);
assert.equal(BitReader.toSignedInt(0x10, 5), -0x10);
assert.equal(BitReader.toSignedInt(0x1f, 5), -0x01);
});
});
describe('bit and integer reading', () => {
test('reads bits and integers from hex data', () => {
const data = Buffer.from('1a2b3c4d5e6f7890', 'hex');
const reader = new BitReader(data);
assert.equal(reader.readBit(), 0);
assert.equal(reader.readBit(), 1);
assert.equal(reader.readBit(), 0);
assert.equal(reader.readBit(), 1);
assert.equal(reader.readUnsignedInt(6), 49);
assert.equal(reader.readSignedInt(6), 10);
assert.equal(reader.readSignedInt(4), -4);
assert.equal(reader.readUnsignedInt(11), 1235);
assert.equal(reader.readBit(), 0);
assert.equal(reader.readUnsignedInt(32), -1871155362);
});
test('reads bits correctly with simple data', () => {
const data = Buffer.from([0b10101010, 0b11001100]);
const reader = new BitReader(data);
assert.equal(reader.readBit(), 0);
assert.equal(reader.readBit(), 1);
assert.equal(reader.readUnsignedInt(2), 2);
assert.equal(reader.readUnsignedInt(4), 10);
});
test('handles byte boundaries', () => {
const data = Buffer.from([0xff, 0x00]);
const reader = new BitReader(data);
assert.equal(reader.readUnsignedInt(8), 255);
assert.equal(reader.readUnsignedInt(8), 0);
});
});
});
describe('Enums', () => {
test('AlarmReason enum values', () => {
assert.equal(AlarmReason.NO_ALARM, 0);
assert.equal(AlarmReason.LOW_VOLTAGE, 1);
assert.equal(AlarmReason.HIGH_VOLTAGE, 2);
});
});