summaryrefslogtreecommitdiff
path: root/vendor/golang.org/x/net/idna/idna_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/golang.org/x/net/idna/idna_test.go')
-rw-r--r--vendor/golang.org/x/net/idna/idna_test.go108
1 files changed, 108 insertions, 0 deletions
diff --git a/vendor/golang.org/x/net/idna/idna_test.go b/vendor/golang.org/x/net/idna/idna_test.go
new file mode 100644
index 0000000..0b067ca
--- /dev/null
+++ b/vendor/golang.org/x/net/idna/idna_test.go
@@ -0,0 +1,108 @@
+// Copyright 2012 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package idna
+
+import (
+ "testing"
+)
+
+var idnaTestCases = [...]struct {
+ ascii, unicode string
+}{
+ // Labels.
+ {"books", "books"},
+ {"xn--bcher-kva", "bücher"},
+
+ // Domains.
+ {"foo--xn--bar.org", "foo--xn--bar.org"},
+ {"golang.org", "golang.org"},
+ {"example.xn--p1ai", "example.рф"},
+ {"xn--czrw28b.tw", "商業.tw"},
+ {"www.xn--mller-kva.de", "www.müller.de"},
+}
+
+func TestIDNA(t *testing.T) {
+ for _, tc := range idnaTestCases {
+ if a, err := ToASCII(tc.unicode); err != nil {
+ t.Errorf("ToASCII(%q): %v", tc.unicode, err)
+ } else if a != tc.ascii {
+ t.Errorf("ToASCII(%q): got %q, want %q", tc.unicode, a, tc.ascii)
+ }
+
+ if u, err := ToUnicode(tc.ascii); err != nil {
+ t.Errorf("ToUnicode(%q): %v", tc.ascii, err)
+ } else if u != tc.unicode {
+ t.Errorf("ToUnicode(%q): got %q, want %q", tc.ascii, u, tc.unicode)
+ }
+ }
+}
+
+func TestIDNASeparators(t *testing.T) {
+ type subCase struct {
+ unicode string
+ wantASCII string
+ wantErr bool
+ }
+
+ testCases := []struct {
+ name string
+ profile *Profile
+ subCases []subCase
+ }{
+ {
+ name: "Punycode", profile: Punycode,
+ subCases: []subCase{
+ {"example\u3002jp", "xn--examplejp-ck3h", false},
+ {"東京\uFF0Ejp", "xn--jp-l92cn98g071o", false},
+ {"大阪\uFF61jp", "xn--jp-ku9cz72u463f", false},
+ },
+ },
+ {
+ name: "Lookup", profile: Lookup,
+ subCases: []subCase{
+ {"example\u3002jp", "example.jp", false},
+ {"東京\uFF0Ejp", "xn--1lqs71d.jp", false},
+ {"大阪\uFF61jp", "xn--pssu33l.jp", false},
+ },
+ },
+ {
+ name: "Display", profile: Display,
+ subCases: []subCase{
+ {"example\u3002jp", "example.jp", false},
+ {"東京\uFF0Ejp", "xn--1lqs71d.jp", false},
+ {"大阪\uFF61jp", "xn--pssu33l.jp", false},
+ },
+ },
+ {
+ name: "Registration", profile: Registration,
+ subCases: []subCase{
+ {"example\u3002jp", "", true},
+ {"東京\uFF0Ejp", "", true},
+ {"大阪\uFF61jp", "", true},
+ },
+ },
+ }
+ for _, tc := range testCases {
+ t.Run(tc.name, func(t *testing.T) {
+ for _, c := range tc.subCases {
+ gotA, err := tc.profile.ToASCII(c.unicode)
+ if c.wantErr {
+ if err == nil {
+ t.Errorf("ToASCII(%q): got no error, but an error expected", c.unicode)
+ }
+ } else {
+ if err != nil {
+ t.Errorf("ToASCII(%q): got err=%v, but no error expected", c.unicode, err)
+ } else if gotA != c.wantASCII {
+ t.Errorf("ToASCII(%q): got %q, want %q", c.unicode, gotA, c.wantASCII)
+ }
+ }
+ }
+ })
+ }
+}
+
+// TODO(nigeltao): test errors, once we've specified when ToASCII and ToUnicode
+// return errors.