{"version":3,"sources":["buffer.js"],"names":["buffer","require","BinaryStream","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","unmock"],"mappings":"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","file":"buffer.js","sourcesContent":["'use strict';\n\nconst buffer = require('types/buffer');\nconst 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    jest.unmock('lib/binary-stream');\n\n    const buf = new BinaryStream();\n    buf.writeBuffer(Buffer.from([1, 2]));\n    buf.writeBuffer(Buffer.from([3, 4]));\n\n    const wstream = new BinaryStream();\n    const type = buffer(null);\n\n    type.encode(buf, wstream);\n\n    expect(wstream.slice()).toEqual(Buffer.from([1, 2, 3, 4, 3]));\n    expect(type.encode.bytes).toBe(buf.length + 1);\n  });\n});\n"]}