Documentation
Generates a pass if BODY signals a condition of type
CONDITION. BODY is evaluated in a block named NIL, CONDITION is
not evaluated.
Source
(defmacro signals (condition-spec
&body body)
"Generates a pass if BODY signals a condition of type
CONDITION. BODY is evaluated in a block named NIL, CONDITION is
not evaluated."
(let ((block-name (gensym)))
(destructuring-bind (condition &optional reason-control reason-args)
(ensure-list condition-spec)
`(block ,block-name
(handler-bind ((,condition (lambda (c)
(declare (ignore c))
;; ok, body threw condition
(add-result 'test-passed
:test-expr ',condition)
(return-from ,block-name t))))
(block nil
,@body
(process-failure
:reason ,(if reason-control
`(format nil ,reason-control ,@reason-args)
`(format nil "Failed to signal a ~S" ',condition))
:test-expr ',condition)
(return-from ,block-name nil)))))))
Source Context