Last active
August 25, 2020 18:53
-
-
Save mauricioszabo/c2a756d5f5e363f6539cdad212815df1 to your computer and use it in GitHub Desktop.
A simple POC on rendering custom test reporters inside Chlorine
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(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