Konrad Mrożek
2023-06-06 04e87458effac590286133b497f25ae6eeb1e6ba
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)]
19       (println (str "FAIL:" source-file ":" (:line m) ":" (t/testing-vars-str m) ":" (t/testing-contexts-str) ":" (:message m "FAIL"))))))
20
21 (defmethod emacs-report :error
22   [m]
23   (when-let [source-file (some-> t/*testing-vars*
24                                  first
25                                  meta
26                                  :file)]
27     (println (str "ERROR:" source-file ":" (:line m) ":" (t/testing-vars-str m) ":" (t/testing-contexts-str) ":" (:message m "FAIL")))))
28
29 (defmethod emacs-report :default
30   [_])
919581 31
KM 32 (defn -main  [& [test-file]]
33   (binding  [*compile-files* true]
34     (compile 'test-runner)
35     (let  [test-namespaces (->> (or test-file  "test")
36                                 (java.io.File.)
37                                 (file-seq)
38                                 (filter (memfn isFile))
39                                 (map (memfn getPath))
40                                 (map load-file)
41                                 (map (comp :ns meta))
42                                 (into #{}))]
10d3e2 43       (System/exit (if (pos? (reduce (fn [total-fails n]
KM 44                                        (with-redefs [t/report emacs-report]
45                                          (let [results  (t/run-tests n)]
46                                            (+ total-fails
47                                               (:fail results 0)
48                                               (:error results 0)))))
49                                      0
50                                      test-namespaces))
51                      1
52                      0)))))