diff --git a/test/decodeArrayStream.test.ts b/test/decodeArrayStream.test.ts new file mode 100644 index 00000000..1c904c5e --- /dev/null +++ b/test/decodeArrayStream.test.ts @@ -0,0 +1,57 @@ +import assert from "assert"; +import { encode, decodeAsync, decodeArrayStream } from "../src"; + +describe("decodeArrayStream", () => { + const generateSampleObject = () => { + return { + id: Math.random(), + name: "test", + }; + }; + + const createStream = async function*(object: any) { + for (const byte of encode(object)) { + yield [byte]; + } + }; + + it("decodes numbers array", async () => { + const object = [1, 2, 3, 4, 5]; + + const result = []; + + for await (let item of decodeArrayStream(createStream(object))) { + result.push(item); + } + + assert.deepStrictEqual(object, result); + }); + + it("decodes objects array", async () => { + const objectsArrays: Array = []; + + for (let i = 0; i < 10; i++) { + objectsArrays.push(generateSampleObject()); + } + + const result = []; + + for await (let item of decodeArrayStream(createStream(objectsArrays))) { + result.push(item); + } + + assert.deepStrictEqual(objectsArrays, result); + }); + + it("fails for non array input", async () => { + const object = "demo"; + + await assert.rejects(async () => { + const result = []; + + for await (let item of decodeArrayStream(createStream(object))) { + result.push(item); + } + }, /.*Unrecognized array type byte:.*/i); + }); +});