123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- package idna
- import "testing"
- func TestLabelErrors(t *testing.T) {
- encode := func(s string) string { s, _ = encode(acePrefix, s); return s }
- type kind struct {
- name string
- f func(string) (string, error)
- }
- punyA := kind{"PunycodeA", punycode.ToASCII}
- resolve := kind{"ResolveA", Lookup.ToASCII}
- display := kind{"ToUnicode", Display.ToUnicode}
- p := New(VerifyDNSLength(true), MapForLookup(), BidiRule())
- lengthU := kind{"CheckLengthU", p.ToUnicode}
- lengthA := kind{"CheckLengthA", p.ToASCII}
- p = New(MapForLookup(), StrictDomainName(false))
- std3 := kind{"STD3", p.ToASCII}
- testCases := []struct {
- kind
- input string
- want string
- wantErr string
- }{
- {lengthU, "", "", "A4"},
- {lengthA, "", "", "A4"},
- {lengthU, "xn--", "", "A4"},
- {lengthU, "foo.xn--", "foo.", "A4"},
- {lengthU, "xn--.foo", ".foo", "A4"},
- {lengthU, "foo.xn--.bar", "foo..bar", "A4"},
- {display, "xn--", "", ""},
- {display, "foo.xn--", "foo.", ""},
- {display, "xn--.foo", ".foo", ""},
- {display, "foo.xn--.bar", "foo..bar", ""},
- {lengthA, "a..b", "a..b", "A4"},
- {punyA, ".b", ".b", ""},
-
- {punyA, "\u3002b", "xn--b-83t", ""},
- {punyA, "..b", "..b", ""},
- {lengthA, ".b", ".b", "A4"},
- {lengthA, "\u3002b", ".b", "A4"},
- {lengthA, "..b", "..b", "A4"},
- {lengthA, "b..", "b..", ""},
-
-
- {lengthA, "\ufe05\u3002\u3002\U0002603e\u1ce0", "..xn--t6f5138v", "A4"},
- {lengthA, "FAX\u2a77\U0001d186\u3002\U0001e942\U000e0181\u180c", "", "B6"},
- {resolve, "a..b", "a..b", ""},
-
-
- {resolve, ".b", ".b", ""},
- {resolve, "\u3002b", ".b", ""},
- {resolve, "..b", "..b", ""},
- {resolve, "b..", "b..", ""},
- {resolve, "\xed", "", "P1"},
-
- {punyA, "", "", ""},
- {punyA, "*.foo.com", "*.foo.com", ""},
- {punyA, "Foo.com", "Foo.com", ""},
-
- {display, "*.foo.com", "*.foo.com", "P1"},
- {std3, "*.foo.com", "*.foo.com", ""},
-
-
-
- {resolve, "lab⒐be", "xn--labbe-zh9b", "P1"},
- {display, "lab⒐be", "lab⒐be", "P1"},
- {resolve, "plan⒐faß.de", "xn--planfass-c31e.de", "P1"},
- {display, "Plan⒐faß.de", "plan⒐faß.de", "P1"},
-
-
-
-
-
-
- {resolve, "日本⒈co.ßßß.de", "xn--co-wuw5954azlb.ssssss.de", "P1"},
- {display, "日本⒈co.ßßß.de", "日本⒈co.ßßß.de", "P1"},
- {resolve, "a\u200Cb", "ab", ""},
- {display, "a\u200Cb", "a\u200Cb", "C"},
- {resolve, encode("a\u200Cb"), encode("a\u200Cb"), "C"},
- {display, "a\u200Cb", "a\u200Cb", "C"},
- {resolve, "grﻋﺮﺑﻲ.de", "xn--gr-gtd9a1b0g.de", "B"},
- {
-
-
-
- display,
- "gr\ufecb\ufeae\ufe91\ufef2.de",
- "gr\u0639\u0631\u0628\u064a.de",
- "B",
- },
- {resolve, "\u0671.\u03c3\u07dc", "xn--qib.xn--4xa21s", "B"},
- {display, "\u0671.\u03c3\u07dc", "\u0671.\u03c3\u07dc", "B"},
-
- {resolve, "a\u0323\u0322", "xn--jta191l", ""},
- {display, "a\u0323\u0322", "\u1ea1\u0322", ""},
-
-
-
- {resolve, encode("a\u0323\u0322") + ".com", "xn--a-tdbc.com", "V1"},
- {display, encode("a\u0323\u0322") + ".com", "a\u0323\u0322.com", "V1"},
- }
- for _, tc := range testCases {
- doTest(t, tc.f, tc.name, tc.input, tc.want, tc.wantErr)
- }
- }
|