From 58c2c4ae5eaca3dff127f2ffb15f9dd2b160f994 Mon Sep 17 00:00:00 2001
From: Ariver <shanghai3168@gmail.com>
Date: Sun, 07 Jun 2026 01:45:59 +0800
Subject: [PATCH] Record X-ASR experimental build

---
 privatevoice.src/internal/modelselection/selection_test.go |   70 ++++++++++++++++++++++++++++++++++-
 1 files changed, 68 insertions(+), 2 deletions(-)

diff --git a/privatevoice.src/internal/modelselection/selection_test.go b/privatevoice.src/internal/modelselection/selection_test.go
index 47daac6..409a0fc 100644
--- a/privatevoice.src/internal/modelselection/selection_test.go
+++ b/privatevoice.src/internal/modelselection/selection_test.go
@@ -59,11 +59,77 @@
 	cfg := config.Default()
 	cfg.LanguageMode = config.LanguageModeAuto
 	cfg.ModelSelectionMode = config.ModelSelectionModeManual
-	cfg.SelectedModelID = model.DefaultModelID
+	cfg.SelectedModelID = model.ParakeetModelID
 
 	current := Resolve(cfg, fakeDetector{locale: "en-US"})
+	if current.ModelID != model.ParakeetModelID {
+		t.Fatalf("model id = %q, want manual selected %q", current.ModelID, model.ParakeetModelID)
+	}
+}
+
+func TestResolveManualUsesQwen3ASRForChinese(t *testing.T) {
+	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.Qwen3ASRModelID {
+		t.Fatalf("model id = %q, want manual selected %q", current.ModelID, model.Qwen3ASRModelID)
+	}
+}
+
+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)
+	}
+}
+
+func TestResolveManualModelFallsBackWhenLanguageIncompatible(t *testing.T) {
+	cfg := config.Default()
+	cfg.LanguageMode = config.LanguageModeAuto
+	cfg.ModelSelectionMode = config.ModelSelectionModeManual
+	cfg.SelectedModelID = model.ParakeetModelID
+
+	current := Resolve(cfg, fakeDetector{locale: "zh-CN"})
 	if current.ModelID != model.DefaultModelID {
-		t.Fatalf("model id = %q, want manual selected %q", current.ModelID, model.DefaultModelID)
+		t.Fatalf("model id = %q, want Chinese default %q", current.ModelID, model.DefaultModelID)
+	}
+	if current.FallbackReason == "" {
+		t.Fatal("expected fallback reason")
+	}
+}
+
+func TestResolveManualQwen3ASRFallsBackForEnglish(t *testing.T) {
+	cfg := config.Default()
+	cfg.LanguageMode = config.LanguageModeAuto
+	cfg.ModelSelectionMode = config.ModelSelectionModeManual
+	cfg.SelectedModelID = model.Qwen3ASRModelID
+
+	current := Resolve(cfg, fakeDetector{locale: "en-US"})
+	if current.ModelID != model.MoonshineModelID {
+		t.Fatalf("model id = %q, want English default %q", current.ModelID, model.MoonshineModelID)
+	}
+	if current.FallbackReason == "" {
+		t.Fatal("expected fallback reason")
 	}
 }
 

--
Gitblit v1.9.3