package colltab import ( "testing" "golang.org/x/text/language" ) func TestMatchLang(t *testing.T) { tags := []language.Tag{ 0: language.Und, 1: language.MustParse("bs"), 2: language.German, 3: language.English, 4: language.AmericanEnglish, 5: language.MustParse("en-US-u-va-posix"), 6: language.Portuguese, 7: language.Serbian, 8: language.MustParse("sr-Latn"), 9: language.Chinese, 10: language.MustParse("zh-u-co-stroke"), 11: language.MustParse("zh-Hant-u-co-pinyin"), 12: language.TraditionalChinese, } for i, tc := range []struct { x int t language.Tag }{ {0, language.Und}, {0, language.Persian}, // Default to first element when no match. {3, language.English}, {4, language.AmericanEnglish}, {5, language.MustParse("en-US-u-va-posix")}, // Ext. variant match. {4, language.MustParse("en-US-u-va-noposix")}, // Ext. variant mismatch. {3, language.MustParse("en-UK-u-va-noposix")}, // Ext. variant mismatch. {7, language.Serbian}, {0, language.Croatian}, // Don't match to close language! {0, language.MustParse("gsw")}, // Don't match to close language! {1, language.MustParse("bs-Cyrl")}, // Odd, but correct. {1, language.MustParse("bs-Latn")}, // Estimated script drops. {8, language.MustParse("sr-Latn")}, {9, language.Chinese}, {9, language.SimplifiedChinese}, {12, language.TraditionalChinese}, {11, language.MustParse("zh-Hant-u-co-pinyin")}, // TODO: should this be 12? Either inherited value (10) or default is // fine in this case, though. Other locales are not affected. {10, language.MustParse("zh-Hant-u-co-stroke")}, // There is no "phonebk" sorting order for zh-Hant, so use default. {12, language.MustParse("zh-Hant-u-co-phonebk")}, {10, language.MustParse("zh-u-co-stroke")}, {12, language.MustParse("und-TW")}, // Infer script and language. {12, language.MustParse("und-HK")}, // Infer script and language. {6, language.MustParse("und-BR")}, // Infer script and language. {6, language.MustParse("und-PT")}, // Infer script and language. {2, language.MustParse("und-Latn-DE")}, // Infer language. {0, language.MustParse("und-Jpan-BR")}, // Infers "ja", so no match. {0, language.MustParse("zu")}, // No match past index. } { t.Run(tc.t.String(), func(t *testing.T) { if x := MatchLang(tc.t, tags); x != tc.x { t.Errorf("%d: MatchLang(%q, tags) = %d; want %d", i, tc.t, x, tc.x) } }) } }