aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/test-ai-term--keybindings.el28
-rw-r--r--tests/test-ai-term--show-or-create.el98
2 files changed, 59 insertions, 67 deletions
diff --git a/tests/test-ai-term--keybindings.el b/tests/test-ai-term--keybindings.el
index a8b92ffa8..6f7f53a5e 100644
--- a/tests/test-ai-term--keybindings.el
+++ b/tests/test-ai-term--keybindings.el
@@ -4,12 +4,11 @@
;; ai-term lives under the C-; a prefix (vacated when gptel was archived), with
;; the frequent "swap to the next agent" also on M-SPC for a fast chord. M-SPC
;; must reach Emacs from inside an agent buffer, so it is bound in
-;; `ghostel-mode-map' and added to `ghostel-keymap-exceptions' (the semi-char
-;; map otherwise forwards it to the pty). C-; is already an exception via
-;; term-config, so the C-; a family resolves through the global prefix. These
-;; tests require ghostel (so ai-term's `with-eval-after-load' fires) before
-;; ai-term, then confirm the bindings landed and the old F9 family is gone.
-;; `(require 'ghostel)' does not load the native module, so this stays light.
+;; `eat-semi-char-mode-map' (EAT forwards unbound keys to the pty otherwise).
+;; C-; is already bound there via eat-config, so the C-; a family resolves
+;; through the global prefix. These tests require eat (so ai-term's
+;; `with-eval-after-load' fires) before ai-term, then confirm the bindings
+;; landed and the old F9 family is gone.
;;; Code:
@@ -19,7 +18,7 @@
(setq package-user-dir (expand-file-name "elpa" user-emacs-directory))
(package-initialize)
(add-to-list 'load-path (expand-file-name "modules" user-emacs-directory))
-(require 'ghostel)
+(require 'eat)
(require 'ai-term)
(ert-deftest test-ai-term-keymap-leaf-bindings ()
@@ -37,16 +36,11 @@
"Normal: M-SPC runs `cj/ai-term-next' (the fast swap chord)."
(should (eq (lookup-key (current-global-map) (kbd "M-SPC")) #'cj/ai-term-next)))
-(ert-deftest test-ai-term-meta-space-bound-in-ghostel-mode-map ()
- "Normal: M-SPC is bound in `ghostel-mode-map' so swap works inside an agent."
- (should (eq (keymap-lookup ghostel-mode-map "M-SPC") #'cj/ai-term-next)))
-
-(ert-deftest test-ai-term-meta-space-in-keymap-exceptions ()
- "Regression: M-SPC is in `ghostel-keymap-exceptions' so semi-char mode lets it
-reach Emacs instead of forwarding it to the pty."
- (should (member "M-SPC" ghostel-keymap-exceptions))
- (should-not (eq (keymap-lookup ghostel-semi-char-mode-map "M-SPC")
- 'ghostel--send-event)))
+(ert-deftest test-ai-term-meta-space-bound-in-eat-semi-char-mode-map ()
+ "Normal: M-SPC is bound in `eat-semi-char-mode-map' so swap works inside an
+agent. EAT forwards unbound keys to the pty, so the bind is what lets it reach
+Emacs -- no ghostel-style exception list or rebuild is needed."
+ (should (eq (keymap-lookup eat-semi-char-mode-map "M-SPC") #'cj/ai-term-next)))
(ert-deftest test-ai-term-f9-family-removed-globally ()
"Regression: the old F9 family no longer binds the ai-term commands globally."
diff --git a/tests/test-ai-term--show-or-create.el b/tests/test-ai-term--show-or-create.el
index c6653dcdd..4f5f1f67f 100644
--- a/tests/test-ai-term--show-or-create.el
+++ b/tests/test-ai-term--show-or-create.el
@@ -3,13 +3,13 @@
;;; Commentary:
;; Tests the show-or-create branching:
;;
-;; - buffer absent -> ghostel called, agent command + newline sent
-;; - buffer present, live -> ghostel not called, buffer displayed
-;; - buffer present, dead -> old buffer killed, ghostel recreates
+;; - buffer absent -> eat called, agent command + newline sent
+;; - buffer present, live -> eat not called, buffer displayed
+;; - buffer present, dead -> old buffer killed, eat recreates
;;
-;; ghostel functions are stubbed so the test does no process spawning and
-;; never loads the native module. Production calls (ghostel) with no name and
-;; relies on the dynamically bound `ghostel-buffer-name'; the mock honors that.
+;; eat + the send helper are stubbed so the test does no process spawning.
+;; Production calls (eat) and relies on the dynamically bound `eat-buffer-name';
+;; the mock honors that.
;;; Code:
@@ -19,19 +19,17 @@
(add-to-list 'load-path (expand-file-name "modules" user-emacs-directory))
(require 'ai-term)
-;; ghostel isn't loaded in batch -- provide stubs so cl-letf has overrides.
-(unless (fboundp 'ghostel)
- (defun ghostel (&optional _arg) nil))
-(unless (fboundp 'ghostel-send-string)
- (defun ghostel-send-string (_s) nil))
+;; eat isn't loaded in batch -- provide a stub so cl-letf has an override.
+(unless (fboundp 'eat)
+ (defun eat (&optional _program _arg) nil))
-(defmacro test-ai-term--with-mock-ghostel (vars &rest body)
- "Run BODY with ghostel + ghostel-send-string mocked.
+(defmacro test-ai-term--with-mock-eat (vars &rest body)
+ "Run BODY with eat + `cj/--ai-term-send-string' mocked.
-VARS is a plist of capture variable names: :calls (buffer names ghostel
-was asked to create), :strings (sent strings), :default-dir. The mocked
-`ghostel' creates and returns a buffer named after the dynamically bound
-`ghostel-buffer-name', mirroring the real entry point."
+VARS is a plist of capture variable names: :calls (buffer names eat was asked
+to create), :strings (sent strings), :default-dir. The mocked `eat' creates
+and returns a buffer named after the dynamically bound `eat-buffer-name',
+mirroring the real entry point."
(declare (indent 1) (debug t))
(let ((calls (plist-get vars :calls))
(strings (plist-get vars :strings))
@@ -39,14 +37,14 @@ was asked to create), :strings (sent strings), :default-dir. The mocked
`(let ((,calls '())
(,strings '())
(,ddir nil))
- (cl-letf (((symbol-function 'ghostel)
- (lambda (&optional _arg)
+ (cl-letf (((symbol-function 'eat)
+ (lambda (&optional _program _arg)
(setq ,ddir default-directory)
- (let ((b (get-buffer-create ghostel-buffer-name)))
+ (let ((b (get-buffer-create eat-buffer-name)))
(push (buffer-name b) ,calls)
b)))
- ((symbol-function 'ghostel-send-string)
- (lambda (s) (push s ,strings))))
+ ((symbol-function 'cj/--ai-term-send-string)
+ (lambda (_buf s) (push s ,strings))))
,@body))))
(defun test-ai-term--cleanup (name)
@@ -55,33 +53,33 @@ was asked to create), :strings (sent strings), :default-dir. The mocked
(kill-buffer name)))
(ert-deftest test-ai-term--show-or-create-creates-when-buffer-missing ()
- "Normal: no existing buffer -> ghostel called once, launch cmd + newline
-sent, the project recorded at the front of the MRU list."
+ "Normal: no existing buffer -> eat called once, launch cmd + newline sent,
+the project recorded at the front of the MRU list."
(let ((name "agent [normal-create-test]")
(cj/--ai-term-mru nil))
(test-ai-term--cleanup name)
(unwind-protect
- (test-ai-term--with-mock-ghostel (:calls calls :strings strings
- :default-dir ddir)
+ (test-ai-term--with-mock-eat (:calls calls :strings strings
+ :default-dir ddir)
(cj/--ai-term-show-or-create "/tmp/some-project" name)
(should (equal calls (list name)))
- (should (equal (reverse strings)
- (list (cj/--ai-term-launch-command "/tmp/some-project")
- "\n")))
+ (should (equal strings
+ (list (concat (cj/--ai-term-launch-command "/tmp/some-project")
+ "\n"))))
(should (equal ddir "/tmp/some-project"))
(should (equal (car cj/--ai-term-mru) "/tmp/some-project")))
(test-ai-term--cleanup name))))
(ert-deftest test-ai-term--show-or-create-displays-existing-when-process-live ()
- "Normal: buffer exists with live process -> ghostel not called."
+ "Normal: buffer exists with live process -> eat not called."
(let ((name "agent [reuse-test]"))
(test-ai-term--cleanup name)
(unwind-protect
(let ((buf (get-buffer-create name)))
(cl-letf (((symbol-function 'cj/--ai-term-process-live-p)
(lambda (b) (and (eq b buf) t))))
- (test-ai-term--with-mock-ghostel (:calls calls :strings strings
- :default-dir _ddir)
+ (test-ai-term--with-mock-eat (:calls calls :strings strings
+ :default-dir _ddir)
(cj/--ai-term-show-or-create "/tmp/reuse" name)
(should (null calls))
(should (null strings)))))
@@ -95,27 +93,27 @@ sent, the project recorded at the front of the MRU list."
(let ((stale (get-buffer-create name)))
(cl-letf (((symbol-function 'cj/--ai-term-process-live-p)
(lambda (_b) nil)))
- (test-ai-term--with-mock-ghostel (:calls calls :strings strings
- :default-dir _ddir)
+ (test-ai-term--with-mock-eat (:calls calls :strings strings
+ :default-dir _ddir)
(cj/--ai-term-show-or-create "/tmp/dead" name)
(should (equal calls (list name)))
- (should (equal (reverse strings)
- (list (cj/--ai-term-launch-command "/tmp/dead")
- "\n")))
+ (should (equal strings
+ (list (concat (cj/--ai-term-launch-command "/tmp/dead")
+ "\n"))))
(should-not (buffer-live-p stale)))))
(test-ai-term--cleanup name))))
(ert-deftest test-ai-term--show-or-create-preserves-selected-window ()
- "Regression: ghostel's same-window switch must not bury the dashboard.
+ "Regression: eat's same-window switch must not bury the dashboard.
-Real `ghostel' switches the selected window to its buffer as a side-effect of
+Real `eat' switches the selected window to its buffer as a side-effect of
construction. On a fresh-boot frame (one window showing the dashboard), that
side-effect would otherwise leave the original window pointing at the new
-agent buffer. The wrapper runs `(ghostel)' inside `save-window-excursion' so
-the original window state is restored before `display-buffer' fires, leaving
-the dashboard put and letting the alist place agent into a fresh split.
+agent buffer. The wrapper runs `(eat)' inside `save-window-excursion' so the
+original window state is restored before `display-buffer' fires, leaving the
+dashboard put and letting the alist place agent into a fresh split.
-This test stubs `ghostel' to mimic the same-window side-effect and asserts the
+This test stubs `eat' to mimic the same-window side-effect and asserts the
originally-selected window still shows its original buffer afterward."
(let ((agent-name "agent [preserve-window-test]")
(orig-name "*test-original-buffer*"))
@@ -128,24 +126,24 @@ originally-selected window still shows its original buffer afterward."
(orig-win (selected-window)))
(set-window-buffer orig-win orig-buf)
(cl-letf
- (((symbol-function 'ghostel)
- (lambda (&optional _arg)
- (let ((buf (get-buffer-create ghostel-buffer-name)))
+ (((symbol-function 'eat)
+ (lambda (&optional _program _arg)
+ (let ((buf (get-buffer-create eat-buffer-name)))
(set-window-buffer (selected-window) buf)
buf)))
- ((symbol-function 'ghostel-send-string)
- (lambda (_s) nil)))
+ ((symbol-function 'cj/--ai-term-send-string)
+ (lambda (_buf _s) nil)))
(cj/--ai-term-show-or-create "/tmp/preserve" agent-name)
(should (eq (window-buffer orig-win) orig-buf)))))
(test-ai-term--cleanup agent-name)
(when (get-buffer orig-name) (kill-buffer orig-name)))))
(ert-deftest test-ai-term--show-or-create-returns-buffer ()
- "Normal: return value is the ghostel buffer named after the project."
+ "Normal: return value is the eat buffer named after the project."
(let ((name "agent [return-test]"))
(test-ai-term--cleanup name)
(unwind-protect
- (test-ai-term--with-mock-ghostel (:calls _c :strings _s :default-dir _d)
+ (test-ai-term--with-mock-eat (:calls _c :strings _s :default-dir _d)
(let ((result (cj/--ai-term-show-or-create "/tmp/return" name)))
(should (bufferp result))
(should (equal (buffer-name result) name))))