Konrad Mrożek
2023-06-15 2c210a37c68304ec9111007af34ce6309dd0701c
commit | author | age
919581 1 (binding [*compile-files* true]
KM 2   (require 'clojure.test))
3
4 (ns test-runner
5   (:require [clojure.test :as t]))
6
7 (when-not (.exists (java.io.File. "classes"))
8   (.. (java.io.File. "classes") mkdir))
9
10 (defmulti emacs-report :type)
11
04e874 12 (defmethod emacs-report :fail
919581 13   [m]
KM 14   (t/with-test-out
04e874 15     (when-let [source-file (some-> t/*testing-vars*
KM 16                                    first
17                                    meta
18                                    :file)]
2c210a 19       (println (str "FAIL:" source-file ":" (:line m) ":" (t/testing-vars-str m) ":" (t/testing-contexts-str) ":" (:message m "FAIL")))
KM 20       (println (str "FAIL-CONTINUE:EXPECTED:" (pr-str (:expected m))))
21       (println (str "FAIL-CONTINUE:ACTUAL:" (pr-str (:actual m)))))))
04e874 22
KM 23 (defmethod emacs-report :error
24   [m]
25   (when-let [source-file (some-> t/*testing-vars*
26                                  first
27                                  meta
28                                  :file)]
2c210a 29     (println (str "ERROR:" source-file ":" (:line m) ":" (t/testing-vars-str m) ":" (t/testing-contexts-str) ":" (:message m "FAIL")))
KM 30     (println (str "ERROR-CONTINUE:EXPECTED:" (pr-str (:expected m))))
31     (println (str "ERROR-CONTINUE:ACTUAL:"
32                   (if (instance? Throwable (:actual m))
33                     (ex-message (:actual m))
34                     (pr-str (:actual m)))))))
04e874 35
KM 36 (defmethod emacs-report :default
37   [_])
919581 38
KM 39 (defn -main  [& [test-file]]
40   (binding  [*compile-files* true]
41     (compile 'test-runner)
42     (let  [test-namespaces (->> (or test-file  "test")
43                                 (java.io.File.)
44                                 (file-seq)
45                                 (filter (memfn isFile))
46                                 (map (memfn getPath))
47                                 (map load-file)
48                                 (map (comp :ns meta))
49                                 (into #{}))]
10d3e2 50       (System/exit (if (pos? (reduce (fn [total-fails n]
KM 51                                        (with-redefs [t/report emacs-report]
52                                          (let [results  (t/run-tests n)]
53                                            (+ total-fails
54                                               (:fail results 0)
55                                               (:error results 0)))))
56                                      0
57                                      test-namespaces))
58                      1
59                      0)))))