Properly report errors about unbound ERT test symbols.

Assertions should only be used to check internal consistency within a
package, not to check arguments passed by callers.  Instead, define
and use a new error symbol.

* lisp/emacs-lisp/ert.el (ert-test-unbound): New error symbol.
(ert-select-tests): Use it.

* test/lisp/emacs-lisp/ert-tests.el (ert-test-select-undefined): New
unit test.

* etc/NEWS: Document new behavior.
This commit is contained in:
Philipp Stephani 2021-12-30 16:59:16 +01:00
parent 94891dd225
commit f6da1eed74
3 changed files with 16 additions and 2 deletions

View file

@ -1012,7 +1012,8 @@ contained in UNIVERSE."
universe))))
((pred ert-test-p) (list selector))
((pred symbolp)
(cl-assert (ert-test-boundp selector))
(unless (ert-test-boundp selector)
(signal 'ert-test-unbound (list selector)))
(list (ert-get-test selector)))
(`(,operator . ,operands)
(cl-ecase operator
@ -1020,7 +1021,9 @@ contained in UNIVERSE."
(mapcar (lambda (purported-test)
(pcase-exhaustive purported-test
((pred symbolp)
(cl-assert (ert-test-boundp purported-test))
(unless (ert-test-boundp purported-test)
(signal 'ert-test-unbound
(list purported-test)))
(ert-get-test purported-test))
((pred ert-test-p) purported-test)))
operands))
@ -1059,6 +1062,8 @@ contained in UNIVERSE."
(cl-remove-if-not (car operands)
(ert-select-tests 't universe)))))))
(define-error 'ert-test-unbound "ERT test is unbound")
(defun ert--insert-human-readable-selector (selector)
"Insert a human-readable presentation of SELECTOR into the current buffer."
;; This is needed to avoid printing the (huge) contents of the