X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=tests%2Fcondition.impure.lisp;h=4cb5abe2440c146168683fdfdccc529be0933e26;hb=1a3ccb8ce23ea45adf80f356e8a116a8cf0c2ddc;hp=246a6a8336b34318b960ee504df6ed9164dcb825;hpb=784b195743728436795b90f95273c3535ebee9a5;p=sbcl.git diff --git a/tests/condition.impure.lisp b/tests/condition.impure.lisp index 246a6a8..4cb5abe 100644 --- a/tests/condition.impure.lisp +++ b/tests/condition.impure.lisp @@ -36,3 +36,37 @@ (setf (code-msg code) 2) (assert (eql (code-msg code) 2)) (assert (eql (%code-msg code) 1))) + +;;; Check that initializing the condition class metaobject doesn't create +;;; any instances. Reported by Marco Baringer on sbcl-devel Mon, 05 Jul 2004. +(defvar *condition-count* 0) +(define-condition counted-condition () ((slot :initform (incf *condition-count*)))) +(defmethod frob-counted-condition ((x counted-condition)) x) +(assert (= 0 *condition-count*)) +(assert (typep (sb-mop:class-prototype (find-class 'counted-condition)) + '(and condition counted-condition))) + +(define-condition picky-condition () ()) +(restart-case + (handler-case + (error 'picky-condition) + (picky-condition (c) + (assert (eq (car (compute-restarts)) (car (compute-restarts c)))))) + (picky-restart () + :report "Do nothing." + :test (lambda (c) + (typep c '(or null picky-condition))) + 'ok)) + +;;; adapted from Helmut Eller on cmucl-imp +(assert (eq 'it + (restart-case + (handler-case + (error 'picky-condition) + (picky-condition (c) + (invoke-restart (find-restart 'give-it c)))) + (give-it () + :test (lambda (c) (typep c 'picky-condition)) + 'it)))) + +;;; success