FIX: Store *package* at definition time for tests and rebind it at runtime
authorAttila Lendvai <attila.lendvai@gmail.com>
Sat, 14 Oct 2006 15:31:22 +0000 (17:31 +0200)
committerattila.lendvai <attila.lendvai@gmail.com>
Sat, 14 Oct 2006 15:31:22 +0000 (17:31 +0200)
src/classes.lisp
src/run.lisp
src/test.lisp

index d2dcbdd..964b8db 100644 (file)
@@ -41,7 +41,9 @@ suite) in the suite."))
 
 (defclass test-case (testable-object)
   ((test-lambda :initarg :test-lambda :accessor test-lambda
-               :documentation "The function to run."))
+               :documentation "The function to run.")
+   (runtime-package :initarg :runtime-package :accessor runtime-package
+                    :documentation "By default it stores *package* from the time this test was defined (macroexpanded)."))
   (:documentation "A test case is a single, named, collection of
 checks.
 
index 58877e0..dbdd4ed 100644 (file)
@@ -147,7 +147,8 @@ run."))
                                              (abort-test e)
                                              (return-from run-it result-list)))))
                      (restart-case
-                         (let ((*readtable* (copy-readtable)))
+                         (let ((*readtable* (copy-readtable))
+                               (*package* (runtime-package test)))
                            (funcall (test-lambda test)))
                        (retest ()
                          :report (lambda (stream)
index ccdcb0a..553a64e 100644 (file)
@@ -54,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))))