cljs.test/assert-expr

multimethodsince v1.8.51Edit
(assert-expr menv msg form)

Source code @ clojurescript:src/main/cljs/cljs/test.cljc
(defmulti assert-expr 
  (fn [menv msg form]
    (cond
      (nil? form) :always-fail
      (seq? form) (first form)
      :else :default)))

Dispatch method @ clojurescript:src/main/cljs/cljs/test.cljc
(defmethod assert-expr :always-fail [menv msg form]
  ;; nil test: always fail
  (let [{:keys [file line end-line column end-column]} (meta form)]
    `(report {:type :fail, :message ~msg
              :file ~file :line ~line :end-line ~end-line :column ~column :end-column ~end-column})))

Dispatch method @ clojurescript:src/main/cljs/cljs/test.cljc
(defmethod assert-expr :default [menv msg form]
  (if (and (sequential? form)
           (function? menv (first form)))
    (assert-predicate msg form)
    (assert-any msg form)))

Dispatch method @ clojurescript:src/main/cljs/cljs/test.cljc
(defmethod assert-expr 'instance? [menv msg form]
  ;; Test if x is an instance of y.
  (let [{:keys [file line end-line column end-column]} (meta form)]
    `(let [klass# ~(nth form 1)
           object# ~(nth form 2)]
       (let [result# (instance? klass# object#)]
         (if result#
           (report
            {:type :pass, :message ~msg,
             :file ~file :line ~line :end-line ~end-line :column ~column :end-column ~end-column
             :expected '~form, :actual (type object#)})
           (report
            {:type :fail, :message ~msg,
             :file ~file :line ~line :end-line ~end-line :column ~column :end-column ~end-column
             :expected '~form, :actual (type object#)}))
         result#))))

Dispatch method @ clojurescript:src/main/cljs/cljs/test.cljc
(defmethod assert-expr 'thrown? [menv msg form]
  ;; (is (thrown? c expr))
  ;; Asserts that evaluating expr throws an exception of class c.
  ;; Returns the exception thrown.
  (let [{:keys [file line end-line column end-column]} (meta form)
        klass (second form)
        body (nthnext form 2)]
    `(try
       ~@body
       (report
        {:type :fail, :message ~msg,
         :file ~file :line ~line :end-line ~end-line :column ~column :end-column ~end-column
         :expected '~form, :actual nil})
       (catch ~klass e#
         (report
          {:type :pass, :message ~msg,
           :file ~file :line ~line :end-line ~end-line :column ~column :end-column ~end-column
           :expected '~form, :actual e#})
         e#))))

Dispatch method @ clojurescript:src/main/cljs/cljs/test.cljc
(defmethod assert-expr 'thrown-with-msg? [menv msg form]
  ;; (is (thrown-with-msg? c re expr))
  ;; Asserts that evaluating expr throws an exception of class c.
  ;; Also asserts that the message string of the exception matches
  ;; (with re-find) the regular expression re.
  (let [{:keys [file line end-line column end-column]} (meta form)
        klass (nth form 1)
        re (nth form 2)
        body (nthnext form 3)]
    `(try
       ~@body
       (report {:type :fail, :message ~msg, :expected '~form, :actual nil
                :file ~file :line ~line :end-line ~end-line :column ~column :end-column ~end-column})
       (catch ~klass e#
         (let [m# (.-message e#)]
           (if (re-find ~re m#)
             (report
              {:type :pass, :message ~msg,
               :file ~file :line ~line :end-line ~end-line :column ~column :end-column ~end-column
               :expected '~form, :actual e#})
             (report
              {:type :fail, :message ~msg,
               :file ~file :line ~line :end-line ~end-line :column ~column :end-column ~end-column
               :expected '~form, :actual e#}))
           e#)))))