aboutsummaryrefslogtreecommitdiff
path: root/tests/test-bootstrap.el
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2026-06-24 16:18:27 -0400
committerCraig Jennings <c@cjennings.net>2026-06-24 16:18:27 -0400
commitd47f4f90bb1c69697a855a662bb07be1e0ccdc33 (patch)
tree777d0b786a530cb4190f8e062e0afda2506308d4 /tests/test-bootstrap.el
parentab8cc4da57fce5d0a59f4db34fb550919a06ea79 (diff)
downloadchime-d47f4f90bb1c69697a855a662bb07be1e0ccdc33.tar.gz
chime-d47f4f90bb1c69697a855a662bb07be1e0ccdc33.zip
test: add chime-deftest fixture macro and centralize test requiresHEADmain
Every test hand-wrote the same scaffolding: call a per-file setup, wrap the body in unwind-protect, call a per-file teardown. That's 419 unwind-protect blocks and 68 near-identical setup/teardown defuns, with no shared fixture because ERT has no native per-test setup. I added a chime-deftest macro in test-bootstrap that creates the test base directory before the body and deletes it afterward, even on failure. I converted the 10 files whose fixture was exactly that base-dir create/delete and whose every test followed the standard shape, dropping their setup/teardown defuns. Files with custom fixtures (modeline state restore, validation reset) keep explicit setup/teardown, since the macro would silently drop their extra logic. I left the 4 tag-bearing integration files alone. I also moved the near-universal testutil-general and testutil-time requires into test-bootstrap, so individual files no longer repeat them. Behavior is unchanged: still 800 tests, full suite green. Converted bodies are copied verbatim, so the change only removes scaffolding, never an assertion.
Diffstat (limited to 'tests/test-bootstrap.el')
-rw-r--r--tests/test-bootstrap.el23
1 files changed, 23 insertions, 0 deletions
diff --git a/tests/test-bootstrap.el b/tests/test-bootstrap.el
index f53b9f1..40c333a 100644
--- a/tests/test-bootstrap.el
+++ b/tests/test-bootstrap.el
@@ -45,5 +45,28 @@
;; Load chime from parent directory
(load (expand-file-name "../chime.el") nil t)
+;; Load the near-universal test helpers so individual test files don't each
+;; repeat the require. testutil-general carries the base-dir fixture used by
+;; `chime-deftest' below; testutil-time carries the dynamic-time helpers.
+(require 'testutil-general (expand-file-name "testutil-general.el"))
+(require 'testutil-time (expand-file-name "testutil-time.el"))
+
+(defmacro chime-deftest (name arglist &rest body)
+ "Define an ERT test NAME with chime's standard base-dir fixture.
+ARGLIST is the `ert-deftest' argument list (normally nil). When the
+first form in BODY is a string it is kept as the test docstring. The
+remaining forms run inside the test base directory, created beforehand
+with `chime-create-test-base-dir' and removed afterward with
+`chime-delete-test-base-dir' even if a form signals."
+ (declare (indent 2) (doc-string 3))
+ (let* ((doc (and (stringp (car body)) (cdr body) (car body)))
+ (forms (if doc (cdr body) body)))
+ `(ert-deftest ,name ,arglist
+ ,@(and doc (list doc))
+ (chime-create-test-base-dir)
+ (unwind-protect
+ (progn ,@forms)
+ (chime-delete-test-base-dir)))))
+
(provide 'test-bootstrap)
;;; test-bootstrap.el ends here