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

54 lines
1.7 KiB
Go

package rule
import (
"strings"
"testing"
)
// TestNumChapter 章节标题里的中文/阿拉伯数字要规整成阿拉伯数字。
// 书源用 java.toNumChapter 统一标题;缺这个函数时整条规则会抛异常(源直接不可用)。
func TestNumChapter(t *testing.T) {
cases := map[string]string{
"第一百零八章": "第108章",
"第十二话": "第12话",
"第3话": "第3话",
"第一话 冒险的序幕": "第1话 冒险的序幕",
"一〇二": "102",
"两千零一": "2001",
"航海王": "航海王", // 没有数字:原样返回
"": "",
}
for in, want := range cases {
if got := numChapter(in); got != want {
t.Errorf("numChapter(%q) = %q,期望 %q", in, got, want)
}
}
}
// TestJavaExtraHelpers 书源 JS 里会直接调用的几个函数必须存在且可用。
func TestJavaExtraHelpers(t *testing.T) {
r := NewJSRunner(JSConfig{})
v, err := r.Run(NewAnalyzeRule(), `java.randomUUID()`, nil, "")
if err != nil {
t.Fatalf("java.randomUUID() 失败: %v", err)
}
id := anyToString(v)
if len(id) != 36 || strings.Count(id, "-") != 4 {
t.Fatalf("randomUUID 返回值不像 UUID: %q", id)
}
v, err = r.Run(NewAnalyzeRule(), `java.toNumChapter('第一百零八章')`, nil, "")
if err != nil {
t.Fatalf("java.toNumChapter() 失败: %v", err)
}
if got := anyToString(v); got != "第108章" {
t.Fatalf("toNumChapter = %q,期望 第108章", got)
}
// 未声明设备能力时 java.deviceID 仍应抛异常(保持「不谎报运行环境」的语义)
if _, err := r.Run(NewAnalyzeRule(), `java.deviceID()`, nil, ""); err == nil {
t.Fatal("java.deviceID() 应当抛异常")
}
}