FIX: Store *package* at definition time for tests and rebind it at runtime
[fiveam.git] / src / test.lisp
index 7d763d1..553a64e 100644 (file)
   :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 test named NAME. If NAME is a list it must be of the
 form:
@@ -50,6 +54,7 @@ SUITE defaults to the current value of *SUITE*."
       `(progn
         (setf (get-test ',name) (make-instance 'test-case
                                                 :name ',name
+                                                :runtime-package ,*package*
                                                 :test-lambda
                                                 (lambda ()
                                                   (funcall (compile nil '(lambda () ,@body))))
@@ -60,8 +65,13 @@ SUITE defaults to the current value of *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. 
 ;;