github.com/graybobo/golang.org-package-offline-cache@v0.0.0-20200626051047-6608995c132f/x/text/collate/option_test.go (about)

     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.
     4  package collate
     5  
     6  import (
     7  	"reflect"
     8  	"testing"
     9  
    10  	"golang.org/x/text/collate/colltab"
    11  	"golang.org/x/text/language"
    12  )
    13  
    14  var (
    15  	defaultIgnore = ignore(colltab.Tertiary)
    16  	defaultTable  = colltab.Init(locales[0])
    17  )
    18  
    19  func TestOptions(t *testing.T) {
    20  	for i, tt := range []struct {
    21  		in  []Option
    22  		out options
    23  	}{
    24  		0: {
    25  			out: options{
    26  				ignore: defaultIgnore,
    27  			},
    28  		},
    29  		1: {
    30  			in: []Option{IgnoreDiacritics},
    31  			out: options{
    32  				ignore: [colltab.NumLevels]bool{false, true, false, true, true},
    33  			},
    34  		},
    35  		2: {
    36  			in: []Option{IgnoreCase, IgnoreDiacritics},
    37  			out: options{
    38  				ignore: ignore(colltab.Primary),
    39  			},
    40  		},
    41  		3: {
    42  			in: []Option{ignoreDiacritics, IgnoreWidth},
    43  			out: options{
    44  				ignore:    ignore(colltab.Primary),
    45  				caseLevel: true,
    46  			},
    47  		},
    48  		4: {
    49  			in: []Option{IgnoreWidth, ignoreDiacritics},
    50  			out: options{
    51  				ignore:    ignore(colltab.Primary),
    52  				caseLevel: true,
    53  			},
    54  		},
    55  		5: {
    56  			in: []Option{IgnoreCase, IgnoreWidth},
    57  			out: options{
    58  				ignore: ignore(colltab.Secondary),
    59  			},
    60  		},
    61  		6: {
    62  			in: []Option{IgnoreCase, IgnoreWidth, Loose},
    63  			out: options{
    64  				ignore: ignore(colltab.Primary),
    65  			},
    66  		},
    67  		7: {
    68  			in: []Option{Force, IgnoreCase, IgnoreWidth, Loose},
    69  			out: options{
    70  				ignore: [colltab.NumLevels]bool{false, true, true, true, false},
    71  			},
    72  		},
    73  		8: {
    74  			in: []Option{IgnoreDiacritics, IgnoreCase},
    75  			out: options{
    76  				ignore: ignore(colltab.Primary),
    77  			},
    78  		},
    79  		9: {
    80  			in: []Option{Numeric},
    81  			out: options{
    82  				ignore:  defaultIgnore,
    83  				numeric: true,
    84  			},
    85  		},
    86  		10: {
    87  			in: []Option{OptionsFromTag(language.MustParse("und-u-ks-level1"))},
    88  			out: options{
    89  				ignore: ignore(colltab.Primary),
    90  			},
    91  		},
    92  		11: {
    93  			in: []Option{OptionsFromTag(language.MustParse("und-u-ks-level4"))},
    94  			out: options{
    95  				ignore: ignore(colltab.Quaternary),
    96  			},
    97  		},
    98  		12: {
    99  			in:  []Option{OptionsFromTag(language.MustParse("und-u-ks-identic"))},
   100  			out: options{},
   101  		},
   102  		13: {
   103  			in: []Option{
   104  				OptionsFromTag(language.MustParse("und-u-kn-true-kb-true-kc-true")),
   105  			},
   106  			out: options{
   107  				ignore:    defaultIgnore,
   108  				caseLevel: true,
   109  				backwards: true,
   110  				numeric:   true,
   111  			},
   112  		},
   113  		14: {
   114  			in: []Option{
   115  				OptionsFromTag(language.MustParse("und-u-kn-true-kb-true-kc-true")),
   116  				OptionsFromTag(language.MustParse("und-u-kn-false-kb-false-kc-false")),
   117  			},
   118  			out: options{
   119  				ignore: defaultIgnore,
   120  			},
   121  		},
   122  		15: {
   123  			in: []Option{
   124  				OptionsFromTag(language.MustParse("und-u-kn-true-kb-true-kc-true")),
   125  				OptionsFromTag(language.MustParse("und-u-kn-foo-kb-foo-kc-foo")),
   126  			},
   127  			out: options{
   128  				ignore:    defaultIgnore,
   129  				caseLevel: true,
   130  				backwards: true,
   131  				numeric:   true,
   132  			},
   133  		},
   134  		16: { // Normal options take precedence over tag options.
   135  			in: []Option{
   136  				Numeric, IgnoreCase,
   137  				OptionsFromTag(language.MustParse("und-u-kn-false-kc-true")),
   138  			},
   139  			out: options{
   140  				ignore:    ignore(colltab.Secondary),
   141  				caseLevel: false,
   142  				numeric:   true,
   143  			},
   144  		},
   145  		17: {
   146  			in: []Option{
   147  				OptionsFromTag(language.MustParse("und-u-ka-shifted")),
   148  			},
   149  			out: options{
   150  				ignore:    defaultIgnore,
   151  				alternate: altShifted,
   152  			},
   153  		},
   154  		18: {
   155  			in: []Option{
   156  				OptionsFromTag(language.MustParse("und-u-ka-blanked")),
   157  			},
   158  			out: options{
   159  				ignore:    defaultIgnore,
   160  				alternate: altBlanked,
   161  			},
   162  		},
   163  		19: {
   164  			in: []Option{
   165  				OptionsFromTag(language.MustParse("und-u-ka-posix")),
   166  			},
   167  			out: options{
   168  				ignore:    defaultIgnore,
   169  				alternate: altShiftTrimmed,
   170  			},
   171  		},
   172  	} {
   173  		c := newCollator(defaultTable)
   174  		c.t = nil
   175  		c.variableTop = 0
   176  		c.f = 0
   177  
   178  		c.setOptions(tt.in)
   179  		if !reflect.DeepEqual(c.options, tt.out) {
   180  			t.Errorf("%d: got %v; want %v", i, c.options, tt.out)
   181  		}
   182  	}
   183  
   184  }