import assert from "assert"; import { loadTests } from "./utils.js"; import { decodeRlp, encodeRlp } from "../index.js"; import type { TestCaseRlp } from "./types.js"; describe("Test RLP Coder", function() { const tests = loadTests("rlp"); tests.forEach(({ name, encoded, decoded }) => { it(`encodes RLP: ${ name }`, function() { assert.equal(encodeRlp(decoded), encoded); }); }); tests.forEach(({ name, encoded, decoded }) => { it(`decodes RLP: ${ name }`, function() { assert.deepStrictEqual(decodeRlp(encoded), decoded); }); }); }); describe("Test bad RLP Data", function() { it("fails encoding data with invalid values", function() { assert.throws(() => { encodeRlp([ "0x1234", 1234 ]); }, (error: any) => { return (error.code === "INVALID_ARGUMENT" && error.argument === "object" && error.value === 1234) }); }); it("fails decoding data with trailing junk", function() { assert.throws(() => { // Zeros_1 decodeRlp("0x0042"); }, (error: any) => { return (error.code === "INVALID_ARGUMENT" && error.message.match(/^unexpected junk after rlp payload/) && error.argument === "data" && error.value === "0x0042") }); }); it ("fails decoding short data", function() { assert.throws(() => { decodeRlp("0x"); }, (error: any) => { return (error.code === "BUFFER_OVERRUN" && error.message.match(/^data too short/) && Buffer.from(error.buffer).toString("hex") === "" && error.offset === 1 && error.length === 0) }); }); it ("fails decoding short data in child", function() { assert.throws(() => { decodeRlp("0xc8880102030405060708"); }, (error: any) => { return (error.code === "BUFFER_OVERRUN" && error.message.match(/^child data too short/) && Buffer.from(error.buffer).toString("hex") === "c8880102030405060708" && error.offset === 0 && error.length === 8) }); }); it ("fails decoding short segment data", function() { assert.throws(() => { // [["0x4243"], ["0x3145"]] = 0xc8 c3 82 4243 c3 82 3145 // XXXX decodeRlp("0xc8c382c3823145"); }, (error: any) => { return (error.code === "BUFFER_OVERRUN" && error.message.match(/^data short segment too short/) && Buffer.from(error.buffer).toString("hex") === "c8c382c3823145" && error.offset === 9 && error.length === 7) }); }); }); /* utils.RLP.encode([["0x4243"], ["0x3145"]]) 0xc8 c3 82 4243 c3 82 3145 { "name": "arrayShort2", "decoded": [ "0x48656c6c6f20576f726c64", "0x48656c6c6f20576f726c64" ], "encoded": "0xd8 8b 48656c6c6f20576f726c64 8b 48656c6c6f20576f726c64" }, */