1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-11-26 16:09:27 -05:00
denoland-deno/tests/unit_node/punycode_test.ts
Nathan Whitaker a77b2987bc
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.
2024-03-11 15:49:43 -07:00

16 lines
458 B
TypeScript
Raw Blame History

// 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 = "个<><E4B8AA>.hk";
assertEquals(punycode.toASCII(input), "xn--ciq6844ba.hk");
assertEquals(punycode.toUnicode("xn--ciq6844ba.hk"), input);
});
Deno.test("Decode empty input", () => {
assertEquals(punycode.decode(""), "");
});