blob: 91c8af70325c2fdfa88f6fcc7978bb1e34f4fbf7 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
|
;;; test-music-config--get-m3u-basenames.el --- Tests for M3U basename extraction -*- coding: utf-8; lexical-binding: t; -*-
;;
;; Author: Craig Jennings <c@cjennings.net>
;;
;;; Commentary:
;; Unit tests for cj/music--get-m3u-basenames function.
;; Tests the helper that extracts M3U basenames (without .m3u extension).
;;
;; Test organization:
;; - Normal Cases: Multiple files, single file
;; - Boundary Cases: Empty directory, extension removal
;; - Error Cases: Nonexistent directory
;;
;;; Code:
(require 'ert)
(require 'testutil-general)
;; Stub missing dependencies before loading music-config
(defvar-keymap cj/custom-keymap
:doc "Stub keymap for testing")
;; Load production code
(require 'music-config)
;;; Setup & Teardown
(defun test-music-config--get-m3u-basenames-setup ()
"Setup test environment."
(cj/create-test-base-dir))
(defun test-music-config--get-m3u-basenames-teardown ()
"Clean up test environment."
(cj/delete-test-base-dir))
;;; Normal Cases
(ert-deftest test-music-config--get-m3u-basenames-normal-multiple-files-returns-basenames ()
"Extract basenames from multiple M3U files without .m3u extension."
(test-music-config--get-m3u-basenames-setup)
(unwind-protect
(let* ((test-dir (cj/create-test-subdirectory "playlists"))
(file1 (cj/create-temp-test-file-with-content "" "rock.m3u"))
(file2 (cj/create-temp-test-file-with-content "" "jazz.m3u"))
(file3 (cj/create-temp-test-file-with-content "" "classical.m3u")))
(rename-file file1 (expand-file-name "rock.m3u" test-dir))
(rename-file file2 (expand-file-name "jazz.m3u" test-dir))
(rename-file file3 (expand-file-name "classical.m3u" test-dir))
(let ((cj/music-m3u-root test-dir))
(let ((result (cj/music--get-m3u-basenames)))
(should (= (length result) 3))
;; Sort for consistent comparison
(let ((sorted-result (sort result #'string<)))
(should (equal sorted-result '("classical" "jazz" "rock")))))))
(test-music-config--get-m3u-basenames-teardown)))
(ert-deftest test-music-config--get-m3u-basenames-normal-single-file-returns-basename ()
"Extract basename from single M3U file without .m3u extension."
(test-music-config--get-m3u-basenames-setup)
(unwind-protect
(let* ((test-dir (cj/create-test-subdirectory "playlists"))
(file1 (cj/create-temp-test-file-with-content "" "favorites.m3u")))
(rename-file file1 (expand-file-name "favorites.m3u" test-dir))
(let ((cj/music-m3u-root test-dir))
(let ((result (cj/music--get-m3u-basenames)))
(should (= (length result) 1))
(should (equal (car result) "favorites")))))
(test-music-config--get-m3u-basenames-teardown)))
;;; Boundary Cases
(ert-deftest test-music-config--get-m3u-basenames-boundary-empty-directory-returns-empty ()
"Extract basenames from empty directory returns empty list."
(test-music-config--get-m3u-basenames-setup)
(unwind-protect
(let* ((test-dir (cj/create-test-subdirectory "empty-playlists")))
(let ((cj/music-m3u-root test-dir))
(let ((result (cj/music--get-m3u-basenames)))
(should (null result)))))
(test-music-config--get-m3u-basenames-teardown)))
(ert-deftest test-music-config--get-m3u-basenames-boundary-extension-removed ()
"Basenames have .m3u extension removed."
(test-music-config--get-m3u-basenames-setup)
(unwind-protect
(let* ((test-dir (cj/create-test-subdirectory "playlists"))
(file1 (cj/create-temp-test-file-with-content "" "test.m3u")))
(rename-file file1 (expand-file-name "playlist.m3u" test-dir))
(let ((cj/music-m3u-root test-dir))
(let ((result (cj/music--get-m3u-basenames)))
(should (equal result '("playlist")))
;; Verify no .m3u extension present
(should-not (string-match-p "\\.m3u" (car result))))))
(test-music-config--get-m3u-basenames-teardown)))
(ert-deftest test-music-config--get-m3u-basenames-boundary-spaces-in-filename-preserved ()
"Basenames with spaces preserve the spaces."
(test-music-config--get-m3u-basenames-setup)
(unwind-protect
(let* ((test-dir (cj/create-test-subdirectory "playlists"))
(file1 (cj/create-temp-test-file-with-content "" "test.m3u")))
(rename-file file1 (expand-file-name "My Favorite Songs.m3u" test-dir))
(let ((cj/music-m3u-root test-dir))
(let ((result (cj/music--get-m3u-basenames)))
(should (equal result '("My Favorite Songs"))))))
(test-music-config--get-m3u-basenames-teardown)))
;;; Error Cases
(ert-deftest test-music-config--get-m3u-basenames-error-nonexistent-directory-signals-error ()
"Nonexistent directory signals error."
(let ((cj/music-m3u-root "/nonexistent/directory/path"))
(should-error (cj/music--get-m3u-basenames)
:type 'file-error)))
(provide 'test-music-config--get-m3u-basenames)
;;; test-music-config--get-m3u-basenames.el ends here
|