1 // Copyright 2014 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 func TestSupported(t *testing.T) {
14 // To prove the results are correct for a type, we test that the number of
15 // results is identical to the number of results on record, that all results
16 // are distinct and that all results are valid.
17 tests := map[string]int{
18 "BaseLanguages": numLanguages,
19 "Scripts": numScripts,
20 "Regions": numRegions,
23 sup := reflect.ValueOf(Supported)
24 for name, num := range tests {
25 v := sup.MethodByName(name).Call(nil)[0]
26 if n := v.Len(); n != num {
27 t.Errorf("len(%s()) was %d; want %d", name, n, num)
29 dup := make(map[string]bool)
30 for i := 0; i < v.Len(); i++ {
31 x := v.Index(i).Interface()
32 // An invalid value will either cause a crash or result in a
33 // duplicate when passed to Sprint.
36 t.Errorf("%s: duplicate entry %q", name, s)
40 if len(dup) != v.Len() {
41 t.Errorf("%s: # unique entries was %d; want %d", name, len(dup), v.Len())
46 func TestNewCoverage(t *testing.T) {
47 bases := []Base{Base{0}, Base{3}, Base{7}}
48 scripts := []Script{Script{11}, Script{17}, Script{23}}
49 regions := []Region{Region{101}, Region{103}, Region{107}}
50 tags := []Tag{Make("pt"), Make("en"), Make("en-GB"), Make("en-US"), Make("pt-PT")}
51 fbases := func() []Base { return bases }
52 fscripts := func() []Script { return scripts }
53 fregions := func() []Region { return regions }
54 ftags := func() []Tag { return tags }
69 list: []interface{}{bases},
74 list: []interface{}{scripts},
79 list: []interface{}{regions},
83 desc: "bases derives from tags",
84 list: []interface{}{tags},
85 bases: []Base{Base{_en}, Base{_pt}},
89 desc: "tags and bases",
90 list: []interface{}{tags, bases},
95 desc: "fully specified",
96 list: []interface{}{tags, bases, scripts, regions},
104 list: []interface{}{fbases},
108 desc: "scripts func",
109 list: []interface{}{fscripts},
113 desc: "regions func",
114 list: []interface{}{fregions},
119 list: []interface{}{ftags},
120 bases: []Base{Base{_en}, Base{_pt}},
124 desc: "tags and bases",
125 list: []interface{}{ftags, fbases},
130 desc: "fully specified",
131 list: []interface{}{ftags, fbases, fscripts, fregions},
139 for i, tt := range tests {
140 l := NewCoverage(tt.list...)
141 if a := l.BaseLanguages(); !reflect.DeepEqual(a, tt.bases) {
142 t.Errorf("%d:%s: BaseLanguages was %v; want %v", i, tt.desc, a, tt.bases)
144 if a := l.Scripts(); !reflect.DeepEqual(a, tt.scripts) {
145 t.Errorf("%d:%s: Scripts was %v; want %v", i, tt.desc, a, tt.scripts)
147 if a := l.Regions(); !reflect.DeepEqual(a, tt.regions) {
148 t.Errorf("%d:%s: Regions was %v; want %v", i, tt.desc, a, tt.regions)
150 if a := l.Tags(); !reflect.DeepEqual(a, tt.tags) {
151 t.Errorf("%d:%s: Tags was %v; want %v", i, tt.desc, a, tt.tags)