summaryrefslogtreecommitdiff
path: root/cli/tests/node_compat/test/parallel/test-whatwg-encoding-custom-textdecoder-fatal.js
diff options
context:
space:
mode:
authorYoshiya Hinosawa <stibium121@gmail.com>2023-02-21 00:35:04 +0900
committerGitHub <noreply@github.com>2023-02-20 16:35:04 +0100
commit6915a9b7a701dde0e1078867961c9a91811c1850 (patch)
treee6822f2b8400c7c7941d3cb9ace59842389b5bc9 /cli/tests/node_compat/test/parallel/test-whatwg-encoding-custom-textdecoder-fatal.js
parenta1cd2a5915c13f6a9b8eafa3807e143a02616bc1 (diff)
test(ext/node): more node compat tests (#17827)
This PR adds the remaining ~650 Node.js compat test cases from std/node. Among these 650 cases, about 130 cases are now failing. These failing cases are prefixed with `TODO:` in `tests/node_compat/config.json`. These will be addressed in later PRs.
Diffstat (limited to 'cli/tests/node_compat/test/parallel/test-whatwg-encoding-custom-textdecoder-fatal.js')
-rw-r--r--cli/tests/node_compat/test/parallel/test-whatwg-encoding-custom-textdecoder-fatal.js91
1 files changed, 91 insertions, 0 deletions
diff --git a/cli/tests/node_compat/test/parallel/test-whatwg-encoding-custom-textdecoder-fatal.js b/cli/tests/node_compat/test/parallel/test-whatwg-encoding-custom-textdecoder-fatal.js
new file mode 100644
index 000000000..3a8aac400
--- /dev/null
+++ b/cli/tests/node_compat/test/parallel/test-whatwg-encoding-custom-textdecoder-fatal.js
@@ -0,0 +1,91 @@
+// deno-fmt-ignore-file
+// deno-lint-ignore-file
+
+// Copyright Joyent and Node contributors. All rights reserved. MIT license.
+// Taken from Node 18.12.1
+// This file is automatically generated by "node/_tools/setup.ts". Do not modify this file manually
+
+'use strict';
+
+// From: https://github.com/w3c/web-platform-tests/blob/39a67e2fff/encoding/textdecoder-fatal.html
+// With the twist that we specifically test for Node.js error codes
+
+const common = require('../common');
+
+if (!common.hasIntl)
+ common.skip('missing Intl');
+
+const assert = require('assert');
+
+const bad = [
+ { encoding: 'utf-8', input: [0xFF], name: 'invalid code' },
+ { encoding: 'utf-8', input: [0xC0], name: 'ends early' },
+ { encoding: 'utf-8', input: [0xE0], name: 'ends early 2' },
+ { encoding: 'utf-8', input: [0xC0, 0x00], name: 'invalid trail' },
+ { encoding: 'utf-8', input: [0xC0, 0xC0], name: 'invalid trail 2' },
+ { encoding: 'utf-8', input: [0xE0, 0x00], name: 'invalid trail 3' },
+ { encoding: 'utf-8', input: [0xE0, 0xC0], name: 'invalid trail 4' },
+ { encoding: 'utf-8', input: [0xE0, 0x80, 0x00], name: 'invalid trail 5' },
+ { encoding: 'utf-8', input: [0xE0, 0x80, 0xC0], name: 'invalid trail 6' },
+ { encoding: 'utf-8', input: [0xFC, 0x80, 0x80, 0x80, 0x80, 0x80],
+ name: '> 0x10FFFF' },
+ { encoding: 'utf-8', input: [0xFE, 0x80, 0x80, 0x80, 0x80, 0x80],
+ name: 'obsolete lead byte' },
+ // Overlong encodings
+ { encoding: 'utf-8', input: [0xC0, 0x80], name: 'overlong U+0000 - 2 bytes' },
+ { encoding: 'utf-8', input: [0xE0, 0x80, 0x80],
+ name: 'overlong U+0000 - 3 bytes' },
+ { encoding: 'utf-8', input: [0xF0, 0x80, 0x80, 0x80],
+ name: 'overlong U+0000 - 4 bytes' },
+ { encoding: 'utf-8', input: [0xF8, 0x80, 0x80, 0x80, 0x80],
+ name: 'overlong U+0000 - 5 bytes' },
+ { encoding: 'utf-8', input: [0xFC, 0x80, 0x80, 0x80, 0x80, 0x80],
+ name: 'overlong U+0000 - 6 bytes' },
+ { encoding: 'utf-8', input: [0xC1, 0xBF], name: 'overlong U+007F - 2 bytes' },
+ { encoding: 'utf-8', input: [0xE0, 0x81, 0xBF],
+ name: 'overlong U+007F - 3 bytes' },
+ { encoding: 'utf-8', input: [0xF0, 0x80, 0x81, 0xBF],
+ name: 'overlong U+007F - 4 bytes' },
+ { encoding: 'utf-8', input: [0xF8, 0x80, 0x80, 0x81, 0xBF],
+ name: 'overlong U+007F - 5 bytes' },
+ { encoding: 'utf-8', input: [0xFC, 0x80, 0x80, 0x80, 0x81, 0xBF],
+ name: 'overlong U+007F - 6 bytes' },
+ { encoding: 'utf-8', input: [0xE0, 0x9F, 0xBF],
+ name: 'overlong U+07FF - 3 bytes' },
+ { encoding: 'utf-8', input: [0xF0, 0x80, 0x9F, 0xBF],
+ name: 'overlong U+07FF - 4 bytes' },
+ { encoding: 'utf-8', input: [0xF8, 0x80, 0x80, 0x9F, 0xBF],
+ name: 'overlong U+07FF - 5 bytes' },
+ { encoding: 'utf-8', input: [0xFC, 0x80, 0x80, 0x80, 0x9F, 0xBF],
+ name: 'overlong U+07FF - 6 bytes' },
+ { encoding: 'utf-8', input: [0xF0, 0x8F, 0xBF, 0xBF],
+ name: 'overlong U+FFFF - 4 bytes' },
+ { encoding: 'utf-8', input: [0xF8, 0x80, 0x8F, 0xBF, 0xBF],
+ name: 'overlong U+FFFF - 5 bytes' },
+ { encoding: 'utf-8', input: [0xFC, 0x80, 0x80, 0x8F, 0xBF, 0xBF],
+ name: 'overlong U+FFFF - 6 bytes' },
+ { encoding: 'utf-8', input: [0xF8, 0x84, 0x8F, 0xBF, 0xBF],
+ name: 'overlong U+10FFFF - 5 bytes' },
+ { encoding: 'utf-8', input: [0xFC, 0x80, 0x84, 0x8F, 0xBF, 0xBF],
+ name: 'overlong U+10FFFF - 6 bytes' },
+ // UTF-16 surrogates encoded as code points in UTF-8
+ { encoding: 'utf-8', input: [0xED, 0xA0, 0x80], name: 'lead surrogate' },
+ { encoding: 'utf-8', input: [0xED, 0xB0, 0x80], name: 'trail surrogate' },
+ { encoding: 'utf-8', input: [0xED, 0xA0, 0x80, 0xED, 0xB0, 0x80],
+ name: 'surrogate pair' },
+ { encoding: 'utf-16le', input: [0x00], name: 'truncated code unit' },
+ // Mismatched UTF-16 surrogates are exercised in utf16-surrogates.html
+ // FIXME: Add legacy encoding cases
+];
+
+bad.forEach((t) => {
+ assert.throws(
+ () => {
+ new TextDecoder(t.encoding, { fatal: true })
+ .decode(new Uint8Array(t.input));
+ }, {
+ code: 'ERR_ENCODING_INVALID_ENCODED_DATA',
+ name: 'TypeError'
+ }
+ );
+});