cljs.spec.test/check-1
macro | removed v1.9.542 | added v1.9.183 | Edit |
(check-1 [quote s :as qs] f spec opts)
(defmacro check-1
[[quote s :as qs] f spec opts]
(let [{:keys [name] :as v} (when qs (ana-api/resolve &env s))]
`(let [s# '~name
opts# ~opts
v# ~(when v `(var ~name))
spec# (or ~spec ~(when v `(s/get-spec (var ~name))))
re-inst?# (and v# (seq (unstrument '~name)) true)
f# (or ~f (when v# @v#))]
(try
(cond
(nil? f#)
{:failure (ex-info "No fn to spec" {::s/failure :no-fn})
:sym s# :spec spec#}
(:args spec#)
(let [tcret# (quick-check f# spec# opts#)]
(make-check-result s# spec# tcret#))
:default
{:failure (ex-info "No :args spec" {::s/failure :no-args-spec})
:sym s# :spec spec#})
(finally
(when re-inst?# (instrument '~name)))))))