Skip to content

Commit f647a23

Browse files
authored
Merge pull request #72 from griffinbank/jamesreprise/prettier-test-reports
Prettier test reports
2 parents ae097aa + 129431a commit f647a23

File tree

2 files changed

+62
-19
lines changed

2 files changed

+62
-19
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1+
.clj-kondo/
12
.cpcache/
23
.ijwb/
4+
.lsp/
35
bazel-*
4-

src/rules_clojure/testrunner.clj

Lines changed: 60 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,72 @@
11
(ns rules-clojure.testrunner
2-
(:require [clojure.test])
3-
(:import [sun.misc Signal SignalHandler]
4-
[java.lang.management ManagementFactory])
2+
(:require [clojure.pprint :refer [pprint]]
3+
[clojure.stacktrace :as stack]
4+
[clojure.test :as c.test])
55
(:gen-class))
66

7-
(def old-handler
8-
(Signal/handle
9-
(Signal. "TERM")
10-
(reify SignalHandler
11-
(handle [_ signal]
12-
(run! println (.dumpAllThreads (ManagementFactory/getThreadMXBean) true true))
13-
(when-not (#{SignalHandler/SIG_DFL SignalHandler/SIG_IGN} old-handler)
14-
(.handle old-handler signal))))))
7+
(defn pp-str [x]
8+
(with-out-str (pprint x)))
9+
10+
(defmulti
11+
^{:doc "Prettier report printing method.
12+
Code is taken from clojure.test, with some added pretty-printing."}
13+
pretty-report :type)
14+
15+
(defmethod pretty-report :default [m]
16+
(c.test/with-test-out (prn m)))
17+
18+
(defmethod pretty-report :pass [_]
19+
(c.test/with-test-out (c.test/inc-report-counter :pass)))
20+
21+
(defmethod pretty-report :fail [m]
22+
(c.test/with-test-out
23+
(c.test/inc-report-counter :fail)
24+
(println "\nFAIL in" (c.test/testing-vars-str m))
25+
(when (seq c.test/*testing-contexts*) (println (c.test/testing-contexts-str)))
26+
(when-let [message (:message m)] (println message))
27+
(print "expected:\n" (pp-str (:expected m)))
28+
(print "actual:\n" (pp-str (:actual m)))))
29+
30+
(defmethod pretty-report :error [m]
31+
(c.test/with-test-out
32+
(c.test/inc-report-counter :error)
33+
(println "\nERROR in" (c.test/testing-vars-str m))
34+
(when (seq c.test/*testing-contexts*) (println (c.test/testing-contexts-str)))
35+
(when-let [message (:message m)] (println message))
36+
(print "expected:\n" (pp-str (:expected m)))
37+
(print "actual: ")
38+
(let [actual (:actual m)]
39+
(if (instance? Throwable actual)
40+
(stack/print-cause-trace actual c.test/*stack-trace-depth*)
41+
(prn actual)))))
42+
43+
(defmethod pretty-report :summary [m]
44+
(c.test/with-test-out
45+
(println "\nRan" (:test m) "tests containing"
46+
(+ (:pass m) (:fail m) (:error m)) "assertions.")
47+
(println (:fail m) "failures," (:error m) "errors.")))
48+
49+
(defmethod pretty-report :begin-test-ns [m]
50+
(c.test/with-test-out
51+
(println "\nTesting" (ns-name (:ns m)))))
52+
53+
;; Ignore these message types:
54+
(defmethod pretty-report :end-test-ns [_])
55+
(defmethod pretty-report :begin-test-var [_])
56+
(defmethod pretty-report :end-test-var [_])
1557

1658
(defn -main [& args]
1759
(assert (string? (first args)) (print-str "first argument must be a string, got" args))
1860
(let [the-ns (-> args first symbol)]
19-
(println "testing" the-ns)
2061
(try
2162
(require the-ns)
22-
(let [test-report (clojure.test/run-tests the-ns)]
23-
(println test-report)
24-
(if (and (zero? (:fail test-report))
25-
(zero? (:error test-report)))
26-
(System/exit 0)
27-
(System/exit 1)))
63+
(binding [c.test/report pretty-report]
64+
(let [test-report (clojure.test/run-tests the-ns)]
65+
(println test-report)
66+
(if (and (zero? (:fail test-report))
67+
(zero? (:error test-report)))
68+
(System/exit 0)
69+
(System/exit 1))))
2870
(catch Throwable t
2971
(println t)
3072
(System/exit 1)))))

0 commit comments

Comments
 (0)