summaryrefslogtreecommitdiff
path: root/cli/tests/unit_node/string_decoder_test.ts
diff options
context:
space:
mode:
authorAndrew Nester <andrew.nester.dev@gmail.com>2023-03-29 11:32:29 +0200
committerGitHub <noreply@github.com>2023-03-29 18:32:29 +0900
commit04399d138e65b9e3f83dda7116c9ae6488aa9aee (patch)
tree15fa39046205296b229eb1dee7c768a7106075d9 /cli/tests/unit_node/string_decoder_test.ts
parentb5d3eb5c23db8946c3f563b1a1fb21319a1c0a77 (diff)
test(ext/node): add string_decoder_test.ts from std/node (#18473)
Diffstat (limited to 'cli/tests/unit_node/string_decoder_test.ts')
-rw-r--r--cli/tests/unit_node/string_decoder_test.ts167
1 files changed, 167 insertions, 0 deletions
diff --git a/cli/tests/unit_node/string_decoder_test.ts b/cli/tests/unit_node/string_decoder_test.ts
new file mode 100644
index 000000000..93ff69dc3
--- /dev/null
+++ b/cli/tests/unit_node/string_decoder_test.ts
@@ -0,0 +1,167 @@
+// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.
+import { assertEquals } from "../../../test_util/std/testing/asserts.ts";
+import { Buffer } from "node:buffer";
+import { StringDecoder } from "node:string_decoder";
+
+Deno.test({
+ name: "String decoder is encoding utf8 correctly",
+ fn() {
+ let decoder;
+
+ decoder = new StringDecoder("utf8");
+ assertEquals(decoder.write(Buffer.from("E1", "hex")), "");
+ assertEquals(decoder.end(), "\ufffd");
+
+ decoder = new StringDecoder("utf8");
+ assertEquals(decoder.write(Buffer.from("E18B", "hex")), "");
+ assertEquals(decoder.end(), "\ufffd");
+
+ decoder = new StringDecoder("utf8");
+ assertEquals(decoder.write(Buffer.from("\ufffd")), "\ufffd");
+ assertEquals(decoder.end(), "");
+
+ decoder = new StringDecoder("utf8");
+ assertEquals(
+ decoder.write(Buffer.from("\ufffd\ufffd\ufffd")),
+ "\ufffd\ufffd\ufffd",
+ );
+ assertEquals(decoder.end(), "");
+
+ decoder = new StringDecoder("utf8");
+ assertEquals(decoder.write(Buffer.from("EFBFBDE2", "hex")), "\ufffd");
+ assertEquals(decoder.end(), "\ufffd");
+
+ decoder = new StringDecoder("utf8");
+ assertEquals(decoder.write(Buffer.from("F1", "hex")), "");
+ assertEquals(decoder.write(Buffer.from("41F2", "hex")), "\ufffdA");
+ assertEquals(decoder.end(), "\ufffd");
+ },
+});
+
+Deno.test({
+ name: "String decoder is encoding base64 correctly",
+ fn() {
+ let decoder;
+
+ decoder = new StringDecoder("base64");
+ assertEquals(decoder.write(Buffer.from("E1", "hex")), "");
+ assertEquals(decoder.end(), "4Q==");
+
+ decoder = new StringDecoder("base64");
+ assertEquals(decoder.write(Buffer.from("E18B", "hex")), "");
+ assertEquals(decoder.end(), "4Ys=");
+
+ decoder = new StringDecoder("base64");
+ assertEquals(decoder.write(Buffer.from("\ufffd")), "77+9");
+ assertEquals(decoder.end(), "");
+
+ decoder = new StringDecoder("base64");
+ assertEquals(
+ decoder.write(Buffer.from("\ufffd\ufffd\ufffd")),
+ "77+977+977+9",
+ );
+ assertEquals(decoder.end(), "");
+
+ decoder = new StringDecoder("base64");
+ assertEquals(decoder.write(Buffer.from("EFBFBDE2", "hex")), "77+9");
+ assertEquals(decoder.end(), "4g==");
+
+ decoder = new StringDecoder("base64");
+ assertEquals(decoder.write(Buffer.from("F1", "hex")), "");
+ assertEquals(decoder.write(Buffer.from("41F2", "hex")), "8UHy");
+ assertEquals(decoder.end(), "");
+ },
+});
+
+Deno.test({
+ name: "String decoder is encoding hex correctly",
+ fn() {
+ let decoder;
+
+ decoder = new StringDecoder("hex");
+ assertEquals(decoder.write(Buffer.from("E1", "hex")), "e1");
+ assertEquals(decoder.end(), "");
+
+ decoder = new StringDecoder("hex");
+ assertEquals(decoder.write(Buffer.from("E18B", "hex")), "e18b");
+ assertEquals(decoder.end(), "");
+
+ decoder = new StringDecoder("hex");
+ assertEquals(decoder.write(Buffer.from("\ufffd")), "efbfbd");
+ assertEquals(decoder.end(), "");
+
+ decoder = new StringDecoder("hex");
+ assertEquals(
+ decoder.write(Buffer.from("\ufffd\ufffd\ufffd")),
+ "efbfbdefbfbdefbfbd",
+ );
+ assertEquals(decoder.end(), "");
+
+ decoder = new StringDecoder("hex");
+ assertEquals(decoder.write(Buffer.from("EFBFBDE2", "hex")), "efbfbde2");
+ assertEquals(decoder.end(), "");
+
+ decoder = new StringDecoder("hex");
+ assertEquals(decoder.write(Buffer.from("F1", "hex")), "f1");
+ assertEquals(decoder.write(Buffer.from("41F2", "hex")), "41f2");
+ assertEquals(decoder.end(), "");
+ },
+});
+
+Deno.test({
+ name:
+ "String decoder with utf8 would handle incomplete character correctly when append",
+ fn() {
+ let decoder;
+ const specialCharactersText = "不完全な文字のテスト";
+ const encodedBuffer = Buffer.from(specialCharactersText);
+
+ decoder = new StringDecoder("utf8");
+ let str = "";
+ str += decoder.write(encodedBuffer.slice(0, 4));
+ assertEquals(str, "不");
+ str += decoder.write(encodedBuffer.slice(4));
+ assertEquals(str, "不完全な文字のテスト");
+
+ decoder = new StringDecoder("utf8");
+ str = "";
+ str += decoder.write(encodedBuffer.slice(0, 4));
+ str += decoder.write(encodedBuffer.slice(5));
+ assertEquals(str, "不�全な文字のテスト");
+ },
+});
+
+Deno.test({
+ name: "String decoder would have default encoding option as utf8",
+ fn() {
+ let decoder;
+
+ decoder = new StringDecoder();
+ assertEquals(decoder.write(Buffer.from("E1", "hex")), "");
+ assertEquals(decoder.end(), "\ufffd");
+
+ decoder = new StringDecoder();
+ assertEquals(decoder.write(Buffer.from("E18B", "hex")), "");
+ assertEquals(decoder.end(), "\ufffd");
+
+ decoder = new StringDecoder();
+ assertEquals(decoder.write(Buffer.from("\ufffd")), "\ufffd");
+ assertEquals(decoder.end(), "");
+
+ decoder = new StringDecoder();
+ assertEquals(
+ decoder.write(Buffer.from("\ufffd\ufffd\ufffd")),
+ "\ufffd\ufffd\ufffd",
+ );
+ assertEquals(decoder.end(), "");
+
+ decoder = new StringDecoder();
+ assertEquals(decoder.write(Buffer.from("EFBFBDE2", "hex")), "\ufffd");
+ assertEquals(decoder.end(), "\ufffd");
+
+ decoder = new StringDecoder();
+ assertEquals(decoder.write(Buffer.from("F1", "hex")), "");
+ assertEquals(decoder.write(Buffer.from("41F2", "hex")), "\ufffdA");
+ assertEquals(decoder.end(), "\ufffd");
+ },
+});