package language
|
|
import (
|
"testing"
|
|
"voicesnap/internal/config"
|
"voicesnap/internal/model"
|
)
|
|
type fakeDetector struct {
|
locale string
|
}
|
|
func (f fakeDetector) Detect() string {
|
return f.locale
|
}
|
|
func TestNormalizeLocale(t *testing.T) {
|
tests := map[string]string{
|
"zh-CN": model.DefaultLanguageID,
|
"zh_Hans_CN": model.DefaultLanguageID,
|
"en-US": model.EnglishLanguageID,
|
"en_GB.UTF-8": model.EnglishLanguageID,
|
"fr-FR": model.EnglishLanguageID,
|
"": model.EnglishLanguageID,
|
}
|
for input, want := range tests {
|
if got := NormalizeLocale(input); got != want {
|
t.Fatalf("NormalizeLocale(%q) = %q, want %q", input, got, want)
|
}
|
}
|
}
|
|
func TestResolveAutoUsesDetector(t *testing.T) {
|
settings := Resolve(config.LanguageModeAuto, model.DefaultLanguageID, fakeDetector{locale: "en-US"})
|
if settings.EffectiveLanguageID != model.EnglishLanguageID {
|
t.Fatalf("effective language = %q, want %q", settings.EffectiveLanguageID, model.EnglishLanguageID)
|
}
|
if settings.UILocale != "en" {
|
t.Fatalf("ui locale = %q, want en", settings.UILocale)
|
}
|
}
|
|
func TestResolveManualIgnoresDetector(t *testing.T) {
|
settings := Resolve(config.LanguageModeManual, model.DefaultLanguageID, fakeDetector{locale: "en-US"})
|
if settings.EffectiveLanguageID != model.DefaultLanguageID {
|
t.Fatalf("effective language = %q, want %q", settings.EffectiveLanguageID, model.DefaultLanguageID)
|
}
|
if settings.UILocale != "zh" {
|
t.Fatalf("ui locale = %q, want zh", settings.UILocale)
|
}
|
}
|
|
func TestResolveFallsBackInvalidValues(t *testing.T) {
|
settings := Resolve("bad-mode", "bad-language", fakeDetector{locale: "fr-FR"})
|
if settings.LanguageMode != config.LanguageModeAuto {
|
t.Fatalf("mode = %q, want %q", settings.LanguageMode, config.LanguageModeAuto)
|
}
|
if settings.EffectiveLanguageID != model.EnglishLanguageID {
|
t.Fatalf("effective language = %q, want %q", settings.EffectiveLanguageID, model.EnglishLanguageID)
|
}
|
}
|
|
func TestResolveOptionsAreStable(t *testing.T) {
|
settings := Resolve(config.LanguageModeAuto, model.DefaultLanguageID, fakeDetector{locale: "zh-CN"})
|
if len(settings.Options) != 2 {
|
t.Fatalf("options len = %d, want 2", len(settings.Options))
|
}
|
if settings.Options[0].ID != model.DefaultLanguageID {
|
t.Fatalf("first option = %q, want %q", settings.Options[0].ID, model.DefaultLanguageID)
|
}
|
if settings.Options[1].ID != model.EnglishLanguageID {
|
t.Fatalf("second option = %q, want %q", settings.Options[1].ID, model.EnglishLanguageID)
|
}
|
}
|