]> git.eshelyaron.com Git - emacs.git/commitdiff
Add ert macros to get resource file names (Bug#43792)
authorStefan Kangas <stefan@marxist.se>
Wed, 23 Sep 2020 21:06:02 +0000 (23:06 +0200)
committerStefan Kangas <stefan@marxist.se>
Fri, 16 Oct 2020 09:18:38 +0000 (11:18 +0200)
* lisp/emacs-lisp/ert-x.el (subr-x): Require.
(ert-resource-dir, ert-resource-file): New macros to get the file name
of the resource directory belonging to a test.
(ert-resource-dir-format, ert-resource-dir-trim-left-regexp)
(ert-resource-dir-trim-right-regexp): New variables.

lisp/emacs-lisp/ert-x.el

index 6569b8ccc87c1d8aaf7c382c41746222cce4a087..abbff6da6254423e06e619b549b2374eaadcda6b 100644 (file)
@@ -30,6 +30,7 @@
 
 (eval-when-compile (require 'cl-lib))
 (require 'ert)
+(require 'subr-x) ; string-trim
 
 
 ;;; Test buffers.
@@ -353,6 +354,45 @@ convert it to a string and pass it to COLLECTOR first."
                            (funcall func object)))
       (funcall func object printcharfun))))
 
+(defvar ert-resource-directory-format "%s-resources/"
+  "Format for `ert-resource-directory'.")
+(defvar ert-resource-directory-trim-left-regexp ""
+  "Regexp for `string-trim' (left) used by `ert-resource-directory'.")
+(defvar ert-resource-directory-trim-right-regexp "\\(-tests?\\)?\\.el"
+  "Regexp for `string-trim' (right) used by `ert-resource-directory'.")
+
+;; Has to be a macro for `load-file-name'.
+(defmacro ert-resource-directory ()
+  "Return absolute file name of the resource directory for this file.
+
+The path to the resource directory is the \"resources\" directory
+in the same directory as the test file.
+
+If that directory doesn't exist, use the directory named like the
+test file but formatted by `ert-resource-directory-format' and trimmed
+using `string-trim' with arguments
+`ert-resource-directory-trim-left-regexp' and
+`ert-resource-directory-trim-right-regexp'.  The default values mean
+that if called from a test file named \"foo-tests.el\", return
+the absolute file name for \"foo-resources\"."
+  `(let* ((testfile ,(or (bound-and-true-p byte-compile-current-file)
+                         (and load-in-progress load-file-name)
+                         buffer-file-name))
+          (default-directory (file-name-directory testfile)))
+     (file-truename
+      (if (file-accessible-directory-p "resources/")
+          (expand-file-name "resources/")
+        (expand-file-name
+         (format ert-resource-directory-format
+                 (string-trim testfile
+                              ert-resource-directory-trim-left-regexp
+                              ert-resource-directory-trim-right-regexp)))))))
+
+(defmacro ert-resource-file (file)
+  "Return file name of resource file named FILE.
+A resource file is in the resource directory as per
+`ert-resource-directory'."
+  `(expand-file-name ,file (ert-resource-directory)))
 
 (provide 'ert-x)