summaryrefslogtreecommitdiff
path: root/tests/unit_node/punycode_test.ts
diff options
context:
space:
mode:
authorNathan Whitaker <17734409+nathanwhit@users.noreply.github.com>2024-03-11 15:49:43 -0700
committerGitHub <noreply@github.com>2024-03-11 15:49:43 -0700
commita77b2987bc90879af30a39ba274df9061cc7fbae (patch)
treead7463374e66eb3aa61e41d96c512e67e717e349 /tests/unit_node/punycode_test.ts
parentd69aab62b0789dd54b8c09b54af022a38f060b5b (diff)
fix(ext/node): Match punycode module behavior to node (#22847)
Fixes #19214. We were using the `idna` crate to implement our polyfill for `punycode.toASCII` and `punycode.toUnicode`. The `idna` crate is correct, and adheres to the IDNA2003/2008 spec, but it turns out `node`'s implementations don't really follow any spec! Instead, node splits the domain by `'.'` and punycode encodes/decodes each part. This means that node's implementations will happily work on codepoints that are disallowed by the IDNA specs, causing the error in #19214. While fixing this, I went ahead and matched the node behavior on all of the punycode functions and enabled node's punycode test in our `node_compat` suite.
Diffstat (limited to 'tests/unit_node/punycode_test.ts')
-rw-r--r--tests/unit_node/punycode_test.ts16
1 files changed, 16 insertions, 0 deletions
diff --git a/tests/unit_node/punycode_test.ts b/tests/unit_node/punycode_test.ts
new file mode 100644
index 000000000..f5f8c4f97
--- /dev/null
+++ b/tests/unit_node/punycode_test.ts
@@ -0,0 +1,16 @@
+// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
+
+import * as punycode from "node:punycode";
+import { assertEquals } from "@std/assert/mod.ts";
+
+Deno.test("regression #19214", () => {
+ const input = "个��.hk";
+
+ assertEquals(punycode.toASCII(input), "xn--ciq6844ba.hk");
+
+ assertEquals(punycode.toUnicode("xn--ciq6844ba.hk"), input);
+});
+
+Deno.test("Decode empty input", () => {
+ assertEquals(punycode.decode(""), "");
+});