Skip to content

Commit fc79735

Browse files
authored
Merge pull request #58 from nachomdo/fix-junit-file
Fix broken JUnit XML report
2 parents c7e69fe + f854770 commit fc79735

File tree

1 file changed

+28
-16
lines changed

1 file changed

+28
-16
lines changed

eftest/src/eftest/report/junit.clj

Lines changed: 28 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,16 @@
33
(:require [clojure.java.io :as io]
44
[clojure.stacktrace :as stack]
55
[clojure.test :as test]
6-
[eftest.report :refer [*context*]]))
6+
[eftest.report :refer [*context*]]
7+
[eftest.report :as report]))
78

89
;; XML generation based on junit.clj
910

11+
(defn- combine [f g]
12+
(fn [] (g) (f)))
13+
14+
(def ^:private flush-lock (Object.))
15+
1016
(def ^:private escape-xml-map
1117
(zipmap "'<>\"&" (map #(str \& % \;) '[apos lt gt quot amp])))
1218

@@ -93,25 +99,31 @@
9399
(println "</testsuites>")))
94100

95101
(defmethod report :begin-test-ns [m]
96-
(test/with-test-out
97-
(start-suite (name (ns-name (:ns m))))))
102+
(let [ns (name (ns-name (:ns m)))
103+
f #(test/with-test-out (start-suite ns))]
104+
(swap! *context* assoc-in [::deferred-report ns] f)))
98105

99106
(defmethod report :end-test-ns [m]
100-
(test/with-test-out
101-
(finish-suite)))
107+
(let [ns (name (ns-name (:ns m)))
108+
g (get-in @*context* [::deferred-report ns])
109+
f #(test/with-test-out (finish-suite))]
110+
(locking flush-lock (g) (f))
111+
(swap! *context* update ::deferred-report dissoc ns)))
102112

103113
(defmethod report :end-test-var [m]
104-
(test/with-test-out
105-
(let [test-var (:var m)
106-
results (get-in @*context* [::test-results test-var])]
107-
(start-case (test-name test/*testing-vars*)
108-
(name (ns-name (:ns (meta test-var)))))
109-
(doseq [result results]
110-
(if (= :fail (:type result))
111-
(failure-el result)
112-
(error-el result)))
113-
(finish-case)
114-
(swap! *context* update ::test-results dissoc test-var))))
114+
(let [ns (-> (:var m) meta :ns ns-name name)
115+
testing-vars test/*testing-vars*
116+
f #(test/with-test-out
117+
(let [test-var (:var m)
118+
results (get-in @*context* [::test-results test-var])]
119+
(start-case (test-name testing-vars) ns)
120+
(doseq [result results]
121+
(if (= :fail (:type result))
122+
(failure-el result)
123+
(error-el result)))
124+
(finish-case)
125+
(swap! *context* update ::test-results dissoc test-var)))]
126+
(swap! *context* update-in [::deferred-report ns] (partial combine f))))
115127

116128
(defn- push-result [result]
117129
(let [test-var (first test/*testing-vars*)]

0 commit comments

Comments
 (0)