go-i18n/core_service_test.go
Virgil 5dc9847eec
All checks were successful
Security Scan / security (push) Successful in 15s
Test / test (push) Successful in 2m24s
refactor(i18n): centralise default state snapshot
Co-Authored-By: Virgil <virgil@lethean.io>
2026-04-02 13:20:34 +00:00

76 lines
2.2 KiB
Go

package i18n
import (
"testing"
"dappco.re/go/core"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestCoreServiceNilSafe(t *testing.T) {
var svc *CoreService
savedDefault := defaultService.Load()
t.Cleanup(func() {
defaultService.Store(savedDefault)
})
defaultService.Store(nil)
assert.NotPanics(t, func() {
assert.Equal(t, ModeNormal, svc.Mode())
assert.Equal(t, "en", svc.Language())
assert.Equal(t, "en", svc.Fallback())
assert.Equal(t, FormalityNeutral, svc.Formality())
assert.Equal(t, "", svc.Location())
assert.False(t, svc.Debug())
assert.Equal(t, DirLTR, svc.Direction())
assert.False(t, svc.IsRTL())
assert.Equal(t, PluralOther, svc.PluralCategory(3))
assert.Empty(t, svc.AvailableLanguages())
assert.Empty(t, svc.Handlers())
assert.Equal(t, "prompt.confirm", svc.Prompt("confirm"))
assert.Equal(t, "lang.fr", svc.Lang("fr"))
assert.Equal(t, "hello", svc.T("hello"))
assert.Equal(t, "hello", svc.Raw("hello"))
assert.Equal(t, core.Result{Value: "hello", OK: false}, svc.Translate("hello"))
assert.Equal(t, defaultServiceStateSnapshot(), svc.State())
assert.Equal(t, defaultServiceStateSnapshot(), svc.CurrentState())
})
assert.Nil(t, defaultService.Load())
assert.NoError(t, svc.OnStartup(nil))
svc.SetMode(ModeCollect)
svc.SetFallback("fr")
svc.SetFormality(FormalityFormal)
svc.SetLocation("workspace")
svc.SetDebug(true)
svc.SetHandlers(nil)
svc.AddHandler(nil)
svc.PrependHandler(nil)
svc.ClearHandlers()
svc.ResetHandlers()
svc.AddMessages("en", nil)
require.ErrorIs(t, svc.SetLanguage("fr"), ErrServiceNotInitialised)
require.ErrorIs(t, svc.AddLoader(nil), ErrServiceNotInitialised)
require.ErrorIs(t, svc.LoadFS(nil, "locales"), ErrServiceNotInitialised)
}
func TestCoreServiceMissingKeysReturnsCopies(t *testing.T) {
svc, err := New()
require.NoError(t, err)
coreSvc := &CoreService{svc: svc}
coreSvc.SetMode(ModeCollect)
_ = svc.T("missing.copy.key", map[string]any{"foo": "bar"})
missing := coreSvc.MissingKeys()
require.Len(t, missing, 1)
require.Equal(t, "bar", missing[0].Args["foo"])
missing[0].Args["foo"] = "mutated"
again := coreSvc.MissingKeys()
require.Len(t, again, 1)
assert.Equal(t, "bar", again[0].Args["foo"])
}