]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix bug in how ERT invokes its debugger.
authorPhilipp Stephani <phst@google.com>
Mon, 7 Dec 2020 20:41:40 +0000 (21:41 +0100)
committerPhilipp Stephani <phst@google.com>
Mon, 7 Dec 2020 20:41:40 +0000 (21:41 +0100)
The debugger needs to receive a list of the error symbol and data;
cf. the documentation of the `debugger' variable.  This bug manifested
itself in ERT forms such as (should (integerp (ert-fail "Boo"))),
which resulted in an incorrect condition object.  Note that forms such
as (should (ert-fail "Boo")) weren't affected because they wouldn't
use the `ert--should-signal-hook'.

* test/emacs-lisp/ert.el (ert--should-signal-hook): Call debugger with
the right arguments.

* test/lisp/emacs-lisp/ert-tests.el (ert-test-fail-inside-should): Add
unit test.

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

index 5f29c2665a3923394e851c965af067915e8421f8..25237feae2aab66a4719d359c9215884ecf39012 100644 (file)
@@ -274,7 +274,7 @@ DATA is displayed to the user and should state the reason for skipping."
 It should only be stopped when ran from inside ert--run-test-internal."
   (when (and (not (symbolp debugger))   ; only run on anonymous debugger
              (memq error-symbol '(ert-test-failed ert-test-skipped)))
-    (funcall debugger 'error data)))
+    (funcall debugger 'error (list error-symbol data))))
 
 (defun ert--special-operator-p (thing)
   "Return non-nil if THING is a symbol naming a special operator."
index 1f54c8d07e4be22ccd325d4c99037bb6d91e2db6..a0c56be0cb041a442c57d85d502bf101971767df 100644 (file)
@@ -806,6 +806,16 @@ This macro is used to test if macroexpansion in `should' works."
   :expected-result :failed  ;; FIXME!  Bug#11218
   (should-not (with-demoted-errors (error "Foo"))))
 
+(ert-deftest ert-test-fail-inside-should ()
+  "Check that `ert-fail' inside `should' works correctly."
+  (let ((result (ert-run-test
+                 (make-ert-test
+                  :name 'test-1
+                  :body (lambda () (should (integerp (ert-fail "Boo"))))))))
+    (should (ert-test-failed-p result))
+    (should (equal (ert-test-failed-condition result)
+                   '(ert-test-failed ("Boo"))))))
+
 
 (provide 'ert-tests)