UNPKG

binary-data

Version:

Declarative binary data encoder / decoder.

1 lines 5.24 kB
{"version":3,"sources":["encode.js"],"names":["reserved","require","encode","describe","test","wstream","schema","a","jest","fn","b","object","bytes","expect","toHaveBeenCalledTimes","toEqual","bytes1","bytes2","itemType","decode","toBeCalled","expectedError","toThrow","encodeFn","c"],"mappings":"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","file":"encode.js","sourcesContent":["'use strict';\n\nconst reserved = require('types/reserved');\nconst { encode } = require('lib/encode');\n\ndescribe('encode', () => {\n test('should encode objects using schema', () => {\n const wstream = {};\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 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 });\n\n test('should encode reserved fields', () => {\n const wstream = {};\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 = {};\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 = {};\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 = {};\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"]}