2026-02-20 02:09:08 +00:00
|
|
|
package i18n
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
// --- C() constructor ---
|
|
|
|
|
|
|
|
|
|
func TestC_Good(t *testing.T) {
|
|
|
|
|
ctx := C("navigation")
|
|
|
|
|
require.NotNil(t, ctx)
|
|
|
|
|
assert.Equal(t, "navigation", ctx.Context)
|
|
|
|
|
assert.Equal(t, "navigation", ctx.ContextString())
|
2026-04-02 01:53:57 +00:00
|
|
|
assert.Equal(t, "navigation", ctx.String())
|
2026-04-02 07:59:58 +00:00
|
|
|
assert.Equal(t, 1, ctx.CountInt())
|
|
|
|
|
assert.Equal(t, "1", ctx.CountString())
|
|
|
|
|
assert.False(t, ctx.IsPlural())
|
2026-02-20 02:09:08 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func TestC_Good_EmptyContext(t *testing.T) {
|
|
|
|
|
ctx := C("")
|
|
|
|
|
require.NotNil(t, ctx)
|
|
|
|
|
assert.Equal(t, "", ctx.ContextString())
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// --- Nil receiver safety ---
|
|
|
|
|
|
|
|
|
|
func TestTranslationContext_NilReceiver_Good(t *testing.T) {
|
|
|
|
|
var ctx *TranslationContext
|
|
|
|
|
|
2026-04-02 07:59:58 +00:00
|
|
|
assert.Nil(t, ctx.Count(2))
|
2026-02-20 02:09:08 +00:00
|
|
|
assert.Nil(t, ctx.WithGender("masculine"))
|
2026-04-01 23:53:16 +00:00
|
|
|
assert.Nil(t, ctx.In("workspace"))
|
2026-02-20 02:09:08 +00:00
|
|
|
assert.Nil(t, ctx.Formal())
|
|
|
|
|
assert.Nil(t, ctx.Informal())
|
|
|
|
|
assert.Nil(t, ctx.WithFormality(FormalityFormal))
|
|
|
|
|
assert.Nil(t, ctx.Set("key", "value"))
|
|
|
|
|
assert.Nil(t, ctx.Get("key"))
|
|
|
|
|
assert.Equal(t, "", ctx.ContextString())
|
|
|
|
|
assert.Equal(t, "", ctx.GenderString())
|
2026-04-01 23:53:16 +00:00
|
|
|
assert.Equal(t, "", ctx.LocationString())
|
2026-02-20 02:09:08 +00:00
|
|
|
assert.Equal(t, FormalityNeutral, ctx.FormalityValue())
|
2026-04-02 07:59:58 +00:00
|
|
|
assert.Equal(t, 1, ctx.CountInt())
|
|
|
|
|
assert.Equal(t, "1", ctx.CountString())
|
|
|
|
|
assert.False(t, ctx.IsPlural())
|
2026-02-20 02:09:08 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// --- WithGender ---
|
|
|
|
|
|
|
|
|
|
func TestTranslationContext_WithGender_Good(t *testing.T) {
|
|
|
|
|
ctx := C("test").WithGender("feminine")
|
|
|
|
|
assert.Equal(t, "feminine", ctx.Gender)
|
|
|
|
|
assert.Equal(t, "feminine", ctx.GenderString())
|
|
|
|
|
}
|
|
|
|
|
|
2026-04-01 23:53:16 +00:00
|
|
|
func TestTranslationContext_In_Good(t *testing.T) {
|
|
|
|
|
ctx := C("test").In("workspace")
|
|
|
|
|
assert.Equal(t, "workspace", ctx.Location)
|
|
|
|
|
assert.Equal(t, "workspace", ctx.LocationString())
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func TestTranslationContext_In_Bad_NilReceiver(t *testing.T) {
|
|
|
|
|
var ctx *TranslationContext
|
|
|
|
|
assert.Nil(t, ctx.In("workspace"))
|
|
|
|
|
}
|
|
|
|
|
|
2026-02-20 02:09:08 +00:00
|
|
|
// --- Formal / Informal ---
|
|
|
|
|
|
|
|
|
|
func TestTranslationContext_Formal_Good(t *testing.T) {
|
|
|
|
|
ctx := C("greeting").Formal()
|
|
|
|
|
assert.Equal(t, FormalityFormal, ctx.Formality)
|
|
|
|
|
assert.Equal(t, FormalityFormal, ctx.FormalityValue())
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func TestTranslationContext_Informal_Good(t *testing.T) {
|
|
|
|
|
ctx := C("greeting").Informal()
|
|
|
|
|
assert.Equal(t, FormalityInformal, ctx.Formality)
|
|
|
|
|
assert.Equal(t, FormalityInformal, ctx.FormalityValue())
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// --- WithFormality ---
|
|
|
|
|
|
|
|
|
|
func TestTranslationContext_WithFormality_Good(t *testing.T) {
|
|
|
|
|
tests := []struct {
|
|
|
|
|
name string
|
|
|
|
|
f Formality
|
|
|
|
|
want Formality
|
|
|
|
|
}{
|
|
|
|
|
{"neutral", FormalityNeutral, FormalityNeutral},
|
|
|
|
|
{"formal", FormalityFormal, FormalityFormal},
|
|
|
|
|
{"informal", FormalityInformal, FormalityInformal},
|
|
|
|
|
}
|
|
|
|
|
for _, tt := range tests {
|
|
|
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
|
|
|
ctx := C("test").WithFormality(tt.f)
|
|
|
|
|
assert.Equal(t, tt.want, ctx.FormalityValue())
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2026-04-02 08:12:33 +00:00
|
|
|
func TestTranslationContext_CountString_UsesLocaleFormatting(t *testing.T) {
|
|
|
|
|
svc, err := New()
|
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
prev := Default()
|
|
|
|
|
SetDefault(svc)
|
|
|
|
|
t.Cleanup(func() {
|
|
|
|
|
SetDefault(prev)
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
require.NoError(t, SetLanguage("fr"))
|
|
|
|
|
|
|
|
|
|
ctx := C("test").Count(1234)
|
|
|
|
|
assert.Equal(t, "1 234", ctx.CountString())
|
|
|
|
|
}
|
|
|
|
|
|
2026-02-20 02:09:08 +00:00
|
|
|
// --- Set / Get ---
|
|
|
|
|
|
|
|
|
|
func TestTranslationContext_SetGet_Good(t *testing.T) {
|
|
|
|
|
ctx := C("test").
|
|
|
|
|
Set("region", "europe").
|
|
|
|
|
Set("audience", "developers")
|
|
|
|
|
|
|
|
|
|
assert.Equal(t, "europe", ctx.Get("region"))
|
|
|
|
|
assert.Equal(t, "developers", ctx.Get("audience"))
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func TestTranslationContext_Get_Bad_MissingKey(t *testing.T) {
|
|
|
|
|
ctx := C("test")
|
|
|
|
|
assert.Nil(t, ctx.Get("nonexistent"), "Get on empty Extra should return nil")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func TestTranslationContext_Get_Bad_NilExtra(t *testing.T) {
|
|
|
|
|
ctx := &TranslationContext{Context: "test"}
|
|
|
|
|
assert.Nil(t, ctx.Get("anything"), "Get on nil Extra should return nil")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// --- Full chaining ---
|
|
|
|
|
|
|
|
|
|
func TestTranslationContext_FullChain_Good(t *testing.T) {
|
|
|
|
|
ctx := C("medical").
|
2026-04-02 07:59:58 +00:00
|
|
|
Count(3).
|
2026-02-20 02:09:08 +00:00
|
|
|
WithGender("feminine").
|
2026-04-01 23:53:16 +00:00
|
|
|
In("clinic").
|
2026-02-20 02:09:08 +00:00
|
|
|
Formal().
|
|
|
|
|
Set("speciality", "cardiology")
|
|
|
|
|
|
|
|
|
|
assert.Equal(t, "medical", ctx.ContextString())
|
2026-04-02 07:59:58 +00:00
|
|
|
assert.Equal(t, 3, ctx.CountInt())
|
|
|
|
|
assert.Equal(t, "3", ctx.CountString())
|
|
|
|
|
assert.True(t, ctx.IsPlural())
|
2026-02-20 02:09:08 +00:00
|
|
|
assert.Equal(t, "feminine", ctx.GenderString())
|
2026-04-01 23:53:16 +00:00
|
|
|
assert.Equal(t, "clinic", ctx.LocationString())
|
2026-02-20 02:09:08 +00:00
|
|
|
assert.Equal(t, FormalityFormal, ctx.FormalityValue())
|
|
|
|
|
assert.Equal(t, "cardiology", ctx.Get("speciality"))
|
|
|
|
|
}
|