Add generated suffix to test temp file names

* 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.
This commit is contained in:
Stefan Kangas 2021-11-06 21:54:02 +01:00
parent 9dfd945a2c
commit 5dd27fef58
2 changed files with 31 additions and 7 deletions

View 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))

View 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