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:
parent
94891dd225
commit
f6da1eed74
3 changed files with 16 additions and 2 deletions
3
etc/NEWS
3
etc/NEWS
|
@ -175,6 +175,9 @@ When environment variable 'EMACS_TEST_JUNIT_REPORT' is set, ERT
|
|||
generates a JUnit test report under this file name. This is useful
|
||||
for Emacs integration into CI/CD test environments.
|
||||
|
||||
*** Unbound test symbols now signal an 'ert-test-unbound' error.
|
||||
This affects the 'ert-select-tests' function and its callers.
|
||||
|
||||
** Emoji
|
||||
|
||||
+++
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -495,6 +495,12 @@ This macro is used to test if macroexpansion in `should' works."
|
|||
(should (equal (ert-select-tests '(tag b) (list test)) (list test)))
|
||||
(should (equal (ert-select-tests '(tag c) (list test)) '()))))
|
||||
|
||||
(ert-deftest ert-test-select-undefined ()
|
||||
(let* ((symbol (make-symbol "ert-not-a-test"))
|
||||
(data (should-error (ert-select-tests symbol t)
|
||||
:type 'ert-test-unbound)))
|
||||
(should (eq (cadr data) symbol))))
|
||||
|
||||
|
||||
;;; Tests for utility functions.
|
||||
(ert-deftest ert-test-parse-keys-and-body ()
|
||||
|
|
Loading…
Add table
Reference in a new issue