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.FrenchLanguageID,
|
"de-DE": model.GermanLanguageID,
|
"es-MX": model.SpanishLanguageID,
|
"it-IT": model.ItalianLanguageID,
|
"pt-BR": model.PortugueseLanguageID,
|
"ja-JP": model.JapaneseLanguageID,
|
"ko-KR": model.KoreanLanguageID,
|
"": 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.FrenchLanguageID {
|
t.Fatalf("effective language = %q, want %q", settings.EffectiveLanguageID, model.FrenchLanguageID)
|
}
|
if settings.DefaultModelID != model.ParakeetV3ModelID {
|
t.Fatalf("default model = %q, want %q", settings.DefaultModelID, model.ParakeetV3ModelID)
|
}
|
}
|
|
func TestResolveOptionsAreStable(t *testing.T) {
|
settings := Resolve(config.LanguageModeAuto, model.DefaultLanguageID, fakeDetector{locale: "zh-CN"})
|
if len(settings.Options) != 9 {
|
t.Fatalf("options len = %d, want 9", 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)
|
}
|
if settings.Options[2].ID != model.FrenchLanguageID {
|
t.Fatalf("third option = %q, want %q", settings.Options[2].ID, model.FrenchLanguageID)
|
}
|
}
|