UNPKG

binary-data

Version:

Declarative binary data encoder / decoder.

1 lines 13.5 kB
{"version":3,"sources":["buffer.js"],"names":["buffer","require","describe","test","writeBuffer","jest","fn","wstream","length","buf","Buffer","allocUnsafe","type","encode","expect","toHaveBeenCalledTimes","toBeCalledWith","bytes","toBe","toThrow","readBuffer","mockImplementation","rstream","decode","encodingLength","alloc","lengthBytes","lengthType","typeLength","callback","from","indexOf","expected","slice","size","byte","consume","toEqual","writeUInt8"],"mappings":"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","file":"buffer.js","sourcesContent":["'use strict';\n\nconst buffer = require('types/buffer');\n// const BinaryStream = require('lib/binary-stream');\n\ndescribe('buffer', () => {\n describe('argument `length` is number', () => {\n test('encode', () => {\n const writeBuffer = jest.fn();\n const wstream = {\n writeBuffer,\n };\n\n const length = 2;\n const buf = Buffer.allocUnsafe(length);\n\n const type = buffer(length);\n\n type.encode(buf, wstream);\n\n expect(writeBuffer).toHaveBeenCalledTimes(1);\n expect(writeBuffer).toBeCalledWith(buf);\n expect(type.encode.bytes).toBe(length);\n });\n\n test('should not encode large buffer', () => {\n const length = 2;\n\n const wstream = {};\n\n const buf = Buffer.allocUnsafe(length + 1);\n const type = buffer(length);\n\n expect(() => type.encode(buf, wstream)).toThrow(\n `Buffer required length ${length} instead of ${buf.length}`\n );\n });\n\n test('decode', () => {\n const length = 2;\n const buf = Buffer.allocUnsafe(length);\n\n const readBuffer = jest.fn().mockImplementation(() => buf);\n const rstream = {\n readBuffer,\n };\n\n const type = buffer(length);\n\n expect(type.decode(rstream)).toBe(buf);\n expect(readBuffer).toHaveBeenCalledTimes(1);\n expect(readBuffer).toBeCalledWith(length);\n expect(type.decode.bytes).toBe(length);\n });\n\n test('encodingLength', () => {\n const length = 2;\n\n const type = buffer(length);\n expect(type.encodingLength(Buffer.alloc(0))).toBe(length);\n });\n });\n\n describe('argument `length` is type', () => {\n test('encode', () => {\n const writeBuffer = jest.fn();\n const wstream = {\n writeBuffer,\n };\n\n const length = 2;\n const lengthBytes = 3;\n const buf = Buffer.allocUnsafe(length);\n\n const lengthType = {\n decode() {},\n encode: jest.fn().mockImplementation(() => {\n lengthType.encode.bytes = lengthBytes;\n }),\n };\n\n const type = buffer(lengthType);\n type.encode(buf, wstream);\n\n expect(lengthType.encode).toHaveBeenCalledTimes(1);\n expect(lengthType.encode).toBeCalledWith(length, wstream);\n expect(writeBuffer).toHaveBeenCalledTimes(1);\n expect(writeBuffer).toBeCalledWith(buf);\n expect(type.encode.bytes).toBe(length + lengthBytes);\n });\n\n test('decode', () => {\n const length = 2;\n const buf = Buffer.allocUnsafe(length);\n\n const readBuffer = jest.fn().mockImplementation(() => buf);\n const lengthBytes = 5;\n\n const rstream = {\n readBuffer,\n };\n\n const lengthType = {\n decode: () => length,\n encode() {},\n };\n\n lengthType.decode.bytes = lengthBytes;\n\n const type = buffer(lengthType);\n\n expect(type.decode(rstream)).toBe(buf);\n expect(readBuffer).toHaveBeenCalledTimes(1);\n expect(readBuffer).toBeCalledWith(length);\n expect(type.decode.bytes).toBe(buf.length + lengthBytes);\n });\n\n test('encodingLength', () => {\n const length = 5;\n const typeLength = 2;\n const buf = Buffer.allocUnsafe(length);\n\n const lengthType = {\n encode() {},\n decode() {},\n encodingLength() {\n return typeLength;\n },\n };\n\n const type = buffer(lengthType);\n\n expect(type.encodingLength(buf)).toBe(typeLength + length);\n });\n });\n\n describe('argument `length` is function', () => {\n test('decode', () => {\n const length = 2;\n const buf = Buffer.allocUnsafe(length);\n\n const readBuffer = jest.fn().mockImplementation(() => buf);\n\n const rstream = {\n readBuffer,\n };\n\n const callback = jest.fn().mockImplementation(() => length);\n const type = buffer(callback);\n\n expect(type.decode(rstream)).toBe(buf);\n expect(readBuffer).toHaveBeenCalledTimes(1);\n expect(readBuffer).toBeCalledWith(length);\n expect(callback).toHaveBeenCalledTimes(1);\n expect(type.decode.bytes).toBe(length);\n });\n\n test('encode', () => {\n const writeBuffer = jest.fn();\n\n const wstream = {\n writeBuffer,\n };\n\n const length = 2;\n const buf = Buffer.allocUnsafe(length);\n\n const callback = jest.fn().mockImplementation(() => length);\n const type = buffer(callback);\n\n type.encode(buf, wstream);\n\n expect(writeBuffer).toHaveBeenCalledTimes(1);\n expect(writeBuffer).toBeCalledWith(buf);\n expect(callback).toHaveBeenCalledTimes(1);\n expect(type.encode.bytes).toBe(length);\n });\n\n test('encodingLength', () => {\n const length = 5;\n\n const type = buffer(() => length * 2);\n expect(type.encodingLength(Buffer.alloc(length))).toBe(length);\n });\n });\n\n describe('argument `length` is null', () => {\n test('decode', () => {\n const buf = Buffer.from([1, 2, 3, 4, 5, 0, 5, 6, 7, 8]);\n const length = buf.indexOf(0);\n const expected = buf.slice(0, length);\n\n const rstream = {\n readBuffer: jest.fn().mockImplementation(size => buf.slice(0, size)),\n indexOf: jest.fn().mockImplementation(byte => buf.indexOf(byte)),\n consume: jest.fn(),\n };\n\n const type = buffer(null);\n\n expect(type.decode(rstream)).toEqual(expected);\n expect(type.decode.bytes).toEqual(length + 1);\n });\n\n test('encode', () => {\n const buf = Buffer.from([1, 2, 3, 4, 5]);\n const writeBuffer = jest.fn();\n const writeUInt8 = jest.fn();\n const wstream = {\n writeBuffer,\n writeUInt8,\n };\n\n const type = buffer(null);\n\n type.encode(buf, wstream);\n\n expect(writeBuffer).toHaveBeenCalledTimes(1);\n expect(writeBuffer).toBeCalledWith(buf);\n expect(writeUInt8).toHaveBeenCalledTimes(1);\n expect(writeUInt8).toBeCalledWith(0);\n expect(type.encode.bytes).toBe(buf.length + 1);\n });\n\n test('encodingLength', () => {\n const buf = Buffer.from([1, 2, 3, 4, 5]);\n const type = buffer(null);\n\n expect(type.encodingLength(buf)).toBe(buf.length + 1);\n });\n });\n\n // test('should be able to encode BinaryStream', () => {\n // const buf = new BinaryStream();\n // const writeBuffer = jest.fn();\n // const writeUInt8 = jest.fn();\n // const wstream = {\n // writeBuffer,\n // writeUInt8,\n // };\n\n // const type = buffer(null);\n\n // type.encode(buf, wstream);\n\n // expect(writeBuffer).toHaveBeenCalledTimes(1);\n // expect(writeBuffer).toBeCalledWith(buf);\n // expect(writeUInt8).toHaveBeenCalledTimes(1);\n // expect(writeUInt8).toBeCalledWith(0);\n // expect(type.encode.bytes).toBe(buf.length + 1);\n // });\n});\n"]}