- 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 与旧扁平模块
76 lines
2.9 KiB
Bash
76 lines
2.9 KiB
Bash
# ============================================================================
|
||
# 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")"
|
||
}
|