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) } if settings.DefaultModelID != model.MoonshineModelID { t.Fatalf("default model = %q, want %q", settings.DefaultModelID, model.MoonshineModelID) } } 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) } }