diff options
| author | Craig Jennings <c@cjennings.net> | 2026-06-24 16:18:27 -0400 |
|---|---|---|
| committer | Craig Jennings <c@cjennings.net> | 2026-06-24 16:18:27 -0400 |
| commit | d47f4f90bb1c69697a855a662bb07be1e0ccdc33 (patch) | |
| tree | 777d0b786a530cb4190f8e062e0afda2506308d4 /tests/test-bootstrap.el | |
| parent | ab8cc4da57fce5d0a59f4db34fb550919a06ea79 (diff) | |
| download | chime-d47f4f90bb1c69697a855a662bb07be1e0ccdc33.tar.gz chime-d47f4f90bb1c69697a855a662bb07be1e0ccdc33.zip | |
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.el | 23 |
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 |
