X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Frun.lisp;h=31a3f02bf831087ec4b34e26fbb5aec11b4b02af;hb=7d4e022893800af3a0b3818b7da807907e94a830;hp=0ebc771e534a7582d3fe0b6db45a8971f6e60f9d;hpb=1b24abf09e9fbb2a23c25a9583e5547514482f1b;p=fiveam.git diff --git a/src/run.lisp b/src/run.lisp index 0ebc771..31a3f02 100644 --- a/src/run.lisp +++ b/src/run.lisp @@ -1,6 +1,6 @@ -;; -*- lisp -*- +;;;; -*- Mode: Lisp; indent-tabs-mode: nil -*- -(in-package :it.bese.FiveAM) +(in-package :it.bese.fiveam) ;;;; * Running Tests @@ -56,7 +56,7 @@ between test-cases has been detected.")) (defgeneric run-resolving-dependencies (test) (:documentation "Given a dependency spec determine if the spec is satisfied or not, this will generally involve running other -tests. If the dependency spec can be satisfied the test is alos +tests. If the dependency spec can be satisfied the test is also run.")) (defmethod run-resolving-dependencies ((test test-case)) @@ -89,6 +89,8 @@ run.")) (setf (status test) :circular)))) (t (status test)))) +(defgeneric resolve-dependencies (depends-on)) + (defmethod resolve-dependencies ((depends-on symbol)) "A test which depends on a symbol is interpreted as `(AND ,DEPENDS-ON)." @@ -128,6 +130,8 @@ run.")) (funcall test-lambda) result-list)) +(defgeneric run-test-lambda (test)) + (defmethod run-test-lambda ((test test-case)) (with-run-state (result-list) (bind-run-state ((current-test test)) @@ -154,8 +158,9 @@ run.")) (let ((*readtable* (copy-readtable)) (*package* (runtime-package test))) (if (collect-profiling-info test) - (setf (profiling-info test) - (arnesi:collect-timing (test-lambda test))) + ;; Timing info doesn't get collected ATM, we need a portable library + ;; (setf (profiling-info test) (collect-timing (test-lambda test))) + (funcall (test-lambda test)) (funcall (test-lambda test)))) (retest () :report (lambda (stream) @@ -192,17 +197,17 @@ run.")) (bind-run-state ((result-list '())) (unwind-protect (if (collect-profiling-info suite) - (setf (profiling-info suite) (collect-timing #'run-tests)) + ;; Timing info doesn't get collected ATM, we need a portable library + ;; (setf (profiling-info suite) (collect-timing #'run-tests)) + (run-tests) (run-tests))) (setf suite-results result-list - (status suite) (every (lambda (res) - (typep res 'test-passed)) - suite-results))) + (status suite) (every #'test-passed-p suite-results))) (with-run-state (result-list) (setf result-list (nconc result-list suite-results))))))) (defmethod %run ((test-name symbol)) - (when-bind test (get-test test-name) + (when-let (test (get-test test-name)) (%run test))) (defvar *initial-!* (lambda () (format t "Haven't run that many tests yet.~%"))) @@ -214,7 +219,7 @@ run.")) ;;;; ** Public entry points (defun run! (&optional (test-spec *suite*)) - "Equivalent to (explain (run TEST-SPEC))." + "Equivalent to (explain! (run TEST-SPEC))." (explain! (run test-spec))) (defun explain! (result-list) @@ -235,8 +240,8 @@ 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)) + (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))