aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/test-modeline-config-eat-state.el94
1 files changed, 94 insertions, 0 deletions
diff --git a/tests/test-modeline-config-eat-state.el b/tests/test-modeline-config-eat-state.el
new file mode 100644
index 00000000..7d20c681
--- /dev/null
+++ b/tests/test-modeline-config-eat-state.el
@@ -0,0 +1,94 @@
+;;; test-modeline-config-eat-state.el --- eat input-mode/process segment -*- lexical-binding: t; -*-
+
+;;; Commentary:
+;; Tests for `cj/--modeline-eat-state', the left-side segment that shows
+;; an eat terminal's input mode and process state as icons with
+;; explanatory hover text (replacing eat's own [semi-char]:run
+;; mode-line-process). eat isn't installed under `make test', so the
+;; tests fake an eat buffer: `major-mode' set to `eat-mode' and the
+;; input-mode flags defvar'd here. Batch has no graphic display, so the
+;; glyphs exercise their letter/text fallbacks.
+
+;;; Code:
+
+(require 'ert)
+
+(add-to-list 'load-path (expand-file-name "modules" user-emacs-directory))
+
+(require 'modeline-config)
+
+(defvar eat--semi-char-mode nil)
+(defvar eat--char-mode nil)
+(defvar eat--line-mode nil)
+
+(defmacro test-eat-state--with-fake-eat-buffer (&rest body)
+ "Run BODY in a temp buffer masquerading as an eat-mode buffer."
+ `(with-temp-buffer
+ (setq major-mode 'eat-mode)
+ ,@body))
+
+(ert-deftest test-modeline-eat-state-nil-outside-eat ()
+ "Boundary: non-eat buffers get no segment."
+ (with-temp-buffer
+ (should-not (cj/--modeline-eat-state))))
+
+(ert-deftest test-modeline-eat-state-semi-char-quiet-face ()
+ "Normal: semi-char (the default mode) renders in the quiet shadow face."
+ (test-eat-state--with-fake-eat-buffer
+ (setq-local eat--semi-char-mode t)
+ (let ((s (cj/--modeline-eat-state)))
+ (should (stringp s))
+ (should (text-property-any 0 (length s) 'face 'shadow s)))))
+
+(ert-deftest test-modeline-eat-state-char-mode-warning-face ()
+ "Normal: char mode (raw keys) renders in the warning face."
+ (test-eat-state--with-fake-eat-buffer
+ (setq-local eat--char-mode t)
+ (let ((s (cj/--modeline-eat-state)))
+ (should (stringp s))
+ (should (text-property-any 0 (length s) 'face 'warning s)))))
+
+(ert-deftest test-modeline-eat-state-input-mode-detection ()
+ "Normal: the four input-mode flags map to the right symbols."
+ (test-eat-state--with-fake-eat-buffer
+ (setq-local eat--semi-char-mode t)
+ (should (eq (cj/--modeline-eat-input-mode) 'semi-char)))
+ (test-eat-state--with-fake-eat-buffer
+ (setq-local eat--char-mode t)
+ (should (eq (cj/--modeline-eat-input-mode) 'char)))
+ (test-eat-state--with-fake-eat-buffer
+ (setq-local eat--line-mode t)
+ (should (eq (cj/--modeline-eat-input-mode) 'line)))
+ (test-eat-state--with-fake-eat-buffer
+ (should (eq (cj/--modeline-eat-input-mode) 'emacs))))
+
+(ert-deftest test-modeline-eat-state-dead-process-error-face ()
+ "Error: no live process renders the exited indicator in the error face."
+ (test-eat-state--with-fake-eat-buffer
+ (setq-local eat--semi-char-mode t)
+ (let ((s (cj/--modeline-eat-state)))
+ (should (text-property-any 0 (length s) 'face 'error s)))))
+
+(ert-deftest test-modeline-eat-state-live-process-success-face ()
+ "Normal: a live buffer process renders the running indicator, no error face."
+ (test-eat-state--with-fake-eat-buffer
+ (setq-local eat--semi-char-mode t)
+ (let ((proc (start-process "test-eat-state" (current-buffer) "sleep" "10")))
+ (unwind-protect
+ (let ((s (cj/--modeline-eat-state)))
+ (should (text-property-any 0 (length s) 'face 'success s))
+ (should-not (text-property-any 0 (length s) 'face 'error s)))
+ (set-process-query-on-exit-flag proc nil)
+ (kill-process proc)))))
+
+(ert-deftest test-modeline-eat-state-hover-text-explains ()
+ "Normal: the input-mode glyph carries explanatory help-echo."
+ (test-eat-state--with-fake-eat-buffer
+ (setq-local eat--semi-char-mode t)
+ (let* ((s (cj/--modeline-eat-state))
+ (pos (text-property-not-all 0 (length s) 'help-echo nil s)))
+ (should pos)
+ (should (string-match-p "semi-char" (get-text-property pos 'help-echo s))))))
+
+(provide 'test-modeline-config-eat-state)
+;;; test-modeline-config-eat-state.el ends here