X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Ftest.lisp;h=b6e85dbd6d9a20de7088a19aec8f31c2fa97ae94;hb=d71409025cf489343851dc844e5619f5aa7754bc;hp=82b0c6cb7d11fe3c6c36c84c89db92395a30efc2;hpb=1454981ac5f4f7ea8fe741a8125efbf0b09497ea;p=fiveam.git diff --git a/src/test.lisp b/src/test.lisp index 82b0c6c..b6e85db 100644 --- a/src/test.lisp +++ b/src/test.lisp @@ -12,11 +12,16 @@ ;;;; collection of tests and test suites. (deflookup-table test + :at-redefinition nil :documentation "Lookup table mapping test (and test suite) names to objects.") +(defun test-names () + (loop for test being the hash-keys of *test* + collect test)) + (defmacro test (name &body body) - "Create a suite named NAME. If NAME is a list it must be of the + "Create a test named NAME. If NAME is a list it must be of the form: (name &key depends-on suite) @@ -41,27 +46,37 @@ If DEPENDS-ON is a symbol it is interpreted as `(AND depending on another. SUITE defaults to the current value of *SUITE*." - (destructuring-bind (name &key depends-on (suite nil suite-supplied-p)) + (destructuring-bind (name &key depends-on (suite nil suite-supplied-p) (compile-at :run-time)) (ensure-list name) - (let (lambda description) + (declare (type (member :run-time :definition-time) compile-at)) + (let (description) (setf description (if (stringp (car body)) (pop body) - "") - lambda body) + "")) `(progn - (setf (get-test ',name) - (make-instance 'test-case - :name ',name - :test-lambda (lambda () ,@lambda) - :description ,description - :depends-on ',depends-on)) + (setf (get-test ',name) (make-instance 'test-case + :name ',name + :runtime-package ,*package* + :test-lambda + (lambda () + ,@(ecase compile-at + (:run-time `((funcall (let ((*package* ,*package*)) + (compile nil '(lambda () ,@body)))))) + (:definition-time body))) + :description ,description + :depends-on ',depends-on)) ,(if suite-supplied-p `(setf (gethash ',name (tests (get-test ',suite))) ',name) `(setf (gethash ',name (tests (or *suite* (get-test 'NIL)))) ',name)) + (when *run-test-when-defined* + (run! ',name)) ',name)))) +(defvar *run-test-when-defined* nil + "When non-NIL tests are run as soon as they are defined.") + ;; Copyright (c) 2002-2003, Edward Marco Baringer ;; All rights reserved. ;;