]> git.eshelyaron.com Git - emacs.git/commitdiff
Add generated suffix to test temp file names
authorStefan Kangas <stefan@marxist.se>
Sat, 6 Nov 2021 20:54:02 +0000 (21:54 +0100)
committerStefan Kangas <stefan@marxist.se>
Sun, 7 Nov 2021 00:54:30 +0000 (01:54 +0100)
* lisp/emacs-lisp/ert-x.el
(ert-with-temp-file): Add temp file name suffix based on file name of
caller.  Reflow docstring.
(ert--with-temp-file-generate-suffix): New defun.
* test/lisp/emacs-lisp/ert-x-tests.el
(ert-x-tests--with-temp-file-generate-suffix): New test.

lisp/emacs-lisp/ert-x.el
test/lisp/emacs-lisp/ert-x-tests.el

index 2af956c8a6da8dc0ea5309fa1e1616b22b820065..752ac3bfdd48067edd8a04627a723c62c8dda10a 100644 (file)
@@ -352,7 +352,6 @@ convert it to a string and pass it to COLLECTOR first."
 (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 (test data) directory.
 
@@ -392,6 +391,17 @@ directory as returned by `ert-resource-directory'."
 (defvar ert-temp-file-suffix nil
   "Prefix used by `ert-with-temp-file' and `ert-with-temp-directory'.")
 
+(defun ert--with-temp-file-generate-suffix (filename)
+  "Generate temp file suffix from FILENAME."
+  (thread-last
+    (file-name-base filename)
+    (replace-regexp-in-string (rx string-start
+                                  (group (+? not-newline))
+                                  (regexp "-?tests?")
+                                  string-end)
+                              "\\1")
+    (concat "-")))
+
 (defmacro ert-with-temp-file (name &rest body)
   "Bind NAME to the name of a new temporary file and evaluate BODY.
 Delete the temporary file after BODY exits normally or
@@ -401,12 +411,15 @@ file.
 The following keyword arguments are supported:
 
 :prefix STRING  If non-nil, pass STRING to `make-temp-file' as
-                the PREFIX argument.  Otherwise, use the value
-                of `ert-temp-file-prefix'.
+                the PREFIX argument.  Otherwise, use the value of
+                `ert-temp-file-prefix'.
 
-:suffix STRING  If non-nil, pass STRING to `make-temp-file' as
-                the SUFFIX argument.  Otherwise, use the value
-                of `ert-temp-file-suffix'.
+:suffix STRING  If non-nil, pass STRING to `make-temp-file' as the
+                SUFFIX argument.  Otherwise, use the value of
+                `ert-temp-file-suffix'; if the value of that
+                variable is nil, generate a suffix based on the
+                name of the file that `ert-with-temp-file' is
+                called from.
 
 :text STRING    If non-nil, pass STRING to `make-temp-file' as
                 the TEXT argument.
@@ -427,7 +440,9 @@ See also `ert-with-temp-directory'."
       (error "Invalid keywords: %s" (mapconcat #'symbol-name extra-keywords " ")))
     (let ((temp-file (make-symbol "temp-file"))
           (prefix (or prefix ert-temp-file-prefix))
-          (suffix (or suffix ert-temp-file-suffix)))
+          (suffix (or suffix ert-temp-file-suffix
+                      (ert--with-temp-file-generate-suffix
+                       (or (macroexp-file-name) buffer-file-name)))))
       `(let* ((,temp-file (,(if directory 'file-name-as-directory 'identity)
                            (make-temp-file ,prefix ,directory ,suffix ,text)))
               (,name ,temp-file))
index 1eed5bb7b94d78196b8fccf62c7bb44eb7f9e19a..d7c0985b13e24dfe5dfde47151eb5094a51a1628 100644 (file)
@@ -271,6 +271,15 @@ desired effect."
     (cl-loop for x in '(0 1 2 3 4 t) do
              (should (equal (c x) (lisp x))))))
 
+(ert-deftest ert-x-tests--with-temp-file-generate-suffix ()
+  (should (equal (ert--with-temp-file-generate-suffix "foo.el") "-foo"))
+  (should (equal (ert--with-temp-file-generate-suffix "foo-test.el") "-foo"))
+  (should (equal (ert--with-temp-file-generate-suffix "foo-tests.el") "-foo"))
+  (should (equal (ert--with-temp-file-generate-suffix "foo-bar-baz.el")
+                 "-foo-bar-baz"))
+  (should (equal (ert--with-temp-file-generate-suffix "/foo/bar/baz.el")
+                 "-baz")))
+
 (ert-deftest ert-x-tests-with-temp-file ()
   (let (saved)
     (ert-with-temp-file fil