cursive-ide / cursive

Cursive: The IDE for beautiful Clojure code
574 stars 7 forks source link

Custom clojure.test report types not handled #2876

Open butzopower opened 5 months ago

butzopower commented 5 months ago

When running tests via cursive test runner, if clojure.test/do-report is called with a report type unknown to cursive any method set up to handle that report type via clojure.test/report multimethod is not called.

(ns cursive-custom-report-test
  (:require
    [clojure.test :refer :all]))

(defmethod clojure.test/assert-expr 'roughly [msg form]
  `(let [op1# ~(nth form 1)
         op2# ~(nth form 2)
         tolerance# (if (= 4 ~(count form)) ~(last form) 2)
         decimals# (/ 1. (Math/pow 10 tolerance#))
         result# (< (Math/abs (- op1# op2#)) decimals#)]
     (clojure.test/do-report
       {:type (if result# :pass :custom-fail)
        :message ~msg
        :expected (format "%s should be roughly %s with %s tolerance"
                          op1# op2# decimals#)
        :actual result#})
     result#))

(defmethod clojure.test/report :custom-fail [m]
  (clojure.test/inc-report-counter :fail)
  (clojure.test/with-test-out (println "custom failure message")))

(clojure.test/deftest PI-test
         (is (roughly 3.14 Math/PI 2))
         (is (roughly 3.14 Math/PI 3)))

(defn -main [& _args]
  (run-tests 'cursive-custom-report-test))

In the above exmple, running PI-test via IDE will pass when it should fail. Running the main function via IDE will fail properly.