| // Copyright 2014 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 collate |
| |
| import ( |
| "reflect" |
| "testing" |
| |
| "golang.org/x/text/collate/colltab" |
| "golang.org/x/text/language" |
| ) |
| |
| var ( |
| defaultIgnore = ignore(colltab.Tertiary) |
| defaultTable = colltab.Init(locales[0]) |
| ) |
| |
| func TestOptions(t *testing.T) { |
| for i, tt := range []struct { |
| in []Option |
| out options |
| }{ |
| 0: { |
| out: options{ |
| ignore: defaultIgnore, |
| }, |
| }, |
| 1: { |
| in: []Option{IgnoreDiacritics}, |
| out: options{ |
| ignore: [colltab.NumLevels]bool{false, true, false, true, true}, |
| }, |
| }, |
| 2: { |
| in: []Option{IgnoreCase, IgnoreDiacritics}, |
| out: options{ |
| ignore: ignore(colltab.Primary), |
| }, |
| }, |
| 3: { |
| in: []Option{ignoreDiacritics, IgnoreWidth}, |
| out: options{ |
| ignore: ignore(colltab.Primary), |
| caseLevel: true, |
| }, |
| }, |
| 4: { |
| in: []Option{IgnoreWidth, ignoreDiacritics}, |
| out: options{ |
| ignore: ignore(colltab.Primary), |
| caseLevel: true, |
| }, |
| }, |
| 5: { |
| in: []Option{IgnoreCase, IgnoreWidth}, |
| out: options{ |
| ignore: ignore(colltab.Secondary), |
| }, |
| }, |
| 6: { |
| in: []Option{IgnoreCase, IgnoreWidth, Loose}, |
| out: options{ |
| ignore: ignore(colltab.Primary), |
| }, |
| }, |
| 7: { |
| in: []Option{Force, IgnoreCase, IgnoreWidth, Loose}, |
| out: options{ |
| ignore: [colltab.NumLevels]bool{false, true, true, true, false}, |
| }, |
| }, |
| 8: { |
| in: []Option{IgnoreDiacritics, IgnoreCase}, |
| out: options{ |
| ignore: ignore(colltab.Primary), |
| }, |
| }, |
| 9: { |
| in: []Option{Numeric}, |
| out: options{ |
| ignore: defaultIgnore, |
| numeric: true, |
| }, |
| }, |
| 10: { |
| in: []Option{OptionsFromTag(language.MustParse("und-u-ks-level1"))}, |
| out: options{ |
| ignore: ignore(colltab.Primary), |
| }, |
| }, |
| 11: { |
| in: []Option{OptionsFromTag(language.MustParse("und-u-ks-level4"))}, |
| out: options{ |
| ignore: ignore(colltab.Quaternary), |
| }, |
| }, |
| 12: { |
| in: []Option{OptionsFromTag(language.MustParse("und-u-ks-identic"))}, |
| out: options{}, |
| }, |
| 13: { |
| in: []Option{ |
| OptionsFromTag(language.MustParse("und-u-kn-true-kb-true-kc-true")), |
| }, |
| out: options{ |
| ignore: defaultIgnore, |
| caseLevel: true, |
| backwards: true, |
| numeric: true, |
| }, |
| }, |
| 14: { |
| in: []Option{ |
| OptionsFromTag(language.MustParse("und-u-kn-true-kb-true-kc-true")), |
| OptionsFromTag(language.MustParse("und-u-kn-false-kb-false-kc-false")), |
| }, |
| out: options{ |
| ignore: defaultIgnore, |
| }, |
| }, |
| 15: { |
| in: []Option{ |
| OptionsFromTag(language.MustParse("und-u-kn-true-kb-true-kc-true")), |
| OptionsFromTag(language.MustParse("und-u-kn-foo-kb-foo-kc-foo")), |
| }, |
| out: options{ |
| ignore: defaultIgnore, |
| caseLevel: true, |
| backwards: true, |
| numeric: true, |
| }, |
| }, |
| 16: { // Normal options take precedence over tag options. |
| in: []Option{ |
| Numeric, IgnoreCase, |
| OptionsFromTag(language.MustParse("und-u-kn-false-kc-true")), |
| }, |
| out: options{ |
| ignore: ignore(colltab.Secondary), |
| caseLevel: false, |
| numeric: true, |
| }, |
| }, |
| 17: { |
| in: []Option{ |
| OptionsFromTag(language.MustParse("und-u-ka-shifted")), |
| }, |
| out: options{ |
| ignore: defaultIgnore, |
| alternate: altShifted, |
| }, |
| }, |
| 18: { |
| in: []Option{ |
| OptionsFromTag(language.MustParse("und-u-ka-blanked")), |
| }, |
| out: options{ |
| ignore: defaultIgnore, |
| alternate: altBlanked, |
| }, |
| }, |
| 19: { |
| in: []Option{ |
| OptionsFromTag(language.MustParse("und-u-ka-posix")), |
| }, |
| out: options{ |
| ignore: defaultIgnore, |
| alternate: altShiftTrimmed, |
| }, |
| }, |
| } { |
| c := newCollator(defaultTable) |
| c.t = nil |
| c.variableTop = 0 |
| c.f = 0 |
| |
| c.setOptions(tt.in) |
| if !reflect.DeepEqual(c.options, tt.out) { |
| t.Errorf("%d: got %v; want %v", i, c.options, tt.out) |
| } |
| } |
| |
| } |