refactor: 迁移至 bashly CLI 与功能域模块结构
- CLI 定义迁移至 src/bashly.yml(bashly 1.4 生成参数解析),入口收敛为 src/root_command.sh - 源码按功能域重组:config/storage/integrate/media/pipeline,消除扁平散落 - 新增零依赖测试框架 tests/(123 用例)与 CI 流水线(lint + test + build + 产物一致性) - build.sh 支持版本单一来源注入与 --check 产物校验;新增 lint.sh(bash -n + shellcheck 零容忍) - 删除旧单文件 media_organizer.sh 与旧扁平模块
This commit is contained in:
1 parent
d978a13a83
commit
0df07ad0ae
48 files changed
+5813
-6812
No files matched your search
@@ -0,0 +1,108 @@
|
||||
# ============================================================================
|
||||
# 匹配规则测试(src/lib/rules.sh):match_rules.json 加载与查询
|
||||
# ============================================================================
|
||||
|
||||
setup() {
|
||||
TEST_DIR="$(mktemp -d)"
|
||||
AUTOMATED=true # 跳过交互创建
|
||||
load_match_rules "$TEST_DIR/match_rules.json"
|
||||
}
|
||||
|
||||
teardown() {
|
||||
rm -rf "$TEST_DIR"
|
||||
}
|
||||
|
||||
# load_match_rules:搜索别名(字符串与对象形式)+ ID 映射
|
||||
test_load_match_rules_basic() {
|
||||
cat >"$TEST_DIR/match_rules.json" <<'EOF'
|
||||
{
|
||||
"search_aliases": {
|
||||
"俺妹": "Ore no Imouto ga Konna ni Kawaii Wake ga Nai",
|
||||
"路人女主剧场版": {"term": "Saekano the Movie", "year": "2019"}
|
||||
},
|
||||
"id_maps": {
|
||||
"movie": {"刀剑神域": 20982},
|
||||
"tv": {"魔法禁书目录": 4654}
|
||||
}
|
||||
}
|
||||
EOF
|
||||
load_match_rules "$TEST_DIR/match_rules.json"
|
||||
# 别名:字符串形式(无 year)与对象形式(带 year)
|
||||
assert_eq "Ore no Imouto ga Konna ni Kawaii Wake ga Nai " \
|
||||
"$(match_rule_lookup_alias "俺妹")"
|
||||
assert_eq "Saekano the Movie 2019" \
|
||||
"$(match_rule_lookup_alias "路人女主剧场版")"
|
||||
# ID 映射:movie/tv 分表,键归一化后命中
|
||||
assert_eq "20982" "${MATCH_RULES_ID_MOVIE[刀剑神域]:-}"
|
||||
assert_eq "4654" "${MATCH_RULES_ID_TV[魔法禁书目录]:-}"
|
||||
# 未命中
|
||||
assert_empty "$(match_rule_lookup_alias "不存在的标题")"
|
||||
assert_empty "${MATCH_RULES_ID_MOVIE[不存在的标题]:-}"
|
||||
assert_empty "${MATCH_RULES_ID_TV[不存在的标题]:-}"
|
||||
}
|
||||
|
||||
# load_match_rules:键归一化(大小写/空白)后命中
|
||||
test_load_match_rules_key_normalized() {
|
||||
cat >"$TEST_DIR/match_rules.json" <<'EOF'
|
||||
{
|
||||
"search_aliases": {
|
||||
"Sword Art Online": "ソードアート・オンライン"
|
||||
},
|
||||
"id_maps": {
|
||||
"movie": {"A B": 1}
|
||||
}
|
||||
}
|
||||
EOF
|
||||
load_match_rules "$TEST_DIR/match_rules.json"
|
||||
assert_eq "ソードアート・オンライン " "$(match_rule_lookup_alias "sword art online")"
|
||||
assert_eq "1" "${MATCH_RULES_ID_MOVIE[a b]:-}"
|
||||
}
|
||||
|
||||
# load_match_rules:文件缺失 → 空规则(不报错)
|
||||
test_load_match_rules_missing_file() {
|
||||
assert_eq "0" "${#MATCH_RULES_ALIAS_TERM[@]}"
|
||||
assert_empty "$(match_rule_lookup_alias "任意标题")"
|
||||
}
|
||||
|
||||
# load_match_rules:非 JSON 对象 → 空规则 + 不阻断
|
||||
test_load_match_rules_invalid_json() {
|
||||
echo 'not json' >"$TEST_DIR/match_rules.json"
|
||||
load_match_rules "$TEST_DIR/match_rules.json"
|
||||
assert_eq "0" "${#MATCH_RULES_ALIAS_TERM[@]}"
|
||||
assert_eq "0" "${#MATCH_RULES_ID_MOVIE[@]}"
|
||||
}
|
||||
|
||||
# load_match_rules:空别名 term 的条目跳过(不产生空键)
|
||||
test_load_match_rules_empty_term_skipped() {
|
||||
cat >"$TEST_DIR/match_rules.json" <<'EOF'
|
||||
{
|
||||
"search_aliases": {
|
||||
"空词": ""
|
||||
},
|
||||
"id_maps": {
|
||||
"tv": {"空ID": ""}
|
||||
}
|
||||
}
|
||||
EOF
|
||||
load_match_rules "$TEST_DIR/match_rules.json"
|
||||
assert_eq "0" "${#MATCH_RULES_ALIAS_TERM[@]}"
|
||||
assert_eq "0" "${#MATCH_RULES_ID_TV[@]}"
|
||||
}
|
||||
|
||||
# init_match_rules:自动化模式 + 文件缺失 → 不创建、空规则
|
||||
test_init_match_rules_automated_missing() {
|
||||
MATCH_RULES_FILE="$TEST_DIR/nonexistent/match_rules.json"
|
||||
init_match_rules "$MATCH_RULES_FILE"
|
||||
assert_file_absent "$MATCH_RULES_FILE"
|
||||
assert_eq "0" "${#MATCH_RULES_ALIAS_TERM[@]}"
|
||||
}
|
||||
|
||||
# init_match_rules:文件存在 → 正常加载
|
||||
test_init_match_rules_existing() {
|
||||
cat >"$TEST_DIR/rules.json" <<'EOF'
|
||||
{"search_aliases": {"别名": "Term"}, "id_maps": {"movie": {"影": 9}}}
|
||||
EOF
|
||||
init_match_rules "$TEST_DIR/rules.json"
|
||||
assert_eq "Term " "$(match_rule_lookup_alias "别名")"
|
||||
assert_eq "9" "${MATCH_RULES_ID_MOVIE[影]:-}"
|
||||
}
|
||||
Reference in new issue
Block a user