Skip to content

Commit b1620a4

Browse files
serialize runner's default printing
1 parent 54d483f commit b1620a4

1 file changed

Lines changed: 31 additions & 7 deletions

File tree

  • src/main/clojure/clojure/test/generative

src/main/clojure/clojure/test/generative/runner.clj

Lines changed: 31 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99

1010
(ns clojure.test.generative.runner
1111
(:require
12-
[clojure.pprint :as pprint]
1312
[clojure.tools.namespace :as ns]
1413
[clojure.data.generators :as gen]
1514
[clojure.test.generative :as tgen]))
@@ -26,7 +25,8 @@
2625
read-string
2726
10000]])
2827

29-
(defn- config
28+
(defn config
29+
"Returns runner configuration derived from system properties."
3030
[]
3131
(reduce
3232
(fn [m [prop path coerce default]]
@@ -123,10 +123,34 @@
123123
:seeds (repeatedly nthreads next-seed)})
124124
tests))
125125

126-
(defn- prf
126+
(def ^:private serializer (agent nil))
127+
128+
(defn serialized
129+
"Returns a function that calls f for side effects, async,
130+
serialized by an agent"
131+
([f] (serialized f serializer))
132+
([f agt]
133+
(fn [& args]
134+
(send-off agt
135+
(fn [_]
136+
(try
137+
(apply f args)
138+
(catch Throwable t
139+
(.printStackTrace t)))
140+
nil))
141+
nil)))
142+
143+
(def prf
127144
"Print and flush."
128-
[s]
129-
(print s) (flush))
145+
(serialized (fn [s]
146+
(binding [*out* *err*]
147+
(print s)
148+
(flush)))))
149+
150+
(def print-stack-trace
151+
(serialized (fn [^Throwable t] (.printStackTrace t))))
152+
153+
(def sprn (serialized prn))
130154

131155
(defn dir-tests
132156
"Returns all tests in dirs"
@@ -161,9 +185,9 @@
161185
ret (reduce
162186
(fn [{:keys [failures iters nresults]} result]
163187
(when (:exception result)
164-
(.printStackTrace ^Throwable (:exception result)))
188+
(print-stack-trace (:exception result)))
165189
(if (:exception result)
166-
(prn result)
190+
(sprn result)
167191
(progress))
168192
{:failures (+ failures (if (:exception result) 1 0))
169193
:iters (+ iters (:iter result))

0 commit comments

Comments
 (0)