Files
silo-server/internal/lang/lang_test.go

101 lines
2.1 KiB
Go

package lang
import "testing"
func TestCanonical(t *testing.T) {
cases := []struct {
in, want string
}{
{"", ""},
{" ", ""},
{"en", "en"},
{"EN", "en"},
{" en ", "en"},
{"eng", "en"},
{"ENG", "en"},
{"jpn", "ja"},
{"ja", "ja"},
{"fra", "fr"},
{"fre", "fr"},
{"fr", "fr"},
{"deu", "de"},
{"ger", "de"},
{"zho", "zh"},
{"chi", "zh"},
{"nor", "no"},
{"nob", "nb"},
{"nb", "nb"},
{"nn", "nn"},
{"fr-CA", "fr"},
{"en-US", "en"},
{"pt-BR", "pt"},
// Languages without a 2-letter form keep their 3-letter code.
{"fil", "fil"},
// Unrecognized inputs preserved as lowercase+trimmed.
{"english", "english"},
{"klingon", "klingon"},
{" Ja ", "ja"},
}
for _, tc := range cases {
got := Canonical(tc.in)
if got != tc.want {
t.Errorf("Canonical(%q) = %q, want %q", tc.in, got, tc.want)
}
}
}
func TestCanonicalCountry(t *testing.T) {
cases := []struct {
in, want string
}{
{"", ""},
{" ", ""},
{"US", "US"},
{"us", "US"},
{" us ", "US"},
{"GB", "GB"},
{"JP", "JP"},
// Three-letter codes get canonicalized to alpha-2.
{"USA", "US"},
{"GBR", "GB"},
{"JPN", "JP"},
// Unrecognized stays uppercase+trimmed.
{"United States", "UNITED STATES"},
{"ZZ", "ZZ"},
}
for _, tc := range cases {
got := CanonicalCountry(tc.in)
if got != tc.want {
t.Errorf("CanonicalCountry(%q) = %q, want %q", tc.in, got, tc.want)
}
}
}
func TestCanonicalCountries(t *testing.T) {
cases := []struct {
in []string
want []string
}{
{nil, nil},
{[]string{}, []string{}},
{[]string{"us", "GBR", "", " jp ", "ZZ"}, []string{"US", "GB", "JP", "ZZ"}},
{[]string{" ", ""}, []string{}},
}
for _, tc := range cases {
got := CanonicalCountries(tc.in)
if (got == nil) != (tc.want == nil) {
t.Errorf("CanonicalCountries(%v) nil mismatch: got %v, want %v", tc.in, got, tc.want)
continue
}
if len(got) != len(tc.want) {
t.Errorf("CanonicalCountries(%v) = %v, want %v", tc.in, got, tc.want)
continue
}
for i := range tc.want {
if got[i] != tc.want[i] {
t.Errorf("CanonicalCountries(%v)[%d] = %q, want %q", tc.in, i, got[i], tc.want[i])
}
}
}
}