Skip to content

Instantly share code, notes, and snippets.

@mauricioszabo
Last active August 25, 2020 18:53
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mauricioszabo/c2a756d5f5e363f6539cdad212815df1 to your computer and use it in GitHub Desktop.
Save mauricioszabo/c2a756d5f5e363f6539cdad212815df1 to your computer and use it in GitHub Desktop.
A simple POC on rendering custom test reporters inside Chlorine
(def old-fail-blob
'(defmethod clojure.test/report :fail [m]
(clojure.test/with-test-out
(clojure.test/inc-report-counter :fail)
(println "\nFAIL in" (clojure.test/testing-vars-str m))
(when (seq clojure.test/*testing-contexts*) (println (clojure.test/testing-contexts-str)))
(when-let [message (:message m)] (println message))
(println "expected:" (pr-str (:expected m)))
(println " actual:" (pr-str (:actual m))))))
(def old-error-blob
'(defmethod clojure.test/report :error [m]
(clojure.test/with-test-out
(clojure.test/inc-report-counter :error)
(println "\nERROR in" (clojure.test/testing-vars-str m))
(when (seq clojure.test/*testing-contexts*) (println (clojure.test/testing-contexts-str)))
(when-let [message (:message m)] (println message))
(println "expected:" (pr-str (:expected m)))
(print " actual: ")
(let [actual (:actual m)]
(if (instance? Throwable actual)
(clojure.stacktrace/print-cause-trace actual clojure.test/*stack-trace-depth*)
(prn actual))))))
(def html-for-tests
'{:html '(if (empty? ?state)
[:div.title "All tests passed"]
[:div.rows
[:div.title.error "Test(s) failed!"]
[:<>
(map (fn [error idx]
[:div.rows {:key idx}
[:div.space]
[:div.title
(-> error :type name str/upper-case) " at: "
[:a {:href "#"
:on-click (fn [_] (editor/run-callback :open-editor
{:file-name (:file error)
:line (- (:line error) 5)}))}
(:file error) ":" (- (:line error) 4)]]
(if (-> error :type (= :error))
[:div/clj (:actual error)]
[:div/ansi (:actual error)])])
?state (range))]])
:state @s})
(defn eval-block-as-test []
(p/let [txt-code (editor/get-block)
code (str "(let [s (atom [])]
(defmethod clojure.test/report :error [m]
(swap! s conj m))
(defmethod clojure.test/report :fail [m]
(swap! s conj (update m :actual pr-str))) "
(:text txt-code) " "
(pr-str old-fail-blob) " "
(pr-str old-error-blob) " "
html-for-tests " )")]
(editor/eval-interactive {:range (:range txt-code)
:text (str code)})))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment