binary-data
Version:
Declarative binary data encoder / decoder.
1 lines • 6.46 kB
Source Map (JSON)
{"version":3,"sources":["encode.js"],"names":["reserved","require","encode","BinaryStream","describe","test","wstream","schema","a","jest","fn","b","object","bytes","res","expect","toHaveBeenCalledTimes","toEqual","toBe","bytes1","bytes2","itemType","decode","toBeCalled","expectedError","toThrow","encodeFn","c","toBeInstanceOf"],"mappings":"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","file":"encode.js","sourcesContent":["'use strict';\n\nconst reserved = require('types/reserved');\nconst { encode } = require('lib/encode');\nconst BinaryStream = require('lib/binary-stream');\n\ndescribe('encode', () => {\n test('should encode objects using schema', () => {\n const wstream = new BinaryStream();\n\n const schema = {\n a: {\n encode: jest.fn(),\n },\n b: {\n encode: jest.fn(),\n },\n };\n\n const object = {\n a: 100,\n b: 200,\n };\n\n schema.a.encode.bytes = 10;\n schema.b.encode.bytes = 33;\n\n const res = encode(object, wstream, schema);\n\n expect(schema.a.encode).toHaveBeenCalledTimes(1);\n expect(schema.b.encode).toHaveBeenCalledTimes(1);\n expect(encode.bytes).toEqual(schema.a.encode.bytes + schema.b.encode.bytes);\n expect(res).toBe(wstream);\n });\n\n test('should encode reserved fields', () => {\n const wstream = new BinaryStream();\n\n const bytes1 = 33;\n const bytes2 = 10;\n\n const itemType = {\n encode: jest.fn(),\n decode() {},\n };\n\n itemType.encode.bytes = bytes1;\n\n const schema = {\n a: {\n encode: jest.fn(),\n },\n b: reserved(itemType, 1),\n };\n\n const object = {\n a: 100,\n };\n\n schema.a.encode.bytes = bytes2;\n\n encode(object, wstream, schema);\n\n expect(schema.a.encode).toBeCalled();\n expect(itemType.encode).toBeCalled();\n expect(encode.bytes).toEqual(bytes1 + bytes2);\n });\n\n test('each field should be a valid type', () => {\n const wstream = new BinaryStream();\n\n const schema = {\n a: null,\n };\n\n const expectedError = 'Argument `schema` should be a plain object.';\n\n expect(() => encode({}, wstream, schema)).toThrow(expectedError);\n });\n\n test('schema should be a plain object', () => {\n const wstream = new BinaryStream();\n const expectedError = 'Argument `schema` should be a plain object.';\n\n expect(() => encode({}, wstream, 123)).toThrow(expectedError);\n expect(() => encode({}, wstream, '123')).toThrow(expectedError);\n expect(() => encode({}, wstream, /.+/)).toThrow(expectedError);\n });\n\n test('should encode nexted objects', () => {\n const wstream = new BinaryStream();\n\n const encodeFn = jest.fn();\n\n const schema = {\n a: {\n b: {\n encode: encodeFn,\n },\n },\n c: {\n encode: encodeFn,\n },\n };\n\n const object = {\n a: {\n b: 100,\n },\n c: 100,\n };\n\n encodeFn.bytes = 10;\n\n encode(object, wstream, schema);\n expect(encodeFn).toHaveBeenCalledTimes(2);\n expect(encode.bytes).toEqual(encodeFn.bytes * 2);\n });\n\n test('should create stream', () => {\n const schema = {\n a: {\n encode: jest.fn(),\n },\n };\n\n const object = {\n a: 100,\n };\n\n schema.a.encode.bytes = 10;\n\n const res = encode(object, schema);\n\n expect(schema.a.encode).toHaveBeenCalledTimes(1);\n expect(encode.bytes).toEqual(schema.a.encode.bytes);\n expect(res).toBeInstanceOf(BinaryStream);\n });\n});\n"]}