(*debug-on-failure* t))
(run! test-spec)))
+(defun reset-all-tests-status (&optional (tests *test*))
+ "Resets the status of all TESTS to :unknown."
+ (maphash-values
+ (lambda (test)
+ (setf (status test) :unknown))
+ tests))
+
+(defun run-and-set-recently (function)
+ "Shifts the recently executed tests and lastly executes FUNCTION."
+ (shiftf *!!!* *!!* *!* function)
+ (funcall function))
+
+(defun run-and-bind-result-list (function)
+ (run-and-set-recently
+ (lambda ()
+ (reset-all-tests-status)
+ (bind-run-state ((result-list '()))
+ (with-simple-restart
+ (explain "Ignore the rest of the tests and explain current results")
+ (funcall function))
+ result-list))))
+
(defun run (test-spec)
"Run the test specified by TEST-SPEC.
TEST-SPEC can be either a symbol naming a test or test suite, or
a testable-object object. This function changes the operations
performed by the !, !! and !!! functions."
- (psetf *!* (lambda ()
- (loop :for test :being :the :hash-keys :of *test*
- :do (setf (status (get-test test)) :unknown))
- (bind-run-state ((result-list '()))
- (with-simple-restart (explain "Ignore the rest of the tests and explain current results")
- (%run test-spec))
- result-list))
- *!!* *!*
- *!!!* *!!*)
- (funcall *!*))
+ (run-and-bind-result-list (lambda () (%run test-spec))))
(defun ! ()
"Rerun the most recently run test and explain the results."