Files
MeBox/internal/service/reader/rule/zh_convert_test.go
T
truewhile 2c6646beea bug处理
2026-10-02 15:14:36 +08:00

67 lines
1.9 KiB
Go

package rule
import (
"strings"
"testing"
)
// TestZhToSimplified 常用繁体字要真的转成简体。
// 这是书源里 java.t2s(key) / java.t2s(result) 的语义:阅读 App 会转换,
// 不实现时繁体站点既搜不到(关键字没转)也显示不对(标题保持繁体)。
func TestZhToSimplified(t *testing.T) {
cases := map[string]string{
"島忍者神龜": "岛忍者神龟",
"航海王": "航海王",
"我們的書": "我们的书",
"學習園地": "学习园地",
"": "",
"abc123": "abc123", // 非中文原样返回
}
for in, want := range cases {
if got := zhToSimplified(in); got != want {
t.Errorf("zhToSimplified(%q) = %q,期望 %q", in, got, want)
}
}
}
// TestZhToTraditional 反向转换。
func TestZhToTraditional(t *testing.T) {
cases := map[string]string{
"岛忍者神龟": "島忍者神龜",
"我们的书": "我們的書",
"学习园地": "學習園地",
"": "",
}
for in, want := range cases {
if got := zhToTraditional(in); got != want {
t.Errorf("zhToTraditional(%q) = %q,期望 %q", in, got, want)
}
}
}
// TestZhConvertLeavesPlainTextAlone 不需要转换的文本必须原样返回(含表情/符号)。
func TestZhConvertLeavesPlainTextAlone(t *testing.T) {
const s = "第1话 ROMANCE DAWN 冒险的序幕 🏴‍☠️"
if got := zhToSimplified(s); got != s {
t.Fatalf("zhToSimplified 改动了无需转换的文本: %q", got)
}
}
// TestZhDictParsed 词典要真的解析出来了(防止生成文件被截断)。
func TestZhDictParsed(t *testing.T) {
zhInit()
if len(zhT2S) < 3000 {
t.Fatalf("t2s 词典条目 %d,明显偏少", len(zhT2S))
}
if len(zhS2T) < 3000 {
t.Fatalf("s2t 词典条目 %d,明显偏少", len(zhS2T))
}
// 空格/竖线不属于任何键
if _, ok := zhT2S[' ']; ok {
t.Fatal("词典里混进了分隔符")
}
if strings.ContainsRune(zhT2SData, '\uFFFD') {
t.Fatal("词典数据含替换符,生成过程有损")
}
}