summaryrefslogtreecommitdiff
path: root/vendor/golang.org/x/text/collate/option_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/golang.org/x/text/collate/option_test.go')
-rw-r--r--vendor/golang.org/x/text/collate/option_test.go209
1 files changed, 209 insertions, 0 deletions
diff --git a/vendor/golang.org/x/text/collate/option_test.go b/vendor/golang.org/x/text/collate/option_test.go
new file mode 100644
index 0000000..0f6ba9b
--- /dev/null
+++ b/vendor/golang.org/x/text/collate/option_test.go
@@ -0,0 +1,209 @@
+// 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"
+ "strings"
+ "testing"
+
+ "golang.org/x/text/internal/colltab"
+ "golang.org/x/text/language"
+)
+
+var (
+ defaultIgnore = ignore(colltab.Tertiary)
+ defaultTable = getTable(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)
+ }
+ }
+}
+
+func TestAlternateSortTypes(t *testing.T) {
+ testCases := []struct {
+ lang string
+ in []string
+ want []string
+ }{{
+ lang: "zh,cmn,zh-Hant-u-co-pinyin,zh-HK-u-co-pinyin,zh-pinyin",
+ in: []string{"爸爸", "妈妈", "儿子", "女儿"},
+ want: []string{"爸爸", "儿子", "妈妈", "女儿"},
+ }, {
+ lang: "zh-Hant,zh-u-co-stroke,zh-Hant-u-co-stroke",
+ in: []string{"爸爸", "妈妈", "儿子", "女儿"},
+ want: []string{"儿子", "女儿", "妈妈", "爸爸"},
+ }}
+ for _, tc := range testCases {
+ for _, tag := range strings.Split(tc.lang, ",") {
+ got := append([]string{}, tc.in...)
+ New(language.MustParse(tag)).SortStrings(got)
+ if !reflect.DeepEqual(got, tc.want) {
+ t.Errorf("New(%s).SortStrings(%v) = %v; want %v", tag, tc.in, got, tc.want)
+ }
+ }
+ }
+}