diff options
Diffstat (limited to 'core/runtime/encode_decode_test.js')
-rw-r--r-- | core/runtime/encode_decode_test.js | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/core/runtime/encode_decode_test.js b/core/runtime/encode_decode_test.js new file mode 100644 index 000000000..0f4668765 --- /dev/null +++ b/core/runtime/encode_decode_test.js @@ -0,0 +1,69 @@ +// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. +"use strict"; +function assert(cond) { + if (!cond) { + throw Error("assert"); + } +} + +function assertArrayEquals(a1, a2) { + if (a1.length !== a2.length) throw Error("assert"); + + for (const index in a1) { + if (a1[index] !== a2[index]) { + throw Error("assert"); + } + } +} + +function main() { + // deno-fmt-ignore + const fixture1 = [ + 0xf0, 0x9d, 0x93, 0xbd, + 0xf0, 0x9d, 0x93, 0xae, + 0xf0, 0x9d, 0x94, 0x81, + 0xf0, 0x9d, 0x93, 0xbd + ]; + // deno-fmt-ignore + const fixture2 = [ + 72, 101, 108, 108, + 111, 32, 239, 191, + 189, 239, 191, 189, + 32, 87, 111, 114, + 108, 100 + ]; + + const empty = Deno.core.ops.op_encode(""); + if (empty.length !== 0) throw new Error("assert"); + + assertArrayEquals( + Array.from(Deno.core.ops.op_encode("𝓽𝓮𝔁𝓽")), + fixture1, + ); + assertArrayEquals( + Array.from(Deno.core.ops.op_encode("Hello \udc12\ud834 World")), + fixture2, + ); + + const emptyBuf = Deno.core.ops.op_decode(new Uint8Array(0)); + if (emptyBuf !== "") throw new Error("assert"); + + assert(Deno.core.ops.op_decode(new Uint8Array(fixture1)) === "𝓽𝓮𝔁𝓽"); + assert( + Deno.core.ops.op_decode(new Uint8Array(fixture2)) === + "Hello �� World", + ); + + // See https://github.com/denoland/deno/issues/6649 + let thrown = false; + try { + Deno.core.ops.op_decode(new Uint8Array(2 ** 29)); + } catch (e) { + thrown = true; + assert(e instanceof RangeError); + assert(e.message === "string too long"); + } + assert(thrown); +} + +main(); |