Ariver
2026-06-30 ac31349b32d89b2798cd20224fcdede91d6bfe05
privatevoice.src/internal/modelselection/selection_test.go
@@ -40,6 +40,43 @@
   }
}
func TestResolveAutoUsesEuropeanDefaultModel(t *testing.T) {
   cfg := config.Default()
   cfg.LanguageMode = config.LanguageModeAuto
   cfg.ModelSelectionMode = config.ModelSelectionModeAuto
   current := Resolve(cfg, fakeDetector{locale: "fr-FR"})
   if current.ModelID != model.ParakeetV3ModelID {
      t.Fatalf("model id = %q, want %q", current.ModelID, model.ParakeetV3ModelID)
   }
   if current.Profile.BackendKind != model.BackendNemoTransducer {
      t.Fatalf("backend = %q, want %q", current.Profile.BackendKind, model.BackendNemoTransducer)
   }
}
func TestResolveAutoUsesJapaneseAndKoreanDefaults(t *testing.T) {
   tests := []struct {
      locale  string
      modelID string
   }{
      {"ja-JP", model.JapaneseModelID},
      {"ko-KR", model.KoreanModelID},
   }
   for _, tt := range tests {
      cfg := config.Default()
      cfg.LanguageMode = config.LanguageModeAuto
      cfg.ModelSelectionMode = config.ModelSelectionModeAuto
      current := Resolve(cfg, fakeDetector{locale: tt.locale})
      if current.ModelID != tt.modelID {
         t.Fatalf("%s model id = %q, want %q", tt.locale, current.ModelID, tt.modelID)
      }
      if current.Profile.BackendKind != model.BackendTransducer {
         t.Fatalf("%s backend = %q, want %q", tt.locale, current.Profile.BackendKind, model.BackendTransducer)
      }
   }
}
func TestResolveOldConfigMissingSelectionModeUsesAuto(t *testing.T) {
   cfg := config.Default()
   cfg.LanguageMode = config.LanguageModeAuto
@@ -68,6 +105,9 @@
}
func TestResolveManualUsesQwen3ASRForChinese(t *testing.T) {
   if !model.IsModelSupportedInCurrentBuild(model.Qwen3ASRModelID) {
      t.Skip("qwen3-asr is disabled in this build")
   }
   cfg := config.Default()
   cfg.LanguageMode = config.LanguageModeAuto
   cfg.ModelSelectionMode = config.ModelSelectionModeManual
@@ -76,6 +116,48 @@
   current := Resolve(cfg, fakeDetector{locale: "zh-CN"})
   if current.ModelID != model.Qwen3ASRModelID {
      t.Fatalf("model id = %q, want manual selected %q", current.ModelID, model.Qwen3ASRModelID)
   }
}
func TestResolveManualQwen3ASRFallsBackWhenUnsupported(t *testing.T) {
   if model.IsModelSupportedInCurrentBuild(model.Qwen3ASRModelID) {
      t.Skip("qwen3-asr is supported in this build")
   }
   cfg := config.Default()
   cfg.LanguageMode = config.LanguageModeAuto
   cfg.ModelSelectionMode = config.ModelSelectionModeManual
   cfg.SelectedModelID = model.Qwen3ASRModelID
   current := Resolve(cfg, fakeDetector{locale: "zh-CN"})
   if current.ModelID != model.DefaultModelID {
      t.Fatalf("model id = %q, want fallback %q", current.ModelID, model.DefaultModelID)
   }
   if current.FallbackReason != "manual model not supported in current build" {
      t.Fatalf("fallback reason = %q, want unsupported build reason", current.FallbackReason)
   }
}
func TestResolveManualUsesXASRForChinese(t *testing.T) {
   cfg := config.Default()
   cfg.LanguageMode = config.LanguageModeAuto
   cfg.ModelSelectionMode = config.ModelSelectionModeManual
   cfg.SelectedModelID = model.XASRZhEn960ModelID
   current := Resolve(cfg, fakeDetector{locale: "zh-CN"})
   if current.ModelID != model.XASRZhEn960ModelID {
      t.Fatalf("model id = %q, want manual selected %q", current.ModelID, model.XASRZhEn960ModelID)
   }
}
func TestResolveManualUsesXASRForEnglish(t *testing.T) {
   cfg := config.Default()
   cfg.LanguageMode = config.LanguageModeAuto
   cfg.ModelSelectionMode = config.ModelSelectionModeManual
   cfg.SelectedModelID = model.XASRZhEn960ModelID
   current := Resolve(cfg, fakeDetector{locale: "en-US"})
   if current.ModelID != model.XASRZhEn960ModelID {
      t.Fatalf("model id = %q, want manual selected %q", current.ModelID, model.XASRZhEn960ModelID)
   }
}
@@ -109,6 +191,21 @@
   }
}
func TestResolveManualParakeetV3FallsBackForJapanese(t *testing.T) {
   cfg := config.Default()
   cfg.LanguageMode = config.LanguageModeAuto
   cfg.ModelSelectionMode = config.ModelSelectionModeManual
   cfg.SelectedModelID = model.ParakeetV3ModelID
   current := Resolve(cfg, fakeDetector{locale: "ja-JP"})
   if current.ModelID != model.JapaneseModelID {
      t.Fatalf("model id = %q, want Japanese default %q", current.ModelID, model.JapaneseModelID)
   }
   if current.FallbackReason == "" {
      t.Fatal("expected fallback reason")
   }
}
func TestResolveInvalidManualFallsBackToLanguageDefault(t *testing.T) {
   cfg := config.Default()
   cfg.LanguageMode = config.LanguageModeAuto