diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/test-undead-buffers-kill-all-other-buffers-and-windows.el | 159 | ||||
| -rw-r--r-- | tests/test-undead-buffers-kill-buffer-and-window.el | 112 | ||||
| -rw-r--r-- | tests/test-undead-buffers-kill-buffer-or-bury-alive.el | 138 | ||||
| -rw-r--r-- | tests/test-undead-buffers-kill-other-window.el | 123 | ||||
| -rw-r--r-- | tests/test-undead-buffers-make-buffer-undead.el | 134 | ||||
| -rw-r--r-- | tests/test-undead-buffers-undead-buffer-p.el | 106 |
6 files changed, 772 insertions, 0 deletions
diff --git a/tests/test-undead-buffers-kill-all-other-buffers-and-windows.el b/tests/test-undead-buffers-kill-all-other-buffers-and-windows.el new file mode 100644 index 00000000..dcd08e96 --- /dev/null +++ b/tests/test-undead-buffers-kill-all-other-buffers-and-windows.el @@ -0,0 +1,159 @@ +;;; test-undead-buffers-kill-all-other-buffers-and-windows.el --- Tests for cj/kill-all-other-buffers-and-windows -*- lexical-binding: t; -*- + +;;; Commentary: +;; Tests for the cj/kill-all-other-buffers-and-windows function from undead-buffers.el + +;;; Code: + +(require 'ert) +(require 'undead-buffers) +(require 'testutil-general) + +;;; Setup and Teardown + +(defun test-kill-all-other-buffers-and-windows-setup () + "Setup for kill-all-other-buffers-and-windows tests." + (cj/create-test-base-dir) + (delete-other-windows)) + +(defun test-kill-all-other-buffers-and-windows-teardown () + "Teardown for kill-all-other-buffers-and-windows tests." + (delete-other-windows) + (cj/delete-test-base-dir)) + +;;; Normal Cases + +(ert-deftest test-kill-all-other-buffers-and-windows-should-kill-regular-buffers () + "Should kill all regular buffers except current." + (test-kill-all-other-buffers-and-windows-setup) + (unwind-protect + (let ((main (current-buffer)) + (buf1 (generate-new-buffer "*test-regular-1*")) + (buf2 (generate-new-buffer "*test-regular-2*"))) + (unwind-protect + (progn + (should (buffer-live-p buf1)) + (should (buffer-live-p buf2)) + (cj/kill-all-other-buffers-and-windows) + (should (buffer-live-p main)) + (should-not (buffer-live-p buf1)) + (should-not (buffer-live-p buf2))) + (when (buffer-live-p buf1) (kill-buffer buf1)) + (when (buffer-live-p buf2) (kill-buffer buf2)))) + (test-kill-all-other-buffers-and-windows-teardown))) + +(ert-deftest test-kill-all-other-buffers-and-windows-should-bury-undead-buffers () + "Should bury undead buffers instead of killing them." + (test-kill-all-other-buffers-and-windows-setup) + (unwind-protect + (let ((orig (copy-sequence cj/undead-buffer-list)) + (main (current-buffer)) + (buf1 (generate-new-buffer "*test-undead-1*")) + (buf2 (generate-new-buffer "*test-undead-2*"))) + (unwind-protect + (progn + (add-to-list 'cj/undead-buffer-list "*test-undead-1*") + (add-to-list 'cj/undead-buffer-list "*test-undead-2*") + (cj/kill-all-other-buffers-and-windows) + (should (buffer-live-p main)) + (should (buffer-live-p buf1)) + (should (buffer-live-p buf2))) + (setq cj/undead-buffer-list orig) + (when (buffer-live-p buf1) (kill-buffer buf1)) + (when (buffer-live-p buf2) (kill-buffer buf2)))) + (test-kill-all-other-buffers-and-windows-teardown))) + +(ert-deftest test-kill-all-other-buffers-and-windows-should-keep-current-buffer () + "Should always keep the current buffer alive." + (test-kill-all-other-buffers-and-windows-setup) + (unwind-protect + (let ((main (current-buffer))) + (cj/kill-all-other-buffers-and-windows) + (should (buffer-live-p main)) + (should (eq main (current-buffer)))) + (test-kill-all-other-buffers-and-windows-teardown))) + +(ert-deftest test-kill-all-other-buffers-and-windows-should-delete-all-other-windows () + "Should delete all windows except current." + (test-kill-all-other-buffers-and-windows-setup) + (unwind-protect + (progn + (split-window) + (split-window) + (should (> (length (window-list)) 1)) + (cj/kill-all-other-buffers-and-windows) + (should (one-window-p))) + (test-kill-all-other-buffers-and-windows-teardown))) + +;;; Boundary Cases + +(ert-deftest test-kill-all-other-buffers-and-windows-mixed-undead-and-regular-buffers () + "With mix of undead and regular buffers, should handle both correctly." + (test-kill-all-other-buffers-and-windows-setup) + (unwind-protect + (let ((orig (copy-sequence cj/undead-buffer-list)) + (main (current-buffer)) + (regular (generate-new-buffer "*test-regular*")) + (undead (generate-new-buffer "*test-undead*"))) + (unwind-protect + (progn + (add-to-list 'cj/undead-buffer-list "*test-undead*") + (cj/kill-all-other-buffers-and-windows) + (should (buffer-live-p main)) + (should-not (buffer-live-p regular)) + (should (buffer-live-p undead))) + (setq cj/undead-buffer-list orig) + (when (buffer-live-p regular) (kill-buffer regular)) + (when (buffer-live-p undead) (kill-buffer undead)))) + (test-kill-all-other-buffers-and-windows-teardown))) + +(ert-deftest test-kill-all-other-buffers-and-windows-all-undead-buffers-should-bury-all () + "When all other buffers are undead, should bury all of them." + (test-kill-all-other-buffers-and-windows-setup) + (unwind-protect + (let ((orig (copy-sequence cj/undead-buffer-list)) + (main (current-buffer)) + (undead1 (generate-new-buffer "*test-all-undead-1*")) + (undead2 (generate-new-buffer "*test-all-undead-2*")) + (undead3 (generate-new-buffer "*test-all-undead-3*"))) + (unwind-protect + (progn + (add-to-list 'cj/undead-buffer-list "*test-all-undead-1*") + (add-to-list 'cj/undead-buffer-list "*test-all-undead-2*") + (add-to-list 'cj/undead-buffer-list "*test-all-undead-3*") + (cj/kill-all-other-buffers-and-windows) + (should (buffer-live-p main)) + (should (buffer-live-p undead1)) + (should (buffer-live-p undead2)) + (should (buffer-live-p undead3))) + (setq cj/undead-buffer-list orig) + (when (buffer-live-p undead1) (kill-buffer undead1)) + (when (buffer-live-p undead2) (kill-buffer undead2)) + (when (buffer-live-p undead3) (kill-buffer undead3)))) + (test-kill-all-other-buffers-and-windows-teardown))) + +(ert-deftest test-kill-all-other-buffers-and-windows-should-prompt-for-modified-buffers () + "Should call cj/save-some-buffers to handle modified buffers." + (test-kill-all-other-buffers-and-windows-setup) + (unwind-protect + (let ((main (current-buffer)) + (file (cj/create-temp-test-file-with-content "original")) + save-called) + ;; Mock cj/save-some-buffers to track if it's called + (cl-letf (((symbol-function 'cj/save-some-buffers) + (lambda (&optional arg) + (setq save-called t)))) + (let ((buf (find-file-noselect file))) + (unwind-protect + (progn + (with-current-buffer buf + (insert "modified")) + (cj/kill-all-other-buffers-and-windows) + (should save-called)) + (when (buffer-live-p buf) + (set-buffer-modified-p nil) + (kill-buffer buf)))))) + (test-kill-all-other-buffers-and-windows-teardown))) + +(provide 'test-undead-buffers-kill-all-other-buffers-and-windows) +;;; test-undead-buffers-kill-all-other-buffers-and-windows.el ends here diff --git a/tests/test-undead-buffers-kill-buffer-and-window.el b/tests/test-undead-buffers-kill-buffer-and-window.el new file mode 100644 index 00000000..b49969f6 --- /dev/null +++ b/tests/test-undead-buffers-kill-buffer-and-window.el @@ -0,0 +1,112 @@ +;;; test-undead-buffers-kill-buffer-and-window.el --- Tests for cj/kill-buffer-and-window -*- lexical-binding: t; -*- + +;;; Commentary: +;; Tests for the cj/kill-buffer-and-window function from undead-buffers.el + +;;; Code: + +(require 'ert) +(require 'undead-buffers) +(require 'testutil-general) + +;;; Setup and Teardown + +(defun test-kill-buffer-and-window-setup () + "Setup for kill-buffer-and-window tests." + (cj/create-test-base-dir) + (delete-other-windows)) + +(defun test-kill-buffer-and-window-teardown () + "Teardown for kill-buffer-and-window tests." + (delete-other-windows) + (cj/delete-test-base-dir)) + +;;; Normal Cases + +(ert-deftest test-kill-buffer-and-window-multiple-windows-should-delete-window-and-kill-buffer () + "With multiple windows, should delete window and kill buffer." + (test-kill-buffer-and-window-setup) + (unwind-protect + (let ((buf (generate-new-buffer "*test-multi*"))) + (unwind-protect + (progn + (split-window) + (switch-to-buffer buf) + (let ((win (selected-window))) + (cj/kill-buffer-and-window) + (should-not (window-live-p win)) + (should-not (buffer-live-p buf)))) + (when (buffer-live-p buf) (kill-buffer buf)))) + (test-kill-buffer-and-window-teardown))) + +(ert-deftest test-kill-buffer-and-window-multiple-windows-undead-buffer-should-delete-window-and-bury () + "With multiple windows, undead buffer should be buried and window deleted." + (test-kill-buffer-and-window-setup) + (unwind-protect + (let ((orig (copy-sequence cj/undead-buffer-list)) + (buf (generate-new-buffer "*test-undead-multi*"))) + (unwind-protect + (progn + (add-to-list 'cj/undead-buffer-list "*test-undead-multi*") + (split-window) + (switch-to-buffer buf) + (let ((win (selected-window))) + (cj/kill-buffer-and-window) + (should-not (window-live-p win)) + (should (buffer-live-p buf)))) + (setq cj/undead-buffer-list orig) + (when (buffer-live-p buf) (kill-buffer buf)))) + (test-kill-buffer-and-window-teardown))) + +;;; Boundary Cases + +(ert-deftest test-kill-buffer-and-window-single-window-should-only-kill-buffer () + "With single window, should only kill buffer, not delete window." + (test-kill-buffer-and-window-setup) + (unwind-protect + (let ((buf (generate-new-buffer "*test-single*"))) + (unwind-protect + (progn + (switch-to-buffer buf) + (should (one-window-p)) + (cj/kill-buffer-and-window) + (should (one-window-p)) + (should-not (buffer-live-p buf))) + (when (buffer-live-p buf) (kill-buffer buf)))) + (test-kill-buffer-and-window-teardown))) + +(ert-deftest test-kill-buffer-and-window-single-window-undead-buffer-should-only-bury () + "With single window, undead buffer should only be buried." + (test-kill-buffer-and-window-setup) + (unwind-protect + (let ((orig (copy-sequence cj/undead-buffer-list)) + (buf (generate-new-buffer "*test-undead-single*"))) + (unwind-protect + (progn + (add-to-list 'cj/undead-buffer-list "*test-undead-single*") + (switch-to-buffer buf) + (should (one-window-p)) + (cj/kill-buffer-and-window) + (should (one-window-p)) + (should (buffer-live-p buf))) + (setq cj/undead-buffer-list orig) + (when (buffer-live-p buf) (kill-buffer buf)))) + (test-kill-buffer-and-window-teardown))) + +(ert-deftest test-kill-buffer-and-window-two-windows-should-leave-one () + "With two windows, should leave one window after deletion." + (test-kill-buffer-and-window-setup) + (unwind-protect + (let ((buf (generate-new-buffer "*test-two*"))) + (unwind-protect + (progn + (split-window) + (set-window-buffer (selected-window) buf) + (should (= 2 (length (window-list)))) + (cj/kill-buffer-and-window) + (should (= 1 (length (window-list))))) + (when (buffer-live-p buf) (kill-buffer buf)))) + (test-kill-buffer-and-window-teardown))) + +(provide 'test-undead-buffers-kill-buffer-and-window) +;;; test-undead-buffers-kill-buffer-and-window.el ends here diff --git a/tests/test-undead-buffers-kill-buffer-or-bury-alive.el b/tests/test-undead-buffers-kill-buffer-or-bury-alive.el new file mode 100644 index 00000000..60b776e4 --- /dev/null +++ b/tests/test-undead-buffers-kill-buffer-or-bury-alive.el @@ -0,0 +1,138 @@ +;;; test-undead-buffers-kill-buffer-or-bury-alive.el --- Tests for cj/kill-buffer-or-bury-alive -*- lexical-binding: t; -*- + +;;; Commentary: +;; Tests for the cj/kill-buffer-or-bury-alive function from undead-buffers.el + +;;; Code: + +(require 'ert) +(require 'undead-buffers) +(require 'testutil-general) + +;;; Setup and Teardown + +(defun test-kill-buffer-or-bury-alive-setup () + "Setup for kill-buffer-or-bury-alive tests." + (cj/create-test-base-dir)) + +(defun test-kill-buffer-or-bury-alive-teardown () + "Teardown for kill-buffer-or-bury-alive tests." + (cj/delete-test-base-dir)) + +;;; Normal Cases + +(ert-deftest test-kill-buffer-or-bury-alive-regular-buffer-should-kill () + "Killing a regular buffer not in undead list should kill it." + (test-kill-buffer-or-bury-alive-setup) + (unwind-protect + (let ((buf (generate-new-buffer "*test-regular*"))) + (should (buffer-live-p buf)) + (cj/kill-buffer-or-bury-alive buf) + (should-not (buffer-live-p buf))) + (test-kill-buffer-or-bury-alive-teardown))) + +(ert-deftest test-kill-buffer-or-bury-alive-undead-buffer-should-bury () + "Killing an undead buffer should bury it instead." + (test-kill-buffer-or-bury-alive-setup) + (unwind-protect + (let ((orig (copy-sequence cj/undead-buffer-list)) + (buf (generate-new-buffer "*test-undead*"))) + (unwind-protect + (progn + (add-to-list 'cj/undead-buffer-list "*test-undead*") + (should (buffer-live-p buf)) + (cj/kill-buffer-or-bury-alive buf) + (should (buffer-live-p buf))) + (setq cj/undead-buffer-list orig) + (when (buffer-live-p buf) (kill-buffer buf)))) + (test-kill-buffer-or-bury-alive-teardown))) + +(ert-deftest test-kill-buffer-or-bury-alive-with-prefix-arg-should-add-to-undead-list () + "Calling with prefix arg should add buffer to undead list." + (test-kill-buffer-or-bury-alive-setup) + (unwind-protect + (let ((orig (copy-sequence cj/undead-buffer-list)) + (buf (generate-new-buffer "*test-prefix*"))) + (unwind-protect + (progn + (with-current-buffer buf + (let ((current-prefix-arg '(4))) + (cj/kill-buffer-or-bury-alive buf))) + (should (member "*test-prefix*" cj/undead-buffer-list)) + (should (buffer-live-p buf))) + (setq cj/undead-buffer-list orig) + (when (buffer-live-p buf) (kill-buffer buf)))) + (test-kill-buffer-or-bury-alive-teardown))) + +(ert-deftest test-kill-buffer-or-bury-alive-scratch-buffer-should-bury () + "The *scratch* buffer (in default list) should be buried." + (test-kill-buffer-or-bury-alive-setup) + (unwind-protect + (let ((scratch (get-buffer-create "*scratch*"))) + (should (buffer-live-p scratch)) + (cj/kill-buffer-or-bury-alive scratch) + (should (buffer-live-p scratch))) + (test-kill-buffer-or-bury-alive-teardown))) + +;;; Boundary Cases + +(ert-deftest test-kill-buffer-or-bury-alive-buffer-by-name-string-should-work () + "Passing buffer name as string should work." + (test-kill-buffer-or-bury-alive-setup) + (unwind-protect + (let ((buf (generate-new-buffer "*test-string*"))) + (should (buffer-live-p buf)) + (cj/kill-buffer-or-bury-alive "*test-string*") + (should-not (buffer-live-p buf))) + (test-kill-buffer-or-bury-alive-teardown))) + +(ert-deftest test-kill-buffer-or-bury-alive-buffer-by-buffer-object-should-work () + "Passing buffer object should work." + (test-kill-buffer-or-bury-alive-setup) + (unwind-protect + (let ((buf (generate-new-buffer "*test-object*"))) + (should (buffer-live-p buf)) + (cj/kill-buffer-or-bury-alive buf) + (should-not (buffer-live-p buf))) + (test-kill-buffer-or-bury-alive-teardown))) + +(ert-deftest test-kill-buffer-or-bury-alive-modified-undead-buffer-should-bury-without-prompt () + "Modified undead buffer should be buried without save prompt." + (test-kill-buffer-or-bury-alive-setup) + (unwind-protect + (let ((orig (copy-sequence cj/undead-buffer-list)) + (buf (generate-new-buffer "*test-modified*"))) + (unwind-protect + (progn + (add-to-list 'cj/undead-buffer-list "*test-modified*") + (with-current-buffer buf + (insert "some text") + (set-buffer-modified-p t)) + (cj/kill-buffer-or-bury-alive buf) + (should (buffer-live-p buf))) + (setq cj/undead-buffer-list orig) + (when (buffer-live-p buf) + (set-buffer-modified-p nil) + (kill-buffer buf)))) + (test-kill-buffer-or-bury-alive-teardown))) + +;;; Error Cases + +(ert-deftest test-kill-buffer-or-bury-alive-nonexistent-buffer-should-error () + "Passing a non-existent buffer name should error." + (test-kill-buffer-or-bury-alive-setup) + (unwind-protect + (should-error (cj/kill-buffer-or-bury-alive "*nonexistent-buffer-xyz*")) + (test-kill-buffer-or-bury-alive-teardown))) + +(ert-deftest test-kill-buffer-or-bury-alive-killed-buffer-object-should-error () + "Passing a killed buffer object should error." + (test-kill-buffer-or-bury-alive-setup) + (unwind-protect + (let ((buf (generate-new-buffer "*test-killed*"))) + (kill-buffer buf) + (should-error (cj/kill-buffer-or-bury-alive buf))) + (test-kill-buffer-or-bury-alive-teardown))) + +(provide 'test-undead-buffers-kill-buffer-or-bury-alive) +;;; test-undead-buffers-kill-buffer-or-bury-alive.el ends here diff --git a/tests/test-undead-buffers-kill-other-window.el b/tests/test-undead-buffers-kill-other-window.el new file mode 100644 index 00000000..e9371a0f --- /dev/null +++ b/tests/test-undead-buffers-kill-other-window.el @@ -0,0 +1,123 @@ +;;; test-undead-buffers-kill-other-window.el --- Tests for cj/kill-other-window -*- lexical-binding: t; -*- + +;;; Commentary: +;; Tests for the cj/kill-other-window function from undead-buffers.el + +;;; Code: + +(require 'ert) +(require 'undead-buffers) +(require 'testutil-general) + +;;; Setup and Teardown + +(defun test-kill-other-window-setup () + "Setup for kill-other-window tests." + (cj/create-test-base-dir) + (delete-other-windows)) + +(defun test-kill-other-window-teardown () + "Teardown for kill-other-window tests." + (delete-other-windows) + (cj/delete-test-base-dir)) + +;;; Normal Cases + +(ert-deftest test-kill-other-window-two-windows-should-delete-other-and-kill-buffer () + "With two windows, should delete other window and kill its buffer." + (test-kill-other-window-setup) + (unwind-protect + (let ((buf1 (current-buffer)) + (buf2 (generate-new-buffer "*test-other*"))) + (unwind-protect + (progn + (split-window) + (let ((win1 (selected-window)) + (win2 (next-window))) + (set-window-buffer win2 buf2) + (select-window win1) + (cj/kill-other-window) + (should-not (window-live-p win2)) + (should-not (buffer-live-p buf2)))) + (when (buffer-live-p buf2) (kill-buffer buf2)))) + (test-kill-other-window-teardown))) + +(ert-deftest test-kill-other-window-two-windows-undead-buffer-should-delete-other-and-bury () + "With two windows, undead buffer in other window should be buried." + (test-kill-other-window-setup) + (unwind-protect + (let ((orig (copy-sequence cj/undead-buffer-list)) + (buf1 (current-buffer)) + (buf2 (generate-new-buffer "*test-undead-other*"))) + (unwind-protect + (progn + (add-to-list 'cj/undead-buffer-list "*test-undead-other*") + (split-window) + (let ((win1 (selected-window)) + (win2 (next-window))) + (set-window-buffer win2 buf2) + (select-window win1) + (cj/kill-other-window) + (should-not (window-live-p win2)) + (should (buffer-live-p buf2)))) + (setq cj/undead-buffer-list orig) + (when (buffer-live-p buf2) (kill-buffer buf2)))) + (test-kill-other-window-teardown))) + +;;; Boundary Cases + +(ert-deftest test-kill-other-window-single-window-should-only-kill-buffer () + "With single window, should only kill the current buffer." + (test-kill-other-window-setup) + (unwind-protect + (let ((buf (generate-new-buffer "*test-single-other*"))) + (unwind-protect + (progn + (switch-to-buffer buf) + (should (one-window-p)) + (cj/kill-other-window) + (should (one-window-p)) + (should-not (buffer-live-p buf))) + (when (buffer-live-p buf) (kill-buffer buf)))) + (test-kill-other-window-teardown))) + +(ert-deftest test-kill-other-window-three-windows-should-delete-one () + "With three windows, should delete one window." + (test-kill-other-window-setup) + (unwind-protect + (let ((buf1 (current-buffer)) + (buf2 (generate-new-buffer "*test-three-1*")) + (buf3 (generate-new-buffer "*test-three-2*"))) + (unwind-protect + (progn + (split-window) + (split-window) + (set-window-buffer (nth 1 (window-list)) buf2) + (set-window-buffer (nth 2 (window-list)) buf3) + (select-window (car (window-list))) + (should (= 3 (length (window-list)))) + (cj/kill-other-window) + (should (= 2 (length (window-list))))) + (when (buffer-live-p buf2) (kill-buffer buf2)) + (when (buffer-live-p buf3) (kill-buffer buf3)))) + (test-kill-other-window-teardown))) + +(ert-deftest test-kill-other-window-wraps-to-first-window-correctly () + "Should correctly cycle through windows with other-window." + (test-kill-other-window-setup) + (unwind-protect + (let ((buf1 (current-buffer)) + (buf2 (generate-new-buffer "*test-wrap*"))) + (unwind-protect + (progn + (split-window) + (let ((win2 (next-window))) + (set-window-buffer win2 buf2) + (select-window (car (window-list))) + (cj/kill-other-window) + (should-not (window-live-p win2)))) + (when (buffer-live-p buf2) (kill-buffer buf2)))) + (test-kill-other-window-teardown))) + +(provide 'test-undead-buffers-kill-other-window) +;;; test-undead-buffers-kill-other-window.el ends here diff --git a/tests/test-undead-buffers-make-buffer-undead.el b/tests/test-undead-buffers-make-buffer-undead.el new file mode 100644 index 00000000..823bb56e --- /dev/null +++ b/tests/test-undead-buffers-make-buffer-undead.el @@ -0,0 +1,134 @@ +;;; test-undead-buffers-make-buffer-undead.el --- Tests for cj/make-buffer-undead -*- lexical-binding: t; -*- + +;;; Commentary: +;; Tests for the cj/make-buffer-undead function from undead-buffers.el + +;;; Code: + +(require 'ert) +(require 'undead-buffers) +(require 'testutil-general) + +;;; Setup and Teardown + +(defun test-make-buffer-undead-setup () + "Setup for make-buffer-undead tests." + (cj/create-test-base-dir)) + +(defun test-make-buffer-undead-teardown () + "Teardown for make-buffer-undead tests." + (cj/delete-test-base-dir)) + +;;; Normal Cases + +(ert-deftest test-make-buffer-undead-valid-name-should-add-to-list () + "Adding a valid buffer name should add it to the undead buffer list." + (test-make-buffer-undead-setup) + (unwind-protect + (let ((orig (copy-sequence cj/undead-buffer-list))) + (unwind-protect + (progn + (cj/make-buffer-undead "*test-buffer*") + (should (member "*test-buffer*" cj/undead-buffer-list))) + (setq cj/undead-buffer-list orig))) + (test-make-buffer-undead-teardown))) + +(ert-deftest test-make-buffer-undead-existing-name-should-not-duplicate () + "Adding an existing buffer name should not create duplicates." + (test-make-buffer-undead-setup) + (unwind-protect + (let ((orig (copy-sequence cj/undead-buffer-list))) + (unwind-protect + (progn + (cj/make-buffer-undead "*test-dup*") + (cj/make-buffer-undead "*test-dup*") + (should (= 1 (cl-count "*test-dup*" cj/undead-buffer-list :test #'string=)))) + (setq cj/undead-buffer-list orig))) + (test-make-buffer-undead-teardown))) + +(ert-deftest test-make-buffer-undead-multiple-additions-should-preserve-order () + "Adding multiple buffer names should preserve order." + (test-make-buffer-undead-setup) + (unwind-protect + (let ((orig (copy-sequence cj/undead-buffer-list))) + (unwind-protect + (progn + (cj/make-buffer-undead "*first*") + (cj/make-buffer-undead "*second*") + (cj/make-buffer-undead "*third*") + (let ((added-items (seq-drop cj/undead-buffer-list (length orig)))) + (should (equal added-items '("*first*" "*second*" "*third*"))))) + (setq cj/undead-buffer-list orig))) + (test-make-buffer-undead-teardown))) + +;;; Boundary Cases + +(ert-deftest test-make-buffer-undead-whitespace-only-name-should-add () + "Adding a whitespace-only name should succeed." + (test-make-buffer-undead-setup) + (unwind-protect + (let ((orig (copy-sequence cj/undead-buffer-list))) + (unwind-protect + (progn + (cj/make-buffer-undead " ") + (should (member " " cj/undead-buffer-list))) + (setq cj/undead-buffer-list orig))) + (test-make-buffer-undead-teardown))) + +(ert-deftest test-make-buffer-undead-very-long-name-should-add () + "Adding a very long buffer name should succeed." + (test-make-buffer-undead-setup) + (unwind-protect + (let ((orig (copy-sequence cj/undead-buffer-list)) + (long-name (make-string 1000 ?x))) + (unwind-protect + (progn + (cj/make-buffer-undead long-name) + (should (member long-name cj/undead-buffer-list))) + (setq cj/undead-buffer-list orig))) + (test-make-buffer-undead-teardown))) + +(ert-deftest test-make-buffer-undead-unicode-name-should-add () + "Adding a buffer name with Unicode characters should succeed." + (test-make-buffer-undead-setup) + (unwind-protect + (let ((orig (copy-sequence cj/undead-buffer-list))) + (unwind-protect + (progn + (cj/make-buffer-undead "*test-🚀-buffer*") + (should (member "*test-🚀-buffer*" cj/undead-buffer-list))) + (setq cj/undead-buffer-list orig))) + (test-make-buffer-undead-teardown))) + +;;; Error Cases + +(ert-deftest test-make-buffer-undead-empty-string-should-error () + "Passing an empty string should signal an error." + (test-make-buffer-undead-setup) + (unwind-protect + (should-error (cj/make-buffer-undead "")) + (test-make-buffer-undead-teardown))) + +(ert-deftest test-make-buffer-undead-nil-should-error () + "Passing nil should signal an error." + (test-make-buffer-undead-setup) + (unwind-protect + (should-error (cj/make-buffer-undead nil)) + (test-make-buffer-undead-teardown))) + +(ert-deftest test-make-buffer-undead-number-should-error () + "Passing a number should signal an error." + (test-make-buffer-undead-setup) + (unwind-protect + (should-error (cj/make-buffer-undead 42)) + (test-make-buffer-undead-teardown))) + +(ert-deftest test-make-buffer-undead-symbol-should-error () + "Passing a symbol should signal an error." + (test-make-buffer-undead-setup) + (unwind-protect + (should-error (cj/make-buffer-undead 'some-symbol)) + (test-make-buffer-undead-teardown))) + +(provide 'test-undead-buffers-make-buffer-undead) +;;; test-undead-buffers-make-buffer-undead.el ends here diff --git a/tests/test-undead-buffers-undead-buffer-p.el b/tests/test-undead-buffers-undead-buffer-p.el new file mode 100644 index 00000000..107256c9 --- /dev/null +++ b/tests/test-undead-buffers-undead-buffer-p.el @@ -0,0 +1,106 @@ +;;; test-undead-buffers-undead-buffer-p.el --- Tests for cj/undead-buffer-p -*- lexical-binding: t; -*- + +;;; Commentary: +;; Tests for the cj/undead-buffer-p function from undead-buffers.el + +;;; Code: + +(require 'ert) +(require 'undead-buffers) +(require 'testutil-general) + +;;; Setup and Teardown + +(defun test-undead-buffer-p-setup () + "Setup for undead-buffer-p tests." + (cj/create-test-base-dir)) + +(defun test-undead-buffer-p-teardown () + "Teardown for undead-buffer-p tests." + (cj/delete-test-base-dir)) + +;;; Normal Cases + +(ert-deftest test-undead-buffer-p-modified-file-buffer-should-return-true () + "A modified file-backed buffer not in undead list should return t." + (test-undead-buffer-p-setup) + (unwind-protect + (let* ((file (cj/create-temp-test-file-with-content "test content")) + (buf (find-file-noselect file))) + (unwind-protect + (progn + (with-current-buffer buf + (insert "more content") + (should (cj/undead-buffer-p)))) + (when (buffer-live-p buf) + (set-buffer-modified-p nil) + (kill-buffer buf)))) + (test-undead-buffer-p-teardown))) + +(ert-deftest test-undead-buffer-p-undead-modified-file-buffer-should-return-nil () + "A modified file-backed undead buffer should return nil." + (test-undead-buffer-p-setup) + (unwind-protect + (let* ((orig (copy-sequence cj/undead-buffer-list)) + (file (cj/create-temp-test-file-with-content "test content")) + (buf (find-file-noselect file))) + (unwind-protect + (progn + (add-to-list 'cj/undead-buffer-list (buffer-name buf)) + (with-current-buffer buf + (insert "more content") + (should-not (cj/undead-buffer-p)))) + (setq cj/undead-buffer-list orig) + (when (buffer-live-p buf) + (set-buffer-modified-p nil) + (kill-buffer buf)))) + (test-undead-buffer-p-teardown))) + +(ert-deftest test-undead-buffer-p-scratch-buffer-should-return-nil () + "The *scratch* buffer should return nil (it's undead)." + (test-undead-buffer-p-setup) + (unwind-protect + (with-current-buffer "*scratch*" + (should-not (cj/undead-buffer-p))) + (test-undead-buffer-p-teardown))) + +;;; Boundary Cases + +(ert-deftest test-undead-buffer-p-unmodified-file-buffer-should-return-nil () + "An unmodified file buffer should return nil." + (test-undead-buffer-p-setup) + (unwind-protect + (let* ((file (cj/create-temp-test-file-with-content "test content")) + (buf (find-file-noselect file))) + (unwind-protect + (with-current-buffer buf + (should-not (cj/undead-buffer-p))) + (when (buffer-live-p buf) + (kill-buffer buf)))) + (test-undead-buffer-p-teardown))) + +(ert-deftest test-undead-buffer-p-modified-buffer-without-file-should-return-nil () + "A modified buffer without a backing file should return nil." + (test-undead-buffer-p-setup) + (unwind-protect + (let ((buf (generate-new-buffer "*test-no-file*"))) + (unwind-protect + (with-current-buffer buf + (insert "content") + (set-buffer-modified-p t) + (should-not (cj/undead-buffer-p))) + (when (buffer-live-p buf) + (set-buffer-modified-p nil) + (kill-buffer buf)))) + (test-undead-buffer-p-teardown))) + +(ert-deftest test-undead-buffer-p-temporary-buffer-should-return-nil () + "A temporary buffer should return nil." + (test-undead-buffer-p-setup) + (unwind-protect + (with-temp-buffer + (should-not (cj/undead-buffer-p))) + (test-undead-buffer-p-teardown))) + +(provide 'test-undead-buffers-undead-buffer-p) +;;; test-undead-buffers-undead-buffer-p.el ends here |
