X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fsuite.lisp;h=e7aab24ff3cc8bf085f62ee16a40bec3481ab0b5;hb=fdc09912d20111bc61a5be162c4728c1fb5f41ed;hp=0118e1a5012c5b3324a04cc9cc5436219559a3cb;hpb=7caced9155e32d2e04db2f574057c33f3fda85ab;p=fiveam.git diff --git a/src/suite.lisp b/src/suite.lisp index 0118e1a..e7aab24 100644 --- a/src/suite.lisp +++ b/src/suite.lisp @@ -20,7 +20,9 @@ "Define a new test-suite named NAME. IN (a symbol), if provided, causes this suite te be nested in the -suite named by IN." +suite named by IN. NB: This macro is built on top of make-suite, +as such it, like make-suite, will overrwrite any existing suite +named NAME." `(progn (make-suite ',name ,@(when description `(:description ,description)) @@ -28,7 +30,9 @@ suite named by IN." ',name)) (defun make-suite (name &key description in) - "Create a new test suite object." + "Create a new test suite object. + +Overides any existing suite named NAME." (let ((suite (make-instance 'test-suite :name name))) (when description (setf (description suite) description)) @@ -55,14 +59,22 @@ after the execution of this form are, unless specified otherwise, in the test-suite named SUITE-NAME. See also: DEF-SUITE *SUITE*" + `(%in-suite ,suite-name)) + +(defmacro in-suite* (suite-name &key in) + "Just like in-suite, but silently creates missing suites." + `(%in-suite ,suite-name :in ,in :fail-on-error nil)) + +(defmacro %in-suite (suite-name &key (fail-on-error t) in) (with-unique-names (suite) `(progn (if-bind ,suite (get-test ',suite-name) (setf *suite* ,suite) (progn - (cerror "Create a new suite named ~A." - "Unkown suite ~A." ',suite-name) - (setf (get-test ',suite-name) (make-suite ',suite-name) + (when ,fail-on-error + (cerror "Create a new suite named ~A." + "Unkown suite ~A." ',suite-name)) + (setf (get-test ',suite-name) (make-suite ',suite-name :in ',in) *suite* (get-test ',suite-name)))) ',suite-name)))