dlms-protocol
Version:
DLMS Protocol parser for JavaScript
112 lines (96 loc) • 4.21 kB
JavaScript
import GlobalBlockTransfer from "../src/messages/GlobalBlockTransfer";
import MessageType from "../src/enum/MessageType";
describe("GlobalBlockTransfer class", () => {
test("should initialize with default parameters when no bytes are provided", () => {
const blockTransfer = new GlobalBlockTransfer();
expect(blockTransfer.blockControl).toBe(0);
expect(blockTransfer.lastBlock).toBe(false);
expect(blockTransfer.streaming).toBe(false);
expect(blockTransfer.window).toBe(0);
expect(blockTransfer.blockNumber).toBe(0);
expect(blockTransfer.quantity).toBe(0);
expect(blockTransfer.index).toBe(0);
expect(blockTransfer.blockNumberAck).toBe(0);
expect(blockTransfer.blockData).toEqual([]);
expect(blockTransfer.value).toEqual([]);
expect(blockTransfer.dataLength).toBe(0);
});
test("should correctly parse bytes with insertFromBytes()", () => {
const bytes = [
MessageType.GLOBAL_BLOCK_TRANSFER,
0b11000101, // blockControl: lastBlock=true, streaming=true, window=5
0b10101110, // blockNumber: quantity=5, index=14
0x03, // blockNumberAck
0x04, // dataLength
0x11, 0x22, 0x33, 0x44, // blockData
];
const blockTransfer = new GlobalBlockTransfer(bytes);
expect(blockTransfer.blockControl).toBe(0b11000101);
expect(blockTransfer.lastBlock).toBe(true);
expect(blockTransfer.streaming).toBe(true);
expect(blockTransfer.window).toBe(5);
expect(blockTransfer.blockNumber).toBe(0b10101110);
expect(blockTransfer.quantity).toBe(5);
expect(blockTransfer.index).toBe(14);
expect(blockTransfer.blockNumberAck).toBe(0x03);
expect(blockTransfer.dataLength).toBe(4);
expect(blockTransfer.blockData).toEqual([0x11, 0x22, 0x33, 0x44]);
});
// test("should correctly construct parameters without bytes", () => {
// const blockTransfer = new GlobalBlockTransfer(
// null,
// true, // lastBlock
// true, // streaming
// 5, // window
// 3, // quantity
// 10, // index
// 0x03, // blockNumberAck
// [0xAA, 0xBB, 0xCC] // blockData
// );
// blockTransfer.constructFromParameters();
// expect(blockTransfer.blockControl).toBe(0b11000101);
// expect(blockTransfer.blockNumber).toBe(0b01110110);
// });
// test("should return the correct byte array with getBytes()", () => {
// const blockTransfer = new GlobalBlockTransfer(
// null,
// true, // lastBlock
// true, // streaming
// 5, // window
// 3, // quantity
// 10, // index
// 0x03, // blockNumberAck
// [0xAA, 0xBB, 0xCC] // blockData
// );
// const result = blockTransfer.getBytes();
// expect(result).toEqual([
// MessageType.GLOBAL_BLOCK_TRANSFER,
// 0b11000101, // blockControl
// 0b01110110, // blockNumber
// 0x03, // blockNumberAck
// 0x03, // dataLength
// 0xAA, 0xBB, 0xCC, // blockData
// ]);
// });
test("should return the correct hexadecimal string with getHexString()", () => {
const bytes = [
MessageType.GLOBAL_BLOCK_TRANSFER,
0b11000101, // blockControl
0b10101110, // blockNumber
0x03, // blockNumberAck
0x04, // dataLength
0x11, 0x22, 0x33, 0x44, // blockData
];
const blockTransfer = new GlobalBlockTransfer(bytes);
const hexString = blockTransfer.getHexString();
const expectedHex = bytes
.map(byte => byte.toString(16).toUpperCase().padStart(2, '0'))
.join(' ');
expect(hexString).toBe(expectedHex);
});
test("should convert a number to binary string with _toBinary()", () => {
const blockTransfer = new GlobalBlockTransfer();
const binary = blockTransfer._toBinary(5, 6);
expect(binary).toBe("000101");
});
});