cursive-ide / cursive

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

Test reporting fails over non-string assertion message in `clojure.test/is` #2962

Open WBSemple opened 2 months ago

WBSemple commented 2 months ago

Any failing clojure.test/is assertions where non-string objects are passed in the second argument will cause the test run to fall over with a ClassCastException (it appears to retry several times).

To reporduce, run the following test with Run Test Under Caret in REPL or Run Tests in Current NS in REPL. It will break on the third assertion; gutter icons will appear for the first two assertions, but nothing after.

(deftest my-test
  (is false "msg")
  (is true {:hello "there"})
  (is false {:hello "again"}) ;; breaks here
  (is true))

It would be great if cursive could handle this more gracefully as it can be quite awkward in projects where this is commonplace.

My current workaround is to hijack clojure.test/assert-expr and add a pr-str to msg:

(defonce assert-expr* assert-expr)
(.bindRoot (var assert-expr) (fn [msg form] (assert-expr* (pr-str msg) form)))