summaryrefslogtreecommitdiff
path: root/vendor/golang.org/x/text/encoding/ianaindex/ianaindex_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/golang.org/x/text/encoding/ianaindex/ianaindex_test.go')
-rw-r--r--vendor/golang.org/x/text/encoding/ianaindex/ianaindex_test.go192
1 files changed, 192 insertions, 0 deletions
diff --git a/vendor/golang.org/x/text/encoding/ianaindex/ianaindex_test.go b/vendor/golang.org/x/text/encoding/ianaindex/ianaindex_test.go
new file mode 100644
index 0000000..20a2131
--- /dev/null
+++ b/vendor/golang.org/x/text/encoding/ianaindex/ianaindex_test.go
@@ -0,0 +1,192 @@
+// Copyright 2017 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 ianaindex
+
+import (
+ "testing"
+
+ "golang.org/x/text/encoding"
+ "golang.org/x/text/encoding/charmap"
+ "golang.org/x/text/encoding/internal/identifier"
+ "golang.org/x/text/encoding/japanese"
+ "golang.org/x/text/encoding/korean"
+ "golang.org/x/text/encoding/simplifiedchinese"
+ "golang.org/x/text/encoding/traditionalchinese"
+ "golang.org/x/text/encoding/unicode"
+)
+
+var All = [][]encoding.Encoding{
+ unicode.All,
+ charmap.All,
+ japanese.All,
+ korean.All,
+ simplifiedchinese.All,
+ traditionalchinese.All,
+}
+
+// TestAllIANA tests whether an Encoding supported in x/text is defined by IANA but
+// not supported by this package.
+func TestAllIANA(t *testing.T) {
+ for _, ea := range All {
+ for _, e := range ea {
+ mib, _ := e.(identifier.Interface).ID()
+ if x := findMIB(ianaToMIB, mib); x != -1 && encodings[x] == nil {
+ t.Errorf("supported MIB %v (%v) not in index", mib, e)
+ }
+ }
+ }
+}
+
+// TestNotSupported reports the encodings in IANA, but not by x/text.
+func TestNotSupported(t *testing.T) {
+ mibs := map[identifier.MIB]bool{}
+ for _, ea := range All {
+ for _, e := range ea {
+ mib, _ := e.(identifier.Interface).ID()
+ mibs[mib] = true
+ }
+ }
+
+ // Many encodings in the IANA index will likely not be suppored by the
+ // Go encodings. That is fine.
+ // TODO: consider wheter we should add this test.
+ // for code, mib := range ianaToMIB {
+ // t.Run(fmt.Sprint("IANA:", mib), func(t *testing.T) {
+ // if !mibs[mib] {
+ // t.Skipf("IANA encoding %s (MIB %v) not supported",
+ // ianaNames[code], mib)
+ // }
+ // })
+ // }
+}
+
+func TestEncoding(t *testing.T) {
+ testCases := []struct {
+ index *Index
+ name string
+ canonical string
+ err error
+ }{
+ {MIME, "utf-8", "UTF-8", nil},
+ {MIME, " utf-8 ", "UTF-8", nil},
+ {MIME, " l5 ", "ISO-8859-9", nil},
+ {MIME, "latin5 ", "ISO-8859-9", nil},
+ {MIME, "LATIN5 ", "ISO-8859-9", nil},
+ {MIME, "latin 5", "", errInvalidName},
+ {MIME, "latin-5", "", errInvalidName},
+
+ {IANA, "utf-8", "UTF-8", nil},
+ {IANA, " utf-8 ", "UTF-8", nil},
+ {IANA, " l5 ", "ISO_8859-9:1989", nil},
+ {IANA, "latin5 ", "ISO_8859-9:1989", nil},
+ {IANA, "LATIN5 ", "ISO_8859-9:1989", nil},
+ {IANA, "latin 5", "", errInvalidName},
+ {IANA, "latin-5", "", errInvalidName},
+
+ {MIB, "utf-8", "UTF8", nil},
+ {MIB, " utf-8 ", "UTF8", nil},
+ {MIB, " l5 ", "ISOLatin5", nil},
+ {MIB, "latin5 ", "ISOLatin5", nil},
+ {MIB, "LATIN5 ", "ISOLatin5", nil},
+ {MIB, "latin 5", "", errInvalidName},
+ {MIB, "latin-5", "", errInvalidName},
+ }
+ for i, tc := range testCases {
+ enc, err := tc.index.Encoding(tc.name)
+ if err != tc.err {
+ t.Errorf("%d: error was %v; want %v", i, err, tc.err)
+ }
+ if err != nil {
+ continue
+ }
+ if got, err := tc.index.Name(enc); got != tc.canonical {
+ t.Errorf("%d: Name(Encoding(%q)) = %q; want %q (%v)", i, tc.name, got, tc.canonical, err)
+ }
+ }
+}
+
+func TestTables(t *testing.T) {
+ for i, x := range []*Index{MIME, IANA} {
+ for name, index := range x.alias {
+ got, err := x.Encoding(name)
+ if err != nil {
+ t.Errorf("%d%s:err: unexpected error %v", i, name, err)
+ }
+ if want := x.enc[index]; got != want {
+ t.Errorf("%d%s:encoding: got %v; want %v", i, name, got, want)
+ }
+ if got != nil {
+ mib, _ := got.(identifier.Interface).ID()
+ if i := findMIB(x.toMIB, mib); i != index {
+ t.Errorf("%d%s:mib: got %d; want %d", i, name, i, index)
+ }
+ }
+ }
+ }
+}
+
+type unsupported struct {
+ encoding.Encoding
+}
+
+func (unsupported) ID() (identifier.MIB, string) { return 9999, "" }
+
+func TestName(t *testing.T) {
+ testCases := []struct {
+ desc string
+ enc encoding.Encoding
+ f func(e encoding.Encoding) (string, error)
+ name string
+ err error
+ }{{
+ "defined encoding",
+ charmap.ISO8859_2,
+ MIME.Name,
+ "ISO-8859-2",
+ nil,
+ }, {
+ "defined Unicode encoding",
+ unicode.UTF16(unicode.BigEndian, unicode.IgnoreBOM),
+ IANA.Name,
+ "UTF-16BE",
+ nil,
+ }, {
+ "another defined Unicode encoding",
+ unicode.UTF16(unicode.BigEndian, unicode.UseBOM),
+ MIME.Name,
+ "UTF-16",
+ nil,
+ }, {
+ "unknown Unicode encoding",
+ unicode.UTF16(unicode.BigEndian, unicode.ExpectBOM),
+ MIME.Name,
+ "",
+ errUnknown,
+ }, {
+ "undefined encoding",
+ unsupported{},
+ MIME.Name,
+ "",
+ errUnsupported,
+ }, {
+ "undefined other encoding in HTML standard",
+ charmap.CodePage437,
+ IANA.Name,
+ "IBM437",
+ nil,
+ }, {
+ "unknown encoding",
+ encoding.Nop,
+ IANA.Name,
+ "",
+ errUnknown,
+ }}
+ for i, tc := range testCases {
+ name, err := tc.f(tc.enc)
+ if name != tc.name || err != tc.err {
+ t.Errorf("%d:%s: got %q, %v; want %q, %v", i, tc.desc, name, err, tc.name, tc.err)
+ }
+ }
+}