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.
11 "golang.org/x/text/internal/colltab"
12 "golang.org/x/text/language"
16 defaultIgnore = ignore(colltab.Tertiary)
17 defaultTable = getTable(locales[0])
20 func TestOptions(t *testing.T) {
21 for i, tt := range []struct {
27 ignore: defaultIgnore,
31 in: []Option{IgnoreDiacritics},
33 ignore: [colltab.NumLevels]bool{false, true, false, true, true},
37 in: []Option{IgnoreCase, IgnoreDiacritics},
39 ignore: ignore(colltab.Primary),
43 in: []Option{ignoreDiacritics, IgnoreWidth},
45 ignore: ignore(colltab.Primary),
50 in: []Option{IgnoreWidth, ignoreDiacritics},
52 ignore: ignore(colltab.Primary),
57 in: []Option{IgnoreCase, IgnoreWidth},
59 ignore: ignore(colltab.Secondary),
63 in: []Option{IgnoreCase, IgnoreWidth, Loose},
65 ignore: ignore(colltab.Primary),
69 in: []Option{Force, IgnoreCase, IgnoreWidth, Loose},
71 ignore: [colltab.NumLevels]bool{false, true, true, true, false},
75 in: []Option{IgnoreDiacritics, IgnoreCase},
77 ignore: ignore(colltab.Primary),
81 in: []Option{Numeric},
83 ignore: defaultIgnore,
88 in: []Option{OptionsFromTag(language.MustParse("und-u-ks-level1"))},
90 ignore: ignore(colltab.Primary),
94 in: []Option{OptionsFromTag(language.MustParse("und-u-ks-level4"))},
96 ignore: ignore(colltab.Quaternary),
100 in: []Option{OptionsFromTag(language.MustParse("und-u-ks-identic"))},
105 OptionsFromTag(language.MustParse("und-u-kn-true-kb-true-kc-true")),
108 ignore: defaultIgnore,
116 OptionsFromTag(language.MustParse("und-u-kn-true-kb-true-kc-true")),
117 OptionsFromTag(language.MustParse("und-u-kn-false-kb-false-kc-false")),
120 ignore: defaultIgnore,
125 OptionsFromTag(language.MustParse("und-u-kn-true-kb-true-kc-true")),
126 OptionsFromTag(language.MustParse("und-u-kn-foo-kb-foo-kc-foo")),
129 ignore: defaultIgnore,
135 16: { // Normal options take precedence over tag options.
138 OptionsFromTag(language.MustParse("und-u-kn-false-kc-true")),
141 ignore: ignore(colltab.Secondary),
148 OptionsFromTag(language.MustParse("und-u-ka-shifted")),
151 ignore: defaultIgnore,
152 alternate: altShifted,
157 OptionsFromTag(language.MustParse("und-u-ka-blanked")),
160 ignore: defaultIgnore,
161 alternate: altBlanked,
166 OptionsFromTag(language.MustParse("und-u-ka-posix")),
169 ignore: defaultIgnore,
170 alternate: altShiftTrimmed,
174 c := newCollator(defaultTable)
180 if !reflect.DeepEqual(c.options, tt.out) {
181 t.Errorf("%d: got %v; want %v", i, c.options, tt.out)
186 func TestAlternateSortTypes(t *testing.T) {
187 testCases := []struct {
192 lang: "zh,cmn,zh-Hant-u-co-pinyin,zh-HK-u-co-pinyin,zh-pinyin",
193 in: []string{"爸爸", "妈妈", "儿子", "女儿"},
194 want: []string{"爸爸", "儿子", "妈妈", "女儿"},
196 lang: "zh-Hant,zh-u-co-stroke,zh-Hant-u-co-stroke",
197 in: []string{"爸爸", "妈妈", "儿子", "女儿"},
198 want: []string{"儿子", "女儿", "妈妈", "爸爸"},
200 for _, tc := range testCases {
201 for _, tag := range strings.Split(tc.lang, ",") {
202 got := append([]string{}, tc.in...)
203 New(language.MustParse(tag)).SortStrings(got)
204 if !reflect.DeepEqual(got, tc.want) {
205 t.Errorf("New(%s).SortStrings(%v) = %v; want %v", tag, tc.in, got, tc.want)