UNPKG

@foxglove/rosmsg-serialization

Version:

ROS 1 message serialization, for reading and writing bags and network messages

110 lines 5.29 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const tslib_1 = require("tslib"); const rosmsg_1 = require("@foxglove/rosmsg"); const prettier = tslib_1.__importStar(require("prettier")); const LazyMessageReader_1 = require("./LazyMessageReader"); const messageReaderTests_1 = tslib_1.__importDefault(require("./fixtures/messageReaderTests")); describe("LazyReader", () => { it.each(messageReaderTests_1.default)("should deserialize %s", async (msgDef, arr, expected) => { const buffer = Uint8Array.from(arr); const reader = new LazyMessageReader_1.LazyMessageReader((0, rosmsg_1.parse)(msgDef)); // allows for easier review of the generated parser source const source = reader.source(); expect(await prettier.format(source, { parser: "babel" })).toMatchSnapshot(msgDef); // read aligned array { const read = reader.readMessage(buffer); // check that our reader expected size matches the buffer size expect(reader.size(buffer)).toEqual(buffer.length); // check that our message matches the full object const obj = read.toObject(); expect(read.toObject()).toEqual(expected); // legacy api // eslint-disable-next-line @typescript-eslint/no-deprecated expect(read.toJSON()).toEqual(expected); // manually read each field to ensure lazy field access works for (const key in obj) { if (typeof expected[key] === "object") { // eslint-disable-next-line jest/no-conditional-expect expect(read[key]).toMatchObject(expected[key]); // eslint-disable-line @typescript-eslint/no-explicit-any } else { // eslint-disable-next-line jest/no-conditional-expect expect(read[key]).toEqual(expected[key]); } } } // read offset array { const offset = 7; const fullArr = new Uint8Array(buffer.length + offset); fullArr.set(buffer, offset); const read = reader.readMessage(new Uint8Array(fullArr.buffer, fullArr.byteOffset + offset, fullArr.byteLength - offset)); expect(reader.size(buffer)).toEqual(buffer.length); const obj = read.toObject(); expect(obj).toEqual(expected); // legacy api // eslint-disable-next-line @typescript-eslint/no-deprecated expect(read.toJSON()).toEqual(expected); // manually read each field to ensure lazy field access works for (const key in obj) { if (typeof expected[key] === "object") { // eslint-disable-next-line jest/no-conditional-expect expect(read[key]).toMatchObject(expected[key]); // eslint-disable-line @typescript-eslint/no-explicit-any } else { // eslint-disable-next-line jest/no-conditional-expect expect(read[key]).toEqual(expected[key]); } } } }); it("should support toObject for individual array fields", () => { const msgDef = `CustomType[3] custom ============ MSG: custom_type/CustomType uint8 first`; const arr = [0x02, 0x03, 0x04]; const buffer = Uint8Array.from(arr); const reader = new LazyMessageReader_1.LazyMessageReader((0, rosmsg_1.parse)(msgDef)); const read = reader.readMessage(buffer); expect(read.custom[0]?.toObject()).toEqual({ first: 2 }); expect(read.custom[1]?.toObject()).toEqual({ first: 3 }); expect(read.custom[2]?.toObject()).toEqual({ first: 4 }); // legacy api expect(read.custom[0]?.toJSON()).toEqual({ first: 2 }); expect(read.custom[1]?.toJSON()).toEqual({ first: 3 }); expect(read.custom[2]?.toJSON()).toEqual({ first: 4 }); }); it("should support toObject for individual fields", () => { const msgDef = `CustomType custom1 CustomType custom2 ============ MSG: custom_type/CustomType uint8 first`; const arr = [0x03, 0x07]; const buffer = Uint8Array.from(arr); const reader = new LazyMessageReader_1.LazyMessageReader((0, rosmsg_1.parse)(msgDef)); const read = reader.readMessage(buffer); expect(read.custom1.toObject()).toEqual({ first: 3 }); expect(read.custom2.toObject()).toEqual({ first: 7 }); // legacy api expect(read.custom1.toJSON()).toEqual({ first: 3 }); expect(read.custom2.toJSON()).toEqual({ first: 7 }); }); it("should support field names ending in _offset", () => { const msgDef = `CustomType custom ============ MSG: custom_type/CustomType uint8 first uint8 first_offset`; const arr = [0x03, 0x07]; const buffer = Uint8Array.from(arr); const reader = new LazyMessageReader_1.LazyMessageReader((0, rosmsg_1.parse)(msgDef)); const read = reader.readMessage(buffer); expect(read.custom.first).toEqual(3); expect(read.custom.first_offset).toEqual(7); }); }); //# sourceMappingURL=LazyMessageReader.test.js.map