package echomeet import ( "testing" "yunyan/comm" ) // langsOf 是能力清单下发的核心口径,容易被后续改动带偏,这里把三条约定钉死: // 按编排顺序合并、大小写不敏感去重且保留后台原写法、不限语言的服务只置 anyLang 不进列表。 func TestLangsOf(t *testing.T) { c := &providersComp{snap: &orchSnapshot{Services: map[string]*resolvedSvc{ "asr_a": {SvcId: "asr_a", Languages: []string{"zh-CN", "en-US"}}, "asr_b": {SvcId: "asr_b", Languages: []string{"EN-us", "ja-JP"}}, // 与 asr_a 的 en-US 重复(大小写不同) "asr_c": {SvcId: "asr_c"}, // 未配 languages = 不限 "asr_no": {SvcId: "asr_no", Languages: []string{"ko-KR"}}, // 实例没构建成功,不该出现 }}} list := []*comm.EchoOrchestration{ {SvcId: "asr_a"}, {SvcId: "asr_b"}, {SvcId: "asr_no"}, {SvcId: "missing"}, } available := func(id string) bool { return id != "asr_no" } langs, anyLang := c.langsOf(list, available) want := []string{"zh-CN", "en-US", "ja-JP"} if len(langs) != len(want) { t.Fatalf("语言数量 = %v,期望 %v", langs, want) } for i, w := range want { if langs[i] != w { t.Fatalf("langs[%d] = %s,期望 %s(顺序应随编排优先级,写法保留后台原值)", i, langs[i], w) } } if anyLang { t.Fatalf("列表里没有不限语言的服务,anyLang 应为 false") } // 加入未配 languages 的服务:anyLang 置位,但它本身不往列表里塞东西。 langs2, anyLang2 := c.langsOf(append(list, &comm.EchoOrchestration{SvcId: "asr_c"}), available) if !anyLang2 { t.Fatalf("存在未配 languages 的服务时 anyLang 应为 true") } if len(langs2) != len(want) { t.Fatalf("不限语言的服务不应改变语言列表,得到 %v", langs2) } }