[ "This contains assorted IDNA tests that IdnaTestV2 might not cover.", "Feel free to deduplicate with a clear commit message.", "", "If the test only applies to the URL Standard's 'domain to ASCII', ", "and not to TR46's ToASCII, then tag it with `urlStandardOnly`", { "comment": "Label with hyphens in 3rd and 4th position", "input": "aa--", "output": "aa--" }, { "input": "a†--", "output": "xn--a---kp0a" }, { "input": "ab--c", "output": "ab--c" }, { "comment": "Label with leading hyphen", "input": "-x", "output": "-x" }, { "input": "-†", "output": "xn----xhn" }, { "input": "-x.xn--zca", "output": "-x.xn--zca" }, { "input": "-x.ß", "output": "-x.xn--zca" }, { "comment": "Label with trailing hyphen", "input": "x-.xn--zca", "output": "x-.xn--zca" }, { "input": "x-.ß", "output": "x-.xn--zca" }, { "comment": "Empty labels", "input": "x..xn--zca", "output": "x..xn--zca" }, { "input": "x..ß", "output": "x..xn--zca" }, { "comment": "Invalid Punycode", "input": "xn--a", "output": null }, { "input": "xn--a.xn--zca", "output": null }, { "input": "xn--a.ß", "output": null }, { "input": "xn--ls8h=", "output": null }, { "comment": "Invalid Punycode (contains non-ASCII character)", "input": "xn--tešla", "output": null }, { "comment": "Valid Punycode", "input": "xn--zca.xn--zca", "output": "xn--zca.xn--zca" }, { "comment": "Mixed", "input": "xn--zca.ß", "output": "xn--zca.xn--zca" }, { "input": "ab--c.xn--zca", "output": "ab--c.xn--zca" }, { "input": "ab--c.ß", "output": "ab--c.xn--zca" }, { "comment": "CheckJoiners is true", "input": "\u200D.example", "output": null }, { "input": "xn--1ug.example", "output": null }, { "comment": "CheckBidi is true", "input": "يa", "output": null }, { "input": "xn--a-yoc", "output": null }, { "comment": "processing_option is Nontransitional_Processing", "input": "ශ්‍රී", "output": "xn--10cl1a0b660p" }, { "input": "نامه‌ای", "output": "xn--mgba3gch31f060k" }, { "comment": "U+FFFD", "input": "\uFFFD.com", "output": null }, { "comment": "U+FFFD character encoded in Punycode", "input": "xn--zn7c.com", "output": null }, { "comment": "Label longer than 63 code points", "input": "x01234567890123456789012345678901234567890123456789012345678901x", "output": "x01234567890123456789012345678901234567890123456789012345678901x" }, { "input": "x01234567890123456789012345678901234567890123456789012345678901†", "output": "xn--x01234567890123456789012345678901234567890123456789012345678901-6963b" }, { "input": "x01234567890123456789012345678901234567890123456789012345678901x.xn--zca", "output": "x01234567890123456789012345678901234567890123456789012345678901x.xn--zca" }, { "input": "x01234567890123456789012345678901234567890123456789012345678901x.ß", "output": "x01234567890123456789012345678901234567890123456789012345678901x.xn--zca" }, { "comment": "Domain excluding TLD longer than 253 code points", "input": "01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.0123456789012345678901234567890123456789012345678.x", "output": "01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.0123456789012345678901234567890123456789012345678.x" }, { "input": "01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.0123456789012345678901234567890123456789012345678.xn--zca", "output": "01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.0123456789012345678901234567890123456789012345678.xn--zca" }, { "input": "01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.0123456789012345678901234567890123456789012345678.ß", "output": "01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.01234567890123456789012345678901234567890123456789.0123456789012345678901234567890123456789012345678.xn--zca" }, { "comment": "IDNA ignored code points", "input": "a\u00ADb", "output": "ab" }, { "comment": "Interesting UseSTD3ASCIIRules=false cases", "input": "≠", "output": "xn--1ch" }, { "input": "≮", "output": "xn--gdh" }, { "input": "≯", "output": "xn--hdh" }, { "comment": "NFC normalization (forbidden < and > characters are normalized to valid ones)", "input": "=\u0338", "output": "xn--1ch" }, { "input": "<\u0338", "output": "xn--gdh" }, { "input": ">\u0338", "output": "xn--hdh" }, { "comment": "Same with inserted IDNA ignored code point", "input": "=\u00AD\u0338", "output": "xn--1ch" }, { "input": "<\u00AD\u0338", "output": "xn--gdh" }, { "input": ">\u00AD\u0338", "output": "xn--hdh" }, "Tests below are from WebKit (fast/url/idna2003.html & fast/url/idna2008.html; contributed by Chris Weber back in 2011).", { "input": "fa\u00DF.de", "output": "xn--fa-hia.de" }, { "input": "\u03B2\u03CC\u03BB\u03BF\u03C2.com", "output": "xn--nxasmm1c.com" }, { "input": "\u0DC1\u0DCA\u200D\u0DBB\u0DD3.com", "output": "xn--10cl1a0b660p.com" }, { "input": "\u0646\u0627\u0645\u0647\u200C\u0627\u06CC.com", "output": "xn--mgba3gch31f060k.com" }, { "input": "www.loo\u0138out.net", "output": "www.xn--looout-5bb.net" }, { "input": "\u15EF\u15EF\u15EF.lookout.net", "output": "xn--1qeaa.lookout.net" }, { "input": "www.lookout.\u0441\u043E\u043C", "output": "www.lookout.xn--l1adi" }, { "input": "www\u2025lookout.net", "output": null }, { "input": "www.lookout\u2027net", "output": "www.xn--lookoutnet-406e" }, { "input": "www.lookout.net\u2A7480", "output": null, "urlStandardOnly": true }, { "input": "www\u00A0.lookout.net", "output": null, "urlStandardOnly": true }, { "input": "\u1680lookout.net", "output": null }, { "input": "\u001flookout.net", "output": null, "urlStandardOnly": true }, { "input": "look\u06DDout.net", "output": null }, { "input": "look\u180Eout.net", "output": "lookout.net" }, { "input": "look\u2060out.net", "output": "lookout.net" }, { "input": "look\uFEFFout.net", "output": "lookout.net" }, { "input": "look\uD83F\uDFFEout.net", "output": null }, { "input": "look\uFFFAout.net", "output": null }, { "input": "look\u2FF0out.net", "output": null }, { "input": "look\u0341out.net", "output": "xn--looout-kp7b.net" }, { "input": "look\u202Eout.net", "output": null }, { "input": "look\u206Bout.net", "output": "lookout.net" }, { "input": "look\uDB40\uDC01out.net", "output": null }, { "input": "look\uDB40\uDC20out.net", "output": null }, { "input": "look\u05BEout.net", "output": null }, { "input": "B\u00FCcher.de", "output": "xn--bcher-kva.de" }, { "input": "\u2665.net", "output": "xn--g6h.net" }, { "input": "\u0378.net", "output": null }, { "input": "\u04C0.com", "output": "xn--s5a.com" }, { "input": "\uD87E\uDC68.com", "output": "xn--snl.com" }, { "input": "\u2183.com", "output": "xn--r5g.com" }, { "input": "look\u034Fout.net", "output": "lookout.net" }, { "input": "gOoGle.com", "output": "google.com" }, { "input": "\u09dc.com", "output": "xn--15b8c.com" }, { "input": "\u1E9E.com", "output": "xn--zca.com" }, { "input": "\u1E9E.foo.com", "output": "xn--zca.foo.com" }, { "input": "-foo.bar.com", "output": "-foo.bar.com" }, { "input": "foo-.bar.com", "output": "foo-.bar.com" }, { "input": "ab--cd.com", "output": "ab--cd.com" }, { "input": "xn--0.com", "output": null }, { "input": "foo\u0300.bar.com", "output": "xn--fo-3ja.bar.com" } ]