Files
tia-love/internal/i18n/i18n_test.go
T

74 lines
1.6 KiB
Go

package i18n
import (
"testing"
"time"
)
// Paritas katalog: setiap kunci harus ada di kedua bahasa.
func TestCatalogParity(t *testing.T) {
id := Keys("id")
en := Keys("en")
if len(id) == 0 || len(en) == 0 {
t.Fatalf("katalog tidak termuat: id=%d en=%d", len(id), len(en))
}
inEN := map[string]bool{}
for _, k := range en {
inEN[k] = true
}
inID := map[string]bool{}
for _, k := range id {
inID[k] = true
}
for _, k := range id {
if !inEN[k] {
t.Errorf("kunci %q ada di id tapi tidak di en", k)
}
}
for _, k := range en {
if !inID[k] {
t.Errorf("kunci %q ada di en tapi tidak di id", k)
}
}
}
func TestTFallback(t *testing.T) {
SetLang("id")
if got := T("nav.home"); got != "beranda" {
t.Fatalf("id nav.home = %q", got)
}
SetLang("en")
if got := T("nav.home"); got != "home" {
t.Fatalf("en nav.home = %q", got)
}
// fallback: kunci tak dikenal → key itu sendiri
if got := T("tidak.ada"); got != "tidak.ada" {
t.Fatalf("fallback = %q", got)
}
if got := TOr("state.tidakada", "raw"); got != "raw" {
t.Fatalf("TOr = %q", got)
}
SetLang(DefaultLang)
}
func TestTf(t *testing.T) {
SetLang("id")
got := Tf("fmt.countTotal", 7)
if got != "7 total" {
t.Fatalf("Tf = %q", got)
}
}
func TestLocaleDates(t *testing.T) {
d := time.Date(2026, 10, 15, 0, 0, 0, 0, time.UTC) // Kamis
SetLang("id")
if WeekdayName(d) != "Kamis" || MonthName(d) != "Oktober" {
t.Fatalf("id: %s %s", WeekdayName(d), MonthName(d))
}
SetLang("en")
if WeekdayName(d) != "Thursday" || MonthName(d) != "October" {
t.Fatalf("en: %s %s", WeekdayName(d), MonthName(d))
}
SetLang(DefaultLang)
}