From fdc63ea6675709d6ca42362b1be1918f8bf24478 Mon Sep 17 00:00:00 2001 From: Craig Jennings Date: Wed, 1 Apr 2026 08:13:33 -0500 Subject: feat(music): add test coverage for 7 functions, refactor with extracted helpers 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. --- tests/test-music-config--ensure-playlist-buffer.el | 106 +++++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 tests/test-music-config--ensure-playlist-buffer.el (limited to 'tests/test-music-config--ensure-playlist-buffer.el') diff --git a/tests/test-music-config--ensure-playlist-buffer.el b/tests/test-music-config--ensure-playlist-buffer.el new file mode 100644 index 00000000..b7f9a8b7 --- /dev/null +++ b/tests/test-music-config--ensure-playlist-buffer.el @@ -0,0 +1,106 @@ +;;; test-music-config--ensure-playlist-buffer.el --- Tests for playlist buffer creation -*- coding: utf-8; lexical-binding: t; -*- +;; +;; Author: Craig Jennings +;; +;;; Commentary: +;; Unit tests for cj/music--ensure-playlist-buffer function. +;; Tests buffer creation, mode setup, and global variable assignment. +;; +;; Test organization: +;; - Normal Cases: Creates new buffer, returns existing buffer +;; - Boundary Cases: Wrong mode gets corrected, sets global variable +;; - Error Cases: Killed buffer gets recreated, returns live buffer +;; +;;; Code: + +(require 'ert) + +;; 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-ensure--teardown () + "Clean up test playlist buffer." + (when-let ((buf (get-buffer cj/music-playlist-buffer-name))) + (kill-buffer buf))) + +;;; Normal Cases + +(ert-deftest test-music-config--ensure-playlist-buffer-normal-creates-buffer-when-none-exists () + "Creates a new playlist buffer when none exists." + (unwind-protect + (progn + ;; Kill any existing buffer + (when-let ((buf (get-buffer cj/music-playlist-buffer-name))) + (kill-buffer buf)) + (let ((result (cj/music--ensure-playlist-buffer))) + (should (bufferp result)) + (should (buffer-live-p result)) + (should (equal (buffer-name result) cj/music-playlist-buffer-name)))) + (test-ensure--teardown))) + +(ert-deftest test-music-config--ensure-playlist-buffer-normal-returns-existing-buffer () + "Returns existing buffer without recreating it." + (unwind-protect + (let* ((buf1 (cj/music--ensure-playlist-buffer)) + (buf2 (cj/music--ensure-playlist-buffer))) + (should (eq buf1 buf2))) + (test-ensure--teardown))) + +;;; Boundary Cases + +(ert-deftest test-music-config--ensure-playlist-buffer-boundary-wrong-mode-corrected () + "Buffer in wrong mode gets corrected to emms-playlist-mode." + (unwind-protect + (progn + ;; Create buffer in fundamental-mode + (let ((buf (get-buffer-create cj/music-playlist-buffer-name))) + (with-current-buffer buf + (fundamental-mode))) + (let ((result (cj/music--ensure-playlist-buffer))) + (with-current-buffer result + (should (eq major-mode 'emms-playlist-mode))))) + (test-ensure--teardown))) + +(ert-deftest test-music-config--ensure-playlist-buffer-boundary-sets-global-variable () + "Sets emms-playlist-buffer to the returned buffer." + (unwind-protect + (let ((result (cj/music--ensure-playlist-buffer))) + (should (eq emms-playlist-buffer result))) + (test-ensure--teardown))) + +(ert-deftest test-music-config--ensure-playlist-buffer-boundary-sets-buffer-local-flag () + "Sets emms-playlist-buffer-p to t in the buffer." + (unwind-protect + (let ((result (cj/music--ensure-playlist-buffer))) + (with-current-buffer result + (should (eq emms-playlist-buffer-p t)))) + (test-ensure--teardown))) + +;;; Error Cases + +(ert-deftest test-music-config--ensure-playlist-buffer-error-killed-buffer-recreated () + "After buffer is killed, calling again creates a new live buffer." + (unwind-protect + (progn + (let ((buf1 (cj/music--ensure-playlist-buffer))) + (kill-buffer buf1)) + (let ((buf2 (cj/music--ensure-playlist-buffer))) + (should (buffer-live-p buf2)) + (should (equal (buffer-name buf2) cj/music-playlist-buffer-name)))) + (test-ensure--teardown))) + +(provide 'test-music-config--ensure-playlist-buffer) +;;; test-music-config--ensure-playlist-buffer.el ends here -- cgit v1.2.3