Files
Shuery 0df07ad0ae 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 与旧扁平模块
2026-08-14 22:41:28 +08:00

76 lines
2.9 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ============================================================================
# Music Videos 类目测试(src/lib/media/filename.sh / identify.sh)
# ============================================================================
setup() {
TEST_DIR="$(mktemp -d)"
SOURCE_DIR="$TEST_DIR"
FOLDER_MUSICVIDEOS="音乐视频"
FOLDER_UNKNOWN="未知"
SPECIAL_WORDS_CAT=()
mapfile -t MUSICVIDEO_WORDS < <(echo "$MUSICVIDEO_WORDS_TEMPLATE" | jq -r '.[]')
mapfile -t SPECIAL_WORDS < <(echo "$SPECIAL_WORDS_TEMPLATE" | jq -r '.[]')
MAIN_COUNT_CACHE=()
VIDEO_EXTS=(mp4 mkv)
}
teardown() {
rm -rf "$TEST_DIR"
}
# detect_musicvideo:目录信号(Music Videos / MV / Live 目录 → musicvideo)
test_musicvideo_dir_signal() {
mkdir -p "$TEST_DIR/Music Videos/周杰伦"
assert_eq "musicvideo|晴天|||||" \
"$(parse_media_filename "$TEST_DIR/Music Videos/周杰伦/晴天 [MV].mkv")"
assert_eq "musicvideo|七里香|||||" \
"$(parse_media_filename "$TEST_DIR/Music Videos/周杰伦/七里香.mp4")"
mkdir -p "$TEST_DIR/Live"
assert_eq "musicvideo|演唱会|||||" \
"$(parse_media_filename "$TEST_DIR/Live/演唱会.mkv")"
}
# detect_musicvideo:文件名信号([MV] + "歌手 - 歌名" 模式 → musicvideo)
test_musicvideo_filename_signal() {
assert_eq "musicvideo|周杰伦 - 晴天|||||" \
"$(parse_media_filename "$TEST_DIR/周杰伦 - 晴天 [MV].mkv")"
assert_eq "musicvideo|歌手 - 歌|||||" \
"$(parse_media_filename "$TEST_DIR/歌手 - 歌 [Live].mkv")"
}
# detect_musicvideo:双命中歧义([MV] 无 " - " → 保持特典路径)
test_musicvideo_dual_hit_keeps_special() {
assert_eq "tv|某动画||0|1||MV" \
"$(parse_media_filename "$TEST_DIR/某动画 [MV].mkv")"
}
# detect_musicvideo:目录名含词但不精确匹配 → 不误判(Muv-Luv / tmp.xxx)
test_musicvideo_dir_exact_match_only() {
assert_eq "tv|Muv-Luv||01|01||" \
"$(parse_media_filename "$TEST_DIR/Muv-Luv S01E01.mkv")"
assert_eq "tv|Show||1|07||" \
"$(parse_media_filename "$TEST_DIR/Show [07].mkv")"
}
# identify_musicvideo:目录名解析 artist("歌手 - 歌名" 取首段;无分隔符整名)
test_identify_musicvideo_artist_from_dir() {
mkdir -p "$TEST_DIR/Music Videos/周杰伦"
assert_eq "音乐视频/周杰伦/晴天|晴天.mkv" \
"$(identify_musicvideo "$TEST_DIR/Music Videos/周杰伦/晴天.mkv" "晴天" mkv)"
mkdir -p "$TEST_DIR/歌手 - 歌名"
assert_eq "音乐视频/歌手/x|x.mkv" \
"$(identify_musicvideo "$TEST_DIR/歌手 - 歌名/x.mkv" "x" mkv)"
}
# identify_musicvideo:无元数据/目录线索 → FOLDER_UNKNOWN 兜底
test_identify_musicvideo_unknown_artist() {
assert_eq "音乐视频/未知/歌|歌.mkv" \
"$(identify_musicvideo "$TEST_DIR/歌.mkv" "歌" mkv)"
}
# fallback_naming:musicvideo 分支(Unknown 艺术家)
test_fallback_naming_musicvideo() {
assert_eq "音乐视频/未知/歌|歌.mkv" \
"$(fallback_naming "musicvideo" "歌" "" "" "" "" "" "mkv")"
}