fix bot lifecycle and docs
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
package laniakea
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"sync"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestL10nTranslateUsesFallbackAndKey(t *testing.T) {
|
||||
l10n := NewL10n("en").
|
||||
AddDictEntry("greeting", DictEntry{"en": "Hello", "ru": "Privet"}).
|
||||
AddDictEntry("partial", DictEntry{"ru": "Tolko ru"})
|
||||
|
||||
tests := []struct {
|
||||
name string
|
||||
lang string
|
||||
key string
|
||||
want string
|
||||
}{
|
||||
{name: "exact match", lang: "ru", key: "greeting", want: "Privet"},
|
||||
{name: "fallback language", lang: "es", key: "greeting", want: "Hello"},
|
||||
{name: "missing fallback returns key", lang: "en", key: "partial", want: "partial"},
|
||||
{name: "unknown key returns key", lang: "en", key: "unknown", want: "unknown"},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
if got := l10n.Translate(tt.lang, tt.key); got != tt.want {
|
||||
t.Fatalf("unexpected translation: got %q want %q", got, tt.want)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestL10nAddDictEntryCopiesInput(t *testing.T) {
|
||||
l10n := NewL10n("en")
|
||||
entry := DictEntry{"en": "Hello"}
|
||||
|
||||
l10n.AddDictEntry("greeting", entry)
|
||||
entry["en"] = "Mutated"
|
||||
|
||||
if got := l10n.Translate("en", "greeting"); got != "Hello" {
|
||||
t.Fatalf("unexpected translation after external mutation: got %q", got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestL10nZeroValueIsUsable(t *testing.T) {
|
||||
var l10n L10n
|
||||
|
||||
l10n.AddDictEntry("greeting", DictEntry{"en": "Hello"})
|
||||
|
||||
if got := l10n.Translate("en", "greeting"); got != "Hello" {
|
||||
t.Fatalf("unexpected translation from zero-value l10n: got %q", got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestL10nConcurrentAccess(t *testing.T) {
|
||||
l10n := NewL10n("en")
|
||||
l10n.AddDictEntry("base", DictEntry{"en": "Hello"})
|
||||
|
||||
var wg sync.WaitGroup
|
||||
for i := 0; i < 8; i++ {
|
||||
wg.Add(1)
|
||||
go func(i int) {
|
||||
defer wg.Done()
|
||||
for j := 0; j < 100; j++ {
|
||||
l10n.AddDictEntry(fmt.Sprintf("key-%d-%d", i, j), DictEntry{"en": "value"})
|
||||
_ = l10n.Translate("en", "base")
|
||||
}
|
||||
}(i)
|
||||
}
|
||||
wg.Wait()
|
||||
|
||||
if got := l10n.Translate("en", "base"); got != "Hello" {
|
||||
t.Fatalf("unexpected translation after concurrent access: got %q", got)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user