summaryrefslogtreecommitdiff
path: root/tests/test-custom-file-buffer-clear-to-top-of-buffer.el
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test-custom-file-buffer-clear-to-top-of-buffer.el')
-rw-r--r--tests/test-custom-file-buffer-clear-to-top-of-buffer.el162
1 files changed, 162 insertions, 0 deletions
diff --git a/tests/test-custom-file-buffer-clear-to-top-of-buffer.el b/tests/test-custom-file-buffer-clear-to-top-of-buffer.el
new file mode 100644
index 00000000..18e3f71b
--- /dev/null
+++ b/tests/test-custom-file-buffer-clear-to-top-of-buffer.el
@@ -0,0 +1,162 @@
+;;; test-custom-file-buffer-clear-to-top-of-buffer.el --- Tests for cj/clear-to-top-of-buffer -*- lexical-binding: t; -*-
+
+;;; Commentary:
+;; Tests for the cj/clear-to-top-of-buffer function from custom-file-buffer.el
+;;
+;; This function deletes all text from point to the beginning of the current buffer.
+;; It does not save the deleted text in the kill ring.
+
+;;; Code:
+
+(require 'ert)
+(require 'testutil-general)
+
+;; Add modules directory to load path
+(add-to-list 'load-path (expand-file-name "modules" user-emacs-directory))
+
+;; Stub dependencies before loading the module
+(defvar cj/custom-keymap (make-sparse-keymap)
+ "Stub keymap for testing.")
+
+;; Stub ps-print package
+(provide 'ps-print)
+
+;; Now load the actual production module
+(require 'custom-file-buffer)
+
+;;; Setup and Teardown
+
+(defun test-clear-to-top-setup ()
+ "Set up test environment."
+ (setq kill-ring nil))
+
+(defun test-clear-to-top-teardown ()
+ "Clean up test environment."
+ (setq kill-ring nil))
+
+;;; Normal Cases
+
+(ert-deftest test-clear-to-top-point-in-middle ()
+ "Should delete from beginning to point when point in middle."
+ (test-clear-to-top-setup)
+ (unwind-protect
+ (with-temp-buffer
+ (insert "Line 1\nLine 2\nLine 3")
+ (goto-char (point-min))
+ (forward-line 2) ; Point at start of "Line 3"
+ (cj/clear-to-top-of-buffer)
+ (should (equal (buffer-string) "Line 3")))
+ (test-clear-to-top-teardown)))
+
+(ert-deftest test-clear-to-top-empty-buffer ()
+ "Should do nothing in empty buffer."
+ (test-clear-to-top-setup)
+ (unwind-protect
+ (with-temp-buffer
+ (cj/clear-to-top-of-buffer)
+ (should (equal (buffer-string) "")))
+ (test-clear-to-top-teardown)))
+
+;;; Boundary Cases
+
+(ert-deftest test-clear-to-top-point-at-beginning ()
+ "Should delete nothing when point at beginning."
+ (test-clear-to-top-setup)
+ (unwind-protect
+ (with-temp-buffer
+ (insert "Line 1\nLine 2\nLine 3")
+ (goto-char (point-min))
+ (cj/clear-to-top-of-buffer)
+ (should (equal (buffer-string) "Line 1\nLine 2\nLine 3")))
+ (test-clear-to-top-teardown)))
+
+(ert-deftest test-clear-to-top-point-at-end ()
+ "Should delete entire buffer when point at end."
+ (test-clear-to-top-setup)
+ (unwind-protect
+ (with-temp-buffer
+ (insert "Line 1\nLine 2\nLine 3")
+ (goto-char (point-max))
+ (cj/clear-to-top-of-buffer)
+ (should (equal (buffer-string) "")))
+ (test-clear-to-top-teardown)))
+
+(ert-deftest test-clear-to-top-point-at-second-char ()
+ "Should delete first character when point at second."
+ (test-clear-to-top-setup)
+ (unwind-protect
+ (with-temp-buffer
+ (insert "Hello")
+ (goto-char (1+ (point-min))) ; After 'H'
+ (cj/clear-to-top-of-buffer)
+ (should (equal (buffer-string) "ello")))
+ (test-clear-to-top-teardown)))
+
+(ert-deftest test-clear-to-top-unicode-content ()
+ "Should handle unicode content."
+ (test-clear-to-top-setup)
+ (unwind-protect
+ (with-temp-buffer
+ (insert "Hello 👋\nمرحبا\nWorld")
+ (goto-char (point-min))
+ (forward-line 2)
+ (cj/clear-to-top-of-buffer)
+ (should (equal (buffer-string) "World")))
+ (test-clear-to-top-teardown)))
+
+(ert-deftest test-clear-to-top-narrowed-buffer ()
+ "Should respect narrowing."
+ (test-clear-to-top-setup)
+ (unwind-protect
+ (with-temp-buffer
+ (insert "Line 1\nLine 2\nLine 3\nLine 4")
+ (goto-char (point-min))
+ (forward-line 1)
+ (let ((start (point)))
+ (forward-line 2)
+ (narrow-to-region start (point))
+ (goto-char (point-min))
+ (forward-line 1) ; Point at "Line 3"
+ (cj/clear-to-top-of-buffer)
+ (should (equal (buffer-string) "Line 3\n"))))
+ (test-clear-to-top-teardown)))
+
+(ert-deftest test-clear-to-top-multiple-windows ()
+ "Should update all windows showing buffer."
+ (test-clear-to-top-setup)
+ (unwind-protect
+ (with-temp-buffer
+ (insert "Line 1\nLine 2\nLine 3")
+ (goto-char (point-max))
+ (cj/clear-to-top-of-buffer)
+ ;; Just verify content changed
+ (should (equal (buffer-string) "")))
+ (test-clear-to-top-teardown)))
+
+(ert-deftest test-clear-to-top-does-not-affect-kill-ring ()
+ "Should not add deleted text to kill ring."
+ (test-clear-to-top-setup)
+ (unwind-protect
+ (with-temp-buffer
+ (insert "Line 1\nLine 2\nLine 3")
+ (goto-char (point-max))
+ (setq kill-ring nil)
+ (cj/clear-to-top-of-buffer)
+ (should (null kill-ring)))
+ (test-clear-to-top-teardown)))
+
+;;; Error Cases
+
+(ert-deftest test-clear-to-top-read-only-buffer ()
+ "Should signal error in read-only buffer."
+ (test-clear-to-top-setup)
+ (unwind-protect
+ (with-temp-buffer
+ (insert "Read-only content")
+ (read-only-mode 1)
+ (goto-char (point-max))
+ (should-error (cj/clear-to-top-of-buffer)))
+ (test-clear-to-top-teardown)))
+
+(provide 'test-custom-file-buffer-clear-to-top-of-buffer)
+;;; test-custom-file-buffer-clear-to-top-of-buffer.el ends here