diff options
author | Matt Mastracci <matthew@mastracci.com> | 2023-06-13 20:03:10 -0600 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-06-14 02:03:10 +0000 |
commit | ec8e9d4f5bd2c8eed5f086356c1c6dd7c8b40b7f (patch) | |
tree | 2ffda9204901bfb757e8ce6359d1fc6aa2f9964b /core/runtime/encode_decode_test.js | |
parent | fd9d6baea311d9b227b130749647a86838ba2ccc (diff) |
chore(core): Refactor runtime and split out tests (#19491)
This is a quick first refactoring to split the tests out of runtime and
move runtime-related code to a top-level runtime module.
There will be a followup to refactor imports a bit, but this is the
major change that will most likely conflict with other work and I want
to merge it early.
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(); |