aboutsummaryrefslogtreecommitdiff
path: root/tests/test-auto-dim-config.el
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test-auto-dim-config.el')
-rw-r--r--tests/test-auto-dim-config.el103
1 files changed, 103 insertions, 0 deletions
diff --git a/tests/test-auto-dim-config.el b/tests/test-auto-dim-config.el
index 45e1db5f..f33a475a 100644
--- a/tests/test-auto-dim-config.el
+++ b/tests/test-auto-dim-config.el
@@ -10,6 +10,7 @@
;;; Code:
(require 'ert)
+(require 'cl-lib)
(add-to-list 'load-path (expand-file-name "modules" user-emacs-directory))
(defconst test-auto-dim--fork
@@ -29,5 +30,107 @@
(when (fboundp 'auto-dim-other-buffers-mode)
(auto-dim-other-buffers-mode -1))))
+(ert-deftest test-auto-dim-config-vterm-dimmed-p-all-windows-dimmed ()
+ "Normal: a vterm buffer is dimmed when all displayed windows are dimmed."
+ (skip-unless (file-directory-p test-auto-dim--fork))
+ (require 'auto-dim-config)
+ (let ((major-mode 'vterm-mode))
+ (cl-letf (((symbol-function 'get-buffer-window-list)
+ (lambda (&rest _) '(left right)))
+ ((symbol-function 'window-parameter)
+ (lambda (window parameter)
+ (and (eq parameter 'adob--dim)
+ (memq window '(left right))))))
+ (should (cj/auto-dim--vterm-buffer-dimmed-p)))))
+
+(ert-deftest test-auto-dim-config-vterm-dimmed-p-undimmed-window-keeps-buffer-bright ()
+ "Normal: a selected/undimmed vterm window keeps the buffer bright."
+ (skip-unless (file-directory-p test-auto-dim--fork))
+ (require 'auto-dim-config)
+ (let ((major-mode 'vterm-mode))
+ (cl-letf (((symbol-function 'get-buffer-window-list)
+ (lambda (&rest _) '(left right)))
+ ((symbol-function 'window-parameter)
+ (lambda (window parameter)
+ (and (eq parameter 'adob--dim)
+ (eq window 'right)))))
+ (should-not (cj/auto-dim--vterm-buffer-dimmed-p)))))
+
+(ert-deftest test-auto-dim-config-vterm-get-color-dims-only-dimmed-vterm-buffers ()
+ "Normal: vterm color advice dims only buffers marked dimmed."
+ (skip-unless (file-directory-p test-auto-dim--fork))
+ (require 'auto-dim-config)
+ (let ((major-mode 'vterm-mode)
+ (cj/auto-dim-vterm-foreground-blend 1.0))
+ (cl-letf (((symbol-function 'cj/auto-dim--vterm-buffer-dimmed-p)
+ (lambda () t))
+ ((symbol-function 'cj/auto-dim--face-color)
+ (lambda (&rest _) "#555555")))
+ (should (equal "#555555"
+ (cj/auto-dim--vterm-get-color
+ (lambda (&rest _) "#ffffff") 7 :foreground))))
+ (cl-letf (((symbol-function 'cj/auto-dim--vterm-buffer-dimmed-p)
+ (lambda () nil)))
+ (should (equal "#ffffff"
+ (cj/auto-dim--vterm-get-color
+ (lambda (&rest _) "#ffffff") 7 :foreground))))))
+
+(ert-deftest test-auto-dim-config-vterm-post-command-schedules-refresh-on-window-change ()
+ "Normal: post-command vterm refresh schedules only after selection changes."
+ (skip-unless (file-directory-p test-auto-dim--fork))
+ (require 'auto-dim-config)
+ (let ((cj/auto-dim--last-selected-window 'old)
+ (calls 0))
+ (cl-letf (((symbol-function 'selected-window)
+ (lambda () 'new))
+ ((symbol-function 'cj/auto-dim--schedule-vterm-refresh)
+ (lambda (&optional _) (setq calls (1+ calls)))))
+ (cj/auto-dim--refresh-vterm-on-command)
+ (cj/auto-dim--refresh-vterm-on-command))
+ (should (eq cj/auto-dim--last-selected-window 'new))
+ (should (= calls 1))))
+
+(ert-deftest test-auto-dim-config-vterm-refresh-runs-auto-dim-before-invalidate ()
+ "Normal: deferred vterm refresh updates auto-dim before invalidating vterm."
+ (skip-unless (file-directory-p test-auto-dim--fork))
+ (require 'auto-dim-config)
+ (let (events)
+ (cl-letf (((symbol-function 'adob--update)
+ (lambda () (push 'adob events)))
+ ((symbol-function 'cj/auto-dim--refresh-vterm-windows)
+ (lambda (&optional _) (push 'vterm events))))
+ (cj/auto-dim--refresh-vterm-after-auto-dim))
+ (should (equal events '(vterm adob)))))
+
+(ert-deftest test-auto-dim-config-vterm-refresh-nudges-size-for-full-redraw ()
+ "Normal: vterm refresh nudges size to force full-grid redraw."
+ (skip-unless (file-directory-p test-auto-dim--fork))
+ (require 'auto-dim-config)
+ (let ((calls nil)
+ (vterm-min-window-width 80))
+ (with-temp-buffer
+ (setq major-mode 'vterm-mode)
+ (setq-local vterm--term 'term)
+ (let ((buffer (current-buffer)))
+ (cl-letf (((symbol-function 'window-list)
+ (lambda (&rest _) '(vterm-window)))
+ ((symbol-function 'window-buffer)
+ (lambda (_) buffer))
+ ((symbol-function 'window-live-p)
+ (lambda (_) t))
+ ((symbol-function 'window-body-height)
+ (lambda (_) 24))
+ ((symbol-function 'window-body-width)
+ (lambda (_) 100))
+ ((symbol-function 'vterm--get-margin-width)
+ (lambda () 3))
+ ((symbol-function 'vterm--set-size)
+ (lambda (term height width)
+ (push (list term height width) calls))))
+ (cj/auto-dim--refresh-vterm-windows))))
+ (should (equal (nreverse calls)
+ '((term 25 97)
+ (term 24 97))))))
+
(provide 'test-auto-dim-config)
;;; test-auto-dim-config.el ends here