UNPKG

dlms-protocol

Version:

DLMS Protocol parser for JavaScript

112 lines (96 loc) 4.21 kB
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"); }); });