names to objects.")
(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)
SUITE defaults to the current value of *SUITE*."
(destructuring-bind (name &key depends-on (suite nil suite-supplied-p))
(ensure-list name)
- (let (lambda description)
+ (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
+ :test-lambda
+ (lambda ()
+ (funcall (compile nil '(lambda () ,@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.
;;