Files
wangjia 40760aa884
ci / server (push) Failing after 14s
ci / design-tokens (push) Failing after 11s
dudu MVP:五端语音输入法初始提交
- server:Go 网关(WS 流式识别中继/计费配额/微信登录支付 mock/反馈/埋点),gummy provider 已真实联调
- desktop:Tauri 2(全局快捷键 push-to-talk/浮层/托盘/设置/登录购买/反馈/首启引导)
- android:Compose 主 App + IME(键盘内录音直传)
- ios:App + 键盘扩展(1A spike 实证键盘内不可录音,走 deep link 听写)
- design/design-pipeline:设计系统 + token 导出 iOS/Android 主题
- doc:前后端设计文档(HTML);web:官网宣传页;todo:任务看板

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-12 00:38:37 +08:00

45 lines
907 B
Go

package asr
import (
"context"
"strings"
"testing"
"dudu/server/pkg/protocol"
)
func TestMockProviderStreams(t *testing.T) {
p := NewMock()
p.Script = []string{"你好,世界。"}
s, err := p.StartSession(context.Background(), SessionConfig{SampleRate: 16000})
if err != nil {
t.Fatal(err)
}
frame := make([]byte, protocol.FrameBytes)
for i := 0; i < 10; i++ { // 1s 音频 = 10 帧 → 全句 6 字识别完
if err := s.SendAudio(frame); err != nil {
t.Fatal(err)
}
}
if err := s.Close(); err != nil {
t.Fatal(err)
}
var finals []string
partials := 0
for r := range s.Results() {
if r.IsFinal {
finals = append(finals, r.Text)
} else {
partials++
}
}
got := strings.Join(finals, "")
if got != "你好,世界。" {
t.Fatalf("final text mismatch: %q (finals=%v)", got, finals)
}
if partials == 0 {
t.Fatal("expect partial results before finals")
}
}