;;;; ** Creating Suits
+(defvar *suites* (make-hash-table))
+
(defmacro def-suite (name &key description (in nil in-p) (fixture nil fixture-p))
"Define a new test-suite named NAME.
FIXTURE is the fixture argument (exactly like the :fixture argument to
def-test) to pass to tests in this suite."
`(eval-when (:compile-toplevel :load-toplevel :execute)
- (make-suite ',name
- ,@(when description `(:description ,description))
- ,@(when in-p `(:in ',in))
- ,@(when fixture-p `(:fixture ',fixture)))
+ (setf (gethash ',name *suites*)
+ (make-suite ',name
+ ,@(when description `(:description ,description))
+ ,@(when in-p `(:in ',in))
+ ,@(when fixture-p `(:fixture ',fixture))))
',name))
(defmacro def-suite* (name &rest def-suite-args)
(setf (get-test name) suite)
suite))
+(defun list-all-suites ()
+ (loop for suite being the hash-value in *suites*
+ collect suite))
+
;;;; ** Managing the Current Suite
(defvar *suite* (setf (get-test 'NIL)
(is (= 1 a))
(is (= 1 b))))
+(def-test introspection ()
+ (is (= (length (list-all-suites))
+ (hash-table-count *suites*))))
+
(defvar *special-variable* nil)
(def-fixture fixture-for-suite (value)