diff options
| author | Craig Jennings <c@cjennings.net> | 2026-04-01 08:13:33 -0500 |
|---|---|---|
| committer | Craig Jennings <c@cjennings.net> | 2026-04-01 08:13:33 -0500 |
| commit | fdc63ea6675709d6ca42362b1be1918f8bf24478 (patch) | |
| tree | 056dd89c3879b4fd4e928ce8c6772501a7d7ffa5 /tests/test-music-config--assert-valid-playlist-file.el | |
| parent | 0d55edecf82b32b75780f24751dfa8d693b72708 (diff) | |
Add 47 new unit tests across 7 test files covering playlist-modified-p,
assert-valid-playlist-file, playlist-tracks, create-radio-station,
ensure-playlist-buffer, after-playlist-clear, and header-text.
Extract three helpers to reduce duplication: assert-m3u-files-exist (dedupes
2 identical guards), sync-playlist-file (dedupes 3 state-sync patterns),
and select-m3u-file (reusable M3U selection with cancel). Simplify
append-track-to-playlist nesting from 6 to 4 levels. Delete unused
cj/music-keymap-prefix variable.
Diffstat (limited to 'tests/test-music-config--assert-valid-playlist-file.el')
| -rw-r--r-- | tests/test-music-config--assert-valid-playlist-file.el | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/tests/test-music-config--assert-valid-playlist-file.el b/tests/test-music-config--assert-valid-playlist-file.el new file mode 100644 index 00000000..aca0eeb9 --- /dev/null +++ b/tests/test-music-config--assert-valid-playlist-file.el @@ -0,0 +1,131 @@ +;;; test-music-config--assert-valid-playlist-file.el --- Tests for playlist file validation -*- coding: utf-8; lexical-binding: t; -*- +;; +;; Author: Craig Jennings <c@cjennings.net> +;; +;;; Commentary: +;; Unit tests for cj/music--assert-valid-playlist-file function. +;; Tests the validation guard that ensures a playlist buffer has +;; a valid, existing associated M3U file before operations proceed. +;; +;; Test organization: +;; - Normal Cases: Valid file passes without error +;; - Boundary Cases: Empty file, file exists but is empty +;; - Error Cases: Nil file, nonexistent file, deleted file +;; +;;; Code: + +(require 'ert) +(require 'testutil-general) + +;; Stub missing dependencies before loading music-config +(defvar-keymap cj/custom-keymap + :doc "Stub keymap for testing") + +;; Add EMMS elpa directory to load path for batch testing +(let ((emms-dir (car (file-expand-wildcards + (expand-file-name "elpa/emms-*" user-emacs-directory))))) + (when emms-dir + (add-to-list 'load-path emms-dir))) + +(require 'emms) +(require 'emms-playlist-mode) +(require 'music-config) + +;;; Test helpers + +(defun test-assert--setup () + "Create test base dir and ensure playlist buffer exists." + (cj/create-test-base-dir) + (let ((buf (get-buffer-create cj/music-playlist-buffer-name))) + (with-current-buffer buf + (emms-playlist-mode) + (setq emms-playlist-buffer-p t)) + (setq emms-playlist-buffer buf) + buf)) + +(defun test-assert--teardown () + "Clean up test playlist buffer and temp files." + (when-let ((buf (get-buffer cj/music-playlist-buffer-name))) + (with-current-buffer buf + (setq cj/music-playlist-file nil)) + (kill-buffer buf)) + (cj/delete-test-base-dir)) + +;;; Normal Cases + +(ert-deftest test-music-config--assert-valid-playlist-file-normal-existing-file-passes () + "Valid existing file does not signal error." + (test-assert--setup) + (unwind-protect + (let ((file (cj/create-temp-test-file "playlist-"))) + (with-current-buffer (get-buffer cj/music-playlist-buffer-name) + (setq cj/music-playlist-file file)) + ;; Should not error + (cj/music--assert-valid-playlist-file)) + (test-assert--teardown))) + +(ert-deftest test-music-config--assert-valid-playlist-file-normal-file-with-content-passes () + "Valid file with content does not signal error." + (test-assert--setup) + (unwind-protect + (let ((file (cj/create-temp-test-file-with-content "track1.mp3\ntrack2.mp3\n" "playlist-"))) + (with-current-buffer (get-buffer cj/music-playlist-buffer-name) + (setq cj/music-playlist-file file)) + (cj/music--assert-valid-playlist-file)) + (test-assert--teardown))) + +;;; Boundary Cases + +(ert-deftest test-music-config--assert-valid-playlist-file-boundary-empty-file-passes () + "Empty but existing file does not signal error." + (test-assert--setup) + (unwind-protect + (let ((file (cj/create-temp-test-file "playlist-"))) + (with-current-buffer (get-buffer cj/music-playlist-buffer-name) + (setq cj/music-playlist-file file)) + ;; File exists but is empty - should still pass + (cj/music--assert-valid-playlist-file)) + (test-assert--teardown))) + +;;; Error Cases + +(ert-deftest test-music-config--assert-valid-playlist-file-error-nil-file-signals-user-error () + "Nil cj/music-playlist-file signals user-error." + (test-assert--setup) + (unwind-protect + (progn + (with-current-buffer (get-buffer cj/music-playlist-buffer-name) + (setq cj/music-playlist-file nil)) + (should-error (cj/music--assert-valid-playlist-file) + :type 'user-error)) + (test-assert--teardown))) + +(ert-deftest test-music-config--assert-valid-playlist-file-error-nonexistent-file-signals-user-error () + "Nonexistent file path signals user-error." + (test-assert--setup) + (unwind-protect + (progn + (with-current-buffer (get-buffer cj/music-playlist-buffer-name) + (setq cj/music-playlist-file "/nonexistent/path/to/playlist.m3u")) + (should-error (cj/music--assert-valid-playlist-file) + :type 'user-error)) + (test-assert--teardown))) + +(ert-deftest test-music-config--assert-valid-playlist-file-error-deleted-file-signals-user-error () + "File that existed but was deleted signals user-error." + (test-assert--setup) + (unwind-protect + (let ((file (cj/create-temp-test-file "playlist-"))) + (with-current-buffer (get-buffer cj/music-playlist-buffer-name) + (setq cj/music-playlist-file file)) + ;; Verify it passes first + (cj/music--assert-valid-playlist-file) + ;; Now delete the file + (delete-file file) + ;; Should now signal error + (should-error (cj/music--assert-valid-playlist-file) + :type 'user-error)) + (test-assert--teardown))) + +(provide 'test-music-config--assert-valid-playlist-file) +;;; test-music-config--assert-valid-playlist-file.el ends here |
