From 577c0b35891e2e503cf49de5e2916e0ea7f3a2fe Mon Sep 17 00:00:00 2001 From: Olof-Joachim Frahm Date: Thu, 23 Aug 2012 21:13:36 +0200 Subject: [PATCH] Split common functionality. --- src/run.lisp | 33 +++++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/src/run.lisp b/src/run.lisp index 417acd8..6e5a7ec 100644 --- a/src/run.lisp +++ b/src/run.lisp @@ -235,22 +235,35 @@ detailed-text-explainer with output going to *test-dribble*" (*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." -- 1.7.10.4