Files

76 lines
1.9 KiB
Go

package common
import (
"encoding/json"
"testing"
)
func parse(t *testing.T, s string) []string {
t.Helper()
var out []string
if err := json.Unmarshal([]byte(s), &out); err != nil {
t.Fatalf("拼音 JSON 解析失败: %v", err)
}
return out
}
func TestAnnotatePinyin_IdiomOverride(t *testing.T) {
// 词表命中整体转拼音(带声调)
pys := parse(t, AnnotatePinyin("声东击西"))
want := []string{"shēng", "dōng", "jī", "xī"}
if len(pys) != len(want) {
t.Fatalf("长度 %d != %d: %v", len(pys), len(want), pys)
}
for i := range want {
if pys[i] != want[i] {
t.Fatalf("第 %d 字 %q != %q", i, pys[i], want[i])
}
}
}
func TestAnnotatePinyin_Alignment(t *testing.T) {
// 逐字对齐:标点/非汉字对应空串
pys := parse(t, AnnotatePinyin("小明,你好!"))
want := []string{"xiǎo", "míng", "", "nǐ", "hǎo", ""}
if len(pys) != len(want) {
t.Fatalf("长度 %d != %d: %v", len(pys), len(want), pys)
}
for i := range want {
if pys[i] != want[i] {
t.Fatalf("第 %d 字 %q != %q", i, pys[i], want[i])
}
}
}
func TestAnnotatePinyin_NonHan(t *testing.T) {
pys := parse(t, AnnotatePinyin("123abc"))
if len(pys) != 6 {
t.Fatalf("长度应 6,实际 %d", len(pys))
}
for i, p := range pys {
if p != "" {
t.Fatalf("第 %d 字符应空串,实际 %q", i, p)
}
}
}
func TestAnnotatePinyin_Empty(t *testing.T) {
if AnnotatePinyin("") != "[]" {
t.Fatal("空文本应返回 []")
}
}
func TestAnnotatePinyin_MissingDictRune(t *testing.T) {
// 词典缺失字(兙 在 CJK 范围但 go-pinyin 词典未收录)保持空串,后续字不错位
pys := parse(t, AnnotatePinyin("兙好"))
want := []string{"", "hǎo"}
if len(pys) != len(want) {
t.Fatalf("长度 %d != %d: %v", len(pys), len(want), pys)
}
for i := range want {
if pys[i] != want[i] {
t.Fatalf("第 %d 字 %q != %q", i, pys[i], want[i])
}
}
}