1 // Copyright 2016 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
13 "golang.org/x/text/internal/gen"
14 "golang.org/x/text/internal/testtext"
15 "golang.org/x/text/language"
16 "golang.org/x/text/unicode/cldr"
19 var draft = flag.String("draft",
21 `Minimal draft requirements (approved, contributed, provisional, unconfirmed).`)
23 func TestNumberSystems(t *testing.T) {
24 testtext.SkipIfNotLong(t)
26 r := gen.OpenCLDRCoreZip()
30 d.SetDirFilter("supplemental")
31 d.SetSectionFilter("numberingSystem")
32 data, err := d.DecodeZip(r)
34 t.Fatalf("DecodeZip: %v", err)
37 for _, ns := range data.Supplemental().NumberingSystems.NumberingSystem {
39 if int(n) >= len(numSysData) {
42 info := InfoFromLangID(0, ns.Id)
44 for _, rWant := range ns.Digits {
45 if rGot := info.Digit(val); rGot != rWant {
46 t.Errorf("%s:%d: got %U; want %U", ns.Id, val, rGot, rWant)
53 func TestSymbols(t *testing.T) {
54 testtext.SkipIfNotLong(t)
56 draft, err := cldr.ParseDraft(*draft)
58 log.Fatalf("invalid draft level: %v", err)
61 r := gen.OpenCLDRCoreZip()
65 d.SetDirFilter("main")
66 d.SetSectionFilter("numbers")
67 data, err := d.DecodeZip(r)
69 t.Fatalf("DecodeZip: %v", err)
72 for _, lang := range data.Locales() {
73 ldml := data.RawLDML(lang)
74 if ldml.Numbers == nil {
77 langIndex, ok := language.CompactIndex(language.MustParse(lang))
79 t.Fatalf("No compact index for language %s", lang)
82 syms := cldr.MakeSlice(&ldml.Numbers.Symbols)
83 syms.SelectDraft(draft)
85 for _, sym := range ldml.Numbers.Symbols {
86 if sym.NumberSystem == "" {
89 testCases := []struct {
94 {"Decimal", SymDecimal, sym.Decimal},
95 {"Group", SymGroup, sym.Group},
96 {"List", SymList, sym.List},
97 {"PercentSign", SymPercentSign, sym.PercentSign},
98 {"PlusSign", SymPlusSign, sym.PlusSign},
99 {"MinusSign", SymMinusSign, sym.MinusSign},
100 {"Exponential", SymExponential, sym.Exponential},
101 {"SuperscriptingExponent", SymSuperscriptingExponent, sym.SuperscriptingExponent},
102 {"PerMille", SymPerMille, sym.PerMille},
103 {"Infinity", SymInfinity, sym.Infinity},
104 {"NaN", SymNan, sym.Nan},
105 {"TimeSeparator", SymTimeSeparator, sym.TimeSeparator},
107 info := InfoFromLangID(langIndex, sym.NumberSystem)
108 for _, tc := range testCases {
109 // Extract the wanted value.
110 v := reflect.ValueOf(tc.x)
115 t.Fatalf("Multiple values of %q within single symbol not supported.", tc.name)
117 want := v.Index(0).MethodByName("Data").Call(nil)[0].String()
118 got := info.Symbol(tc.st)
120 t.Errorf("%s:%s:%s: got %q; want %q", lang, sym.NumberSystem, tc.name, got, want)