76 lines
1.9 KiB
Go
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])
|
|
}
|
|
}
|
|
}
|