78 lines
2.1 KiB
Go
78 lines
2.1 KiB
Go
package i18n
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
|
|
"golang.org/x/text/language"
|
|
)
|
|
|
|
func TestCrossPlatformCoverageLanguageSelectionAndTranslation(t *testing.T) {
|
|
Init()
|
|
SetLang(" zh_CN.UTF-8 ")
|
|
if Lang() != "zh" || LangTag() != language.Chinese {
|
|
t.Fatalf("Chinese language = %q, %v", Lang(), LangTag())
|
|
}
|
|
var knownKey string
|
|
for key := range zhCatalog {
|
|
knownKey = key
|
|
break
|
|
}
|
|
if knownKey == "" || T(knownKey) != zhCatalog[knownKey] {
|
|
t.Fatalf("known Chinese translation was not resolved: %q", knownKey)
|
|
}
|
|
|
|
SetLang("EN-us")
|
|
if Lang() != "en" || LangTag() != language.English {
|
|
t.Fatalf("English language = %q, %v", Lang(), LangTag())
|
|
}
|
|
if T("missing.translation.key") != "missing.translation.key" {
|
|
t.Fatal("missing translation did not fall back to its key")
|
|
}
|
|
|
|
const fallbackKey = "test.english.fallback"
|
|
oldEnglish, hadEnglish := enCatalog[fallbackKey]
|
|
oldChinese, hadChinese := zhCatalog[fallbackKey]
|
|
enCatalog[fallbackKey] = "Hello %s"
|
|
delete(zhCatalog, fallbackKey)
|
|
t.Cleanup(func() {
|
|
if hadEnglish {
|
|
enCatalog[fallbackKey] = oldEnglish
|
|
} else {
|
|
delete(enCatalog, fallbackKey)
|
|
}
|
|
if hadChinese {
|
|
zhCatalog[fallbackKey] = oldChinese
|
|
}
|
|
})
|
|
SetLang("zh")
|
|
if got := Tf(fallbackKey, "Codex"); got != "Hello Codex" {
|
|
t.Fatalf("Tf() fallback = %q", got)
|
|
}
|
|
if catalogForLang("zh") != nil && len(catalogForLang("zh")) == 0 {
|
|
t.Fatal("Chinese catalog is empty")
|
|
}
|
|
if len(catalogForLang("unsupported")) == 0 {
|
|
t.Fatal("unsupported language did not use English catalog")
|
|
}
|
|
}
|
|
|
|
func TestCrossPlatformCoverageLoadCatalogHandlesValidAndInvalidResources(t *testing.T) {
|
|
if catalog := loadCatalog("en"); len(catalog) == 0 {
|
|
t.Fatal("loadCatalog(en) returned an empty catalog")
|
|
}
|
|
if catalog := loadCatalog("missing"); len(catalog) != 0 {
|
|
t.Fatalf("loadCatalog(missing) = %#v", catalog)
|
|
}
|
|
if catalog := parseCatalog([]byte(`{`)); len(catalog) != 0 {
|
|
t.Fatalf("parseCatalog(invalid) = %#v", catalog)
|
|
}
|
|
if catalog := parseCatalog([]byte(`{"key":"value"}`)); catalog["key"] != "value" {
|
|
t.Fatalf("parseCatalog(valid) = %#v", catalog)
|
|
}
|
|
SetLang(strings.Repeat(" ", 2))
|
|
if Lang() != "en" {
|
|
t.Fatalf("blank language = %q", Lang())
|
|
}
|
|
}
|