aboutsummaryrefslogtreecommitdiff
path: root/tests/test-bootstrap.el
diff options
context:
space:
mode:
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