aboutsummaryrefslogtreecommitdiff
path: root/tests/test-ai-config-gptel-prompt-tab-width.el
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2026-05-18 02:24:30 -0400
committerCraig Jennings <c@cjennings.net>2026-05-18 02:24:30 -0400
commit78d03e66fd5ccc37b464967e96213ad858cda1c9 (patch)
tree2a6400a3074a3155da557028000e299c4246c409 /tests/test-ai-config-gptel-prompt-tab-width.el
parent44587a3edf0d06fb50371450b1b4f92b587f0e85 (diff)
downloaddotemacs-78d03e66fd5ccc37b464967e96213ad858cda1c9.tar.gz
dotemacs-78d03e66fd5ccc37b464967e96213ad858cda1c9.zip
refactor(ai-config): switch gptel to local fork, drop tab-width advice
I switched the gptel use-package form to `:load-path "~/code/gptel"` with `:ensure nil` so Emacs loads from the fork instead of the MELPA release. The fork now carries the narrow `tab-width' copy in `gptel-org--create-prompt' that karthink redirected the upstream PR to, which replaces the local `:around' advice on `gptel--with-buffer-copy-internal' I'd been carrying. I also dropped the stale test file `tests/test-ai-config-gptel-prompt-tab-width.el' and the matching stub in `tests/testutil-ai-config.el'. Both existed only to test the advice I removed.
Diffstat (limited to 'tests/test-ai-config-gptel-prompt-tab-width.el')
-rw-r--r--tests/test-ai-config-gptel-prompt-tab-width.el106
1 files changed, 0 insertions, 106 deletions
diff --git a/tests/test-ai-config-gptel-prompt-tab-width.el b/tests/test-ai-config-gptel-prompt-tab-width.el
deleted file mode 100644
index 6f857cdc..00000000
--- a/tests/test-ai-config-gptel-prompt-tab-width.el
+++ /dev/null
@@ -1,106 +0,0 @@
-;;; test-ai-config-gptel-prompt-tab-width.el --- Tests for gptel prompt-buffer tab-width fix -*- lexical-binding: t; -*-
-
-;;; Commentary:
-;; Regression tests for the `org-element--list-struct: Tab width in Org
-;; files must be 8, not 4' error that fires when `gptel-magit' is
-;; invoked from a `COMMIT_EDITMSG' buffer where `git-commit-major-mode'
-;; is `org-mode'.
-;;
-;; Root cause: gptel's `gptel--with-buffer-copy-internal'
-;; (gptel-request.el:945) sets the prompt buffer's `major-mode' to the
-;; source buffer's mode as a *symbol*, without running mode hooks. So
-;; an inherited `org-mode' prompt buffer keeps the global default
-;; `tab-width' (4 in this config) — `org-mode-hook' never runs to set
-;; 8. When gptel later parses the prompt buffer with `org-element',
-;; Org's `tab-width=8' guard raises.
-;;
-;; Fix: an `:around' advice on `gptel--with-buffer-copy-internal' in
-;; ai-config.el sets `tab-width=8' inside the prompt buffer when its
-;; inherited `major-mode' is `org-mode'.
-;;
-;; These tests verify the advice fires for org-mode source buffers and
-;; stays out of the way for other modes. Each test pins
-;; `default-value' of `tab-width' to 4 — matching Craig's real config
-;; — so the advice's effect is observable in batch tests (where the
-;; default would otherwise be Emacs's built-in 8).
-
-;;; Code:
-
-(require 'ert)
-
-(add-to-list 'load-path (expand-file-name "tests" user-emacs-directory))
-(add-to-list 'load-path (expand-file-name "modules" user-emacs-directory))
-
-;; testutil-ai-config provides the gptel--with-buffer-copy-internal stub
-;; and the gptel stubs ai-config needs to load.
-(require 'testutil-ai-config)
-(require 'ai-config)
-
-(defmacro test-ai-config--with-default-tab-width (sentinel &rest body)
- "Bind `default-value' of `tab-width' to SENTINEL during BODY.
-Restores the prior default on unwind. New buffers created inside BODY
-inherit SENTINEL as their `tab-width'."
- (declare (indent 1))
- `(let ((saved (default-value 'tab-width)))
- (unwind-protect
- (progn (setq-default tab-width ,sentinel)
- ,@body)
- (setq-default tab-width saved))))
-
-;;; Normal Cases
-
-(ert-deftest test-ai-config-gptel-prompt-tab-width-org-mode-source-sets-8 ()
- "Normal: source buffer in `org-mode' → prompt buffer has `tab-width=8'.
-Regression net for the `org-element--list-struct: Tab width must be 8'
-error when gptel-magit runs from COMMIT_EDITMSG with
-`git-commit-major-mode=org-mode'."
- (test-ai-config--with-default-tab-width 4
- (let ((recorded nil))
- (with-temp-buffer
- (setq major-mode 'org-mode)
- (gptel--with-buffer-copy-internal
- (current-buffer) nil nil
- (lambda () (setq recorded tab-width))))
- (should (= recorded 8)))))
-
-;;; Boundary Cases
-
-(ert-deftest test-ai-config-gptel-prompt-tab-width-text-mode-source-not-overridden ()
- "Boundary: source buffer in `text-mode' → advice does NOT set `tab-width=8'.
-Only `org-mode' source triggers the override; other modes keep the
-inherited default."
- (test-ai-config--with-default-tab-width 4
- (let ((recorded nil))
- (with-temp-buffer
- (setq major-mode 'text-mode)
- (gptel--with-buffer-copy-internal
- (current-buffer) nil nil
- (lambda () (setq recorded tab-width))))
- (should (= recorded 4)))))
-
-(ert-deftest test-ai-config-gptel-prompt-tab-width-fundamental-mode-source-not-overridden ()
- "Boundary: source buffer in `fundamental-mode' → no override.
-Confirms the advice's `(eq major-mode 'org-mode)' gate is strict."
- (test-ai-config--with-default-tab-width 4
- (let ((recorded nil))
- (with-temp-buffer
- (setq major-mode 'fundamental-mode)
- (gptel--with-buffer-copy-internal
- (current-buffer) nil nil
- (lambda () (setq recorded tab-width))))
- (should (= recorded 4)))))
-
-(ert-deftest test-ai-config-gptel-prompt-tab-width-advice-does-not-leak ()
- "Boundary: advice's `setq-local' stays buffer-local to the prompt buffer.
-After body-thunk completes and the prompt buffer is killed, the source
-buffer's `tab-width' is unchanged."
- (with-temp-buffer
- (setq major-mode 'org-mode)
- (setq-local tab-width 4)
- (gptel--with-buffer-copy-internal
- (current-buffer) nil nil
- (lambda () nil))
- (should (= tab-width 4))))
-
-(provide 'test-ai-config-gptel-prompt-tab-width)
-;;; test-ai-config-gptel-prompt-tab-width.el ends here