go-i18n/transform_test.go

141 lines
3 KiB
Go
Raw Permalink Normal View History

package i18n
import (
"testing"
"github.com/stretchr/testify/assert"
)
// --- getCount ---
func TestGetCount_Good(t *testing.T) {
tests := []struct {
name string
data any
want int
}{
{"nil", nil, 0},
{"map_string_any", map[string]any{"Count": 5}, 5},
{"map_string_any_float", map[string]any{"Count": 3.7}, 3},
{"map_string_int", map[string]int{"Count": 42}, 42},
{"map_string_string", map[string]string{"Count": "9"}, 9},
{"no_count_key", map[string]any{"Name": "test"}, 0},
{"wrong_type", "a string", 0},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got := getCount(tt.data)
assert.Equal(t, tt.want, got)
})
}
}
func TestGetCount_Good_TranslationContextDefault(t *testing.T) {
ctx := C("test")
assert.Equal(t, 1, getCount(ctx))
}
func TestGetCount_Good_TranslationContextExtraCount(t *testing.T) {
ctx := C("test").Set("Count", 3)
assert.Equal(t, 3, getCount(ctx))
}
// --- toInt ---
func TestToInt_Good(t *testing.T) {
tests := []struct {
name string
val any
want int
}{
{"nil", nil, 0},
{"int", int(42), 42},
{"int64", int64(100), 100},
{"int32", int32(200), 200},
{"int16", int16(300), 300},
{"int8", int8(127), 127},
{"uint", uint(10), 10},
{"uint64", uint64(20), 20},
{"uint32", uint32(30), 30},
{"uint16", uint16(40), 40},
{"uint8", uint8(50), 50},
{"float64", float64(3.14), 3},
{"float32", float32(2.71), 2},
{"string_int", "123", 123},
{"string", "not a number", 0},
{"bool", true, 0},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got := toInt(tt.val)
assert.Equal(t, tt.want, got)
})
}
}
// --- toInt64 ---
func TestToInt64_Good(t *testing.T) {
tests := []struct {
name string
val any
want int64
}{
{"nil", nil, 0},
{"int", int(42), 42},
{"int64", int64(100), 100},
{"int32", int32(200), 200},
{"int16", int16(300), 300},
{"int8", int8(127), 127},
{"uint", uint(10), 10},
{"uint64", uint64(20), 20},
{"uint32", uint32(30), 30},
{"uint16", uint16(40), 40},
{"uint8", uint8(50), 50},
{"float64", float64(3.14), 3},
{"float32", float32(2.71), 2},
{"string_int64", "123", 123},
{"string", "not a number", 0},
{"bool", true, 0},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got := toInt64(tt.val)
assert.Equal(t, tt.want, got)
})
}
}
// --- toFloat64 ---
func TestToFloat64_Good(t *testing.T) {
tests := []struct {
name string
val any
want float64
}{
{"nil", nil, 0},
{"float64", float64(3.14), 3.14},
{"float32", float32(2.5), 2.5},
{"int", int(42), 42.0},
{"int64", int64(100), 100.0},
{"int32", int32(200), 200.0},
{"int16", int16(300), 300.0},
{"int8", int8(127), 127.0},
{"uint", uint(10), 10.0},
{"uint64", uint64(20), 20.0},
{"uint32", uint32(30), 30.0},
{"uint16", uint16(40), 40.0},
{"uint8", uint8(50), 50.0},
{"string_float", "3.5", 3.5},
{"string", "not a number", 0},
{"bool", true, 0},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got := toFloat64(tt.val)
assert.InDelta(t, tt.want, got, 0.01)
})
}
}