summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/test-dashboard-config.el60
1 files changed, 60 insertions, 0 deletions
diff --git a/tests/test-dashboard-config.el b/tests/test-dashboard-config.el
new file mode 100644
index 00000000..2dbcd4f4
--- /dev/null
+++ b/tests/test-dashboard-config.el
@@ -0,0 +1,60 @@
+;;; test-dashboard-config.el --- Tests for dashboard-config -*- lexical-binding: t; -*-
+
+;;; Commentary:
+;; Exercises `cj/dashboard-only', the F1-bound entry point that displays the
+;; *dashboard* buffer and resets the view to the top. The fix this test
+;; locks in: window-start is forced to point-min, not left wherever a prior
+;; view had scrolled to. Without that, a dashboard buffer taller than the
+;; window opens with content above the visible area.
+
+;;; Code:
+
+(require 'ert)
+(require 'cl-lib)
+
+(add-to-list 'load-path (expand-file-name "modules" user-emacs-directory))
+(add-to-list 'load-path (expand-file-name "tests" user-emacs-directory))
+(setq load-prefer-newer t)
+
+;; Stub package-level deps that dashboard-config pulls transitively.
+(declare-function cj/kill-all-other-buffers-and-windows "undead-buffers")
+(unless (fboundp 'cj/kill-all-other-buffers-and-windows)
+ (defun cj/kill-all-other-buffers-and-windows () nil))
+(unless (fboundp 'cj/make-buffer-undead)
+ (defun cj/make-buffer-undead (_name) nil))
+
+(require 'dashboard-config)
+
+(ert-deftest test-dashboard-only-resets-window-start-to-point-min ()
+ "Normal: `cj/dashboard-only' forces `window-start' to `point-min'.
+
+The dashboard buffer can be taller than the selected window's height
+(banner + 3 navigator rows + sections). A prior call that left the
+window scrolled into the buffer's middle must not leak into the next
+display -- point should land at the top AND the window's view should
+start at the top. Without `set-window-start', batch redisplay leaves
+`window-start' wherever it was set."
+ (let ((dash (get-buffer-create "*dashboard*")))
+ (unwind-protect
+ (progn
+ (with-current-buffer dash
+ (let ((inhibit-read-only t))
+ (erase-buffer)
+ (insert (make-string 5000 ?x))
+ (insert "\n")))
+ (save-window-excursion
+ (switch-to-buffer dash)
+ (let ((win (selected-window)))
+ ;; Simulate a prior view that scrolled into the middle.
+ (set-window-start win 1000)
+ (should (= (window-start win) 1000))
+ (cl-letf (((symbol-function 'cj/kill-all-other-buffers-and-windows)
+ #'ignore))
+ (cj/dashboard-only))
+ (should (= (window-start win) (point-min)))
+ (should (= (point) (point-min))))))
+ (when (buffer-live-p dash)
+ (kill-buffer dash)))))
+
+(provide 'test-dashboard-config)
+;;; test-dashboard-config.el ends here