diff options
| author | Craig Jennings <c@cjennings.net> | 2026-07-02 09:43:55 -0400 |
|---|---|---|
| committer | Craig Jennings <c@cjennings.net> | 2026-07-02 09:43:55 -0400 |
| commit | 4b53b52507faef662a8f670b4b80cbe24290de95 (patch) | |
| tree | abb6903c19336cf2e53f0aefb6ddc4c5b886a2f2 /tests | |
| parent | 8357eed1e4753b142cdda0e57e00260f2341443e (diff) | |
| download | dotemacs-4b53b52507faef662a8f670b4b80cbe24290de95.tar.gz dotemacs-4b53b52507faef662a8f670b4b80cbe24290de95.zip | |
feat(ai-term): paint the agent accent dupre blue
Claude Code draws its accent (the bypass-permissions banner, borders, spinner) with xterm-256 palette codes, and the stock rose red is palette index 211. eat resolves those codes through a per-terminal face vector, so agent terminals now point index 211 at the new cj/ai-term-accent face (dupre blue #67809c) at creation. Every other eat terminal keeps the true palette. Per-project colors can later ride the same per-terminal mechanism.
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/test-ai-term--accent.el | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/tests/test-ai-term--accent.el b/tests/test-ai-term--accent.el new file mode 100644 index 00000000..7ffd71a1 --- /dev/null +++ b/tests/test-ai-term--accent.el @@ -0,0 +1,103 @@ +;;; test-ai-term--accent.el --- Tests for the agent-terminal accent color -*- lexical-binding: t; -*- + +;;; Commentary: +;; Tests the per-terminal accent recolor: the accent face's dupre-blue default, +;; the palette-index list, the apply helper that points a terminal's 256-color +;; palette entries at the accent face, and the show-or-create wiring. eat and +;; its terminal API are stubbed -- no process spawning, no eat load in batch. + +;;; Code: + +(require 'ert) +(require 'cl-lib) + +(add-to-list 'load-path (expand-file-name "modules" user-emacs-directory)) +(require 'ai-term) + +(declare-function cj/--ai-term-apply-accent "ai-term-backend-eat" (buffer)) +(declare-function cj/--ai-term-show-or-create "ai-term-backend-eat" (dir name)) + +(defvar cj/ai-term-accent-color-indices) +(defvar cj/--ai-term-mru) +(defvar eat-buffer-name) +(defvar eat-terminal) + +;; eat isn't loaded in batch -- provide stubs so cl-letf has overrides. +(unless (fboundp 'eat) + (defun eat (&optional _program _arg) nil)) +(unless (fboundp 'eat-term-set-parameter) + (defun eat-term-set-parameter (_terminal _parameter _value) nil)) + +;;; ------------------------------ accent face --------------------------------- + +(ert-deftest test-ai-term-accent-face-defaults-to-dupre-blue () + "Normal: the accent face exists and defaults to dupre blue (#67809c)." + (should (facep 'cj/ai-term-accent)) + (should (string-equal-ignore-case + (face-attribute 'cj/ai-term-accent :foreground nil t) + "#67809c"))) + +(ert-deftest test-ai-term-accent-indices-default () + "Normal: the remapped palette indices default to Claude Code's accent (211)." + (should (equal cj/ai-term-accent-color-indices '(211)))) + +;;; --------------------------- cj/--ai-term-apply-accent ---------------------- + +(ert-deftest test-ai-term-apply-accent-sets-palette-entries () + "Normal: every configured index is pointed at the accent face via the eat API." + (let ((set-params nil)) + (cl-letf (((symbol-function 'eat-term-set-parameter) + (lambda (_terminal parameter value) + (push (cons parameter value) set-params)))) + (with-temp-buffer + (setq-local eat-terminal 'dummy-terminal) + (cj/--ai-term-apply-accent (current-buffer)))) + (should (equal set-params '((color-211-face . cj/ai-term-accent)))))) + +(ert-deftest test-ai-term-apply-accent-multiple-indices () + "Boundary: several indices each get their own palette-entry call." + (let ((set-params nil) + (cj/ai-term-accent-color-indices '(211 174))) + (cl-letf (((symbol-function 'eat-term-set-parameter) + (lambda (_terminal parameter value) + (push (cons parameter value) set-params)))) + (with-temp-buffer + (setq-local eat-terminal 'dummy-terminal) + (cj/--ai-term-apply-accent (current-buffer)))) + (should (equal (sort (mapcar #'car set-params) #'string<) + '(color-174-face color-211-face))))) + +(ert-deftest test-ai-term-apply-accent-no-terminal-is-noop () + "Error: a buffer without a live eat terminal is left alone, no API call, no error." + (let ((set-params nil)) + (cl-letf (((symbol-function 'eat-term-set-parameter) + (lambda (_terminal parameter value) + (push (cons parameter value) set-params)))) + (with-temp-buffer + (cj/--ai-term-apply-accent (current-buffer)))) + (should-not set-params))) + +;;; ------------------------- show-or-create wiring ---------------------------- + +(ert-deftest test-ai-term-show-or-create-applies-accent-on-create () + "Normal: creating a fresh agent terminal applies the accent to its buffer." + (let ((name "agent [accent-wire-test]") + (cj/--ai-term-mru nil) + (applied nil)) + (when (get-buffer name) (kill-buffer name)) + (unwind-protect + (cl-letf (((symbol-function 'eat) + (lambda (&optional _program _arg) + (get-buffer-create eat-buffer-name))) + ((symbol-function 'cj/--ai-term-send-string) + (lambda (_buf _s) nil)) + ((symbol-function 'display-buffer) + (lambda (&rest _) nil)) + ((symbol-function 'cj/--ai-term-apply-accent) + (lambda (buffer) (push (buffer-name buffer) applied)))) + (cj/--ai-term-show-or-create "/tmp/accent-wire-test" name) + (should (equal applied (list name)))) + (when (get-buffer name) (kill-buffer name))))) + +(provide 'test-ai-term--accent) +;;; test-ai-term--accent.el ends here |
