summaryrefslogtreecommitdiff
path: root/tests/test-custom-file-buffer-clear-to-bottom-of-buffer.el
blob: 969f9bb714186f870c27cc6f7e45d0879f268438 (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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
;;; test-custom-file-buffer-clear-to-bottom-of-buffer.el --- Tests for cj/clear-to-bottom-of-buffer -*- lexical-binding: t; -*-

;;; Commentary:
;; Tests for the cj/clear-to-bottom-of-buffer function from custom-file-buffer.el
;;
;; This function deletes all text from point to the end 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-bottom-setup ()
  "Set up test environment."
  (setq kill-ring nil))

(defun test-clear-to-bottom-teardown ()
  "Clean up test environment."
  (setq kill-ring nil))

;;; Normal Cases

(ert-deftest test-clear-to-bottom-point-in-middle ()
  "Should delete from point to end when point in middle."
  (test-clear-to-bottom-setup)
  (unwind-protect
      (with-temp-buffer
        (insert "Line 1\nLine 2\nLine 3")
        (goto-char (point-min))
        (forward-line 1)  ; Point at start of "Line 2"
        (cj/clear-to-bottom-of-buffer)
        (should (equal (buffer-string) "Line 1\n")))
    (test-clear-to-bottom-teardown)))

(ert-deftest test-clear-to-bottom-empty-buffer ()
  "Should do nothing in empty buffer."
  (test-clear-to-bottom-setup)
  (unwind-protect
      (with-temp-buffer
        (cj/clear-to-bottom-of-buffer)
        (should (equal (buffer-string) "")))
    (test-clear-to-bottom-teardown)))

;;; Boundary Cases

(ert-deftest test-clear-to-bottom-point-at-beginning ()
  "Should delete entire buffer when point at beginning."
  (test-clear-to-bottom-setup)
  (unwind-protect
      (with-temp-buffer
        (insert "Line 1\nLine 2\nLine 3")
        (goto-char (point-min))
        (cj/clear-to-bottom-of-buffer)
        (should (equal (buffer-string) "")))
    (test-clear-to-bottom-teardown)))

(ert-deftest test-clear-to-bottom-point-at-end ()
  "Should delete nothing when point at end."
  (test-clear-to-bottom-setup)
  (unwind-protect
      (with-temp-buffer
        (insert "Line 1\nLine 2\nLine 3")
        (goto-char (point-max))
        (cj/clear-to-bottom-of-buffer)
        (should (equal (buffer-string) "Line 1\nLine 2\nLine 3")))
    (test-clear-to-bottom-teardown)))

(ert-deftest test-clear-to-bottom-point-second-to-last-char ()
  "Should delete last character when point at second-to-last."
  (test-clear-to-bottom-setup)
  (unwind-protect
      (with-temp-buffer
        (insert "Hello")
        (goto-char (1- (point-max)))  ; Before 'o'
        (cj/clear-to-bottom-of-buffer)
        (should (equal (buffer-string) "Hell")))
    (test-clear-to-bottom-teardown)))

(ert-deftest test-clear-to-bottom-unicode-content ()
  "Should handle unicode content."
  (test-clear-to-bottom-setup)
  (unwind-protect
      (with-temp-buffer
        (insert "Hello 👋\nمرحبا\nWorld")
        (goto-char (point-min))
        (forward-line 1)
        (cj/clear-to-bottom-of-buffer)
        (should (equal (buffer-string) "Hello 👋\n")))
    (test-clear-to-bottom-teardown)))

(ert-deftest test-clear-to-bottom-narrowed-buffer ()
  "Should respect narrowing."
  (test-clear-to-bottom-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-bottom-of-buffer)
          (should (equal (buffer-string) "Line 2\n"))))
    (test-clear-to-bottom-teardown)))

(ert-deftest test-clear-to-bottom-multiple-windows ()
  "Should update all windows showing buffer."
  (test-clear-to-bottom-setup)
  (unwind-protect
      (with-temp-buffer
        (insert "Line 1\nLine 2\nLine 3")
        (goto-char (point-min))
        (forward-line 1)
        (cj/clear-to-bottom-of-buffer)
        ;; Just verify content changed
        (should (equal (buffer-string) "Line 1\n")))
    (test-clear-to-bottom-teardown)))

(ert-deftest test-clear-to-bottom-does-not-affect-kill-ring ()
  "Should not add deleted text to kill ring."
  (test-clear-to-bottom-setup)
  (unwind-protect
      (with-temp-buffer
        (insert "Line 1\nLine 2\nLine 3")
        (goto-char (point-min))
        (setq kill-ring nil)
        (cj/clear-to-bottom-of-buffer)
        (should (null kill-ring)))
    (test-clear-to-bottom-teardown)))

;;; Error Cases

(ert-deftest test-clear-to-bottom-read-only-buffer ()
  "Should signal error in read-only buffer."
  (test-clear-to-bottom-setup)
  (unwind-protect
      (with-temp-buffer
        (insert "Read-only content")
        (read-only-mode 1)
        (goto-char (point-min))
        (should-error (cj/clear-to-bottom-of-buffer)))
    (test-clear-to-bottom-teardown)))

(provide 'test-custom-file-buffer-clear-to-bottom-of-buffer)
;;; test-custom-file-buffer-clear-to-bottom-of-buffer.el ends here