|
9 | 9 |
|
10 | 10 | (ns clojure.test.generative.runner |
11 | 11 | (:require |
| 12 | + [clojure.java.io :as jio] |
| 13 | + [clojure.pprint :as pprint] |
12 | 14 | [clojure.tools.namespace :as ns] |
13 | 15 | [clojure.test.generative.config :as config] |
14 | 16 | [clojure.test.generative.event :as event] |
|
48 | 50 | (let [name (test-name test) |
49 | 51 | f (test-fn test) |
50 | 52 | input (test-input test)] |
51 | | - (event/report :test/iter :name name :args input :tags #{:begin}) |
| 53 | + (event/report :test/iter :level :debug :name name :args input :tags #{:begin}) |
52 | 54 | (try |
53 | 55 | (let [result (apply f input)] |
54 | 56 | (when-not (realized? *failed*) |
55 | | - (event/report :test/iter :name name :return result :tags #{:end}))) |
| 57 | + (event/report :test/iter :level :debug :name name :return result :tags #{:end}))) |
56 | 58 | (catch Throwable t |
57 | 59 | (deliver *failed* :error) |
58 | 60 | (event/report :error :name name :exception t))))) |
|
66 | 68 | (map |
67 | 69 | #(future |
68 | 70 | (try |
69 | | - (event/report :test/seed :test/seed (+ % 42)) |
70 | 71 | (binding [gen/*seed* (+ % 42) |
71 | 72 | gen/*rnd* (java.util.Random. gen/*seed*) |
72 | 73 | *failed* (promise)] |
73 | | - (event/report :test/test :tags #{:begin}) |
| 74 | + (event/report :test/test :tags #{:begin} :test/seed (+ % 42) :name (test-name test)) |
74 | 75 | (loop [iter 0] |
75 | 76 | (let [result (run-iter test) |
76 | 77 | now (System/currentTimeMillis) |
|
184 | 185 | (:test/fail result) |
185 | 186 | (:error result))) |
186 | 187 |
|
| 188 | +(def process-id |
| 189 | + (delay |
| 190 | + (java.util.UUID/randomUUID))) |
| 191 | + |
| 192 | +(def storage-writer |
| 193 | + (delay |
| 194 | + (let [f (str ".tg/" @process-id)] |
| 195 | + (jio/make-parents f) |
| 196 | + (jio/writer f :append true)))) |
| 197 | + |
| 198 | +(def store-agent (agent nil)) |
| 199 | + |
| 200 | +(def store |
| 201 | + "store data in .tg/{process-id}" |
| 202 | + (io/serialized |
| 203 | + (fn [e] |
| 204 | + (binding [*print-length* nil |
| 205 | + *print-level* nil |
| 206 | + *out* @storage-writer] |
| 207 | + (println e))) |
| 208 | + store-agent)) |
| 209 | + |
| 210 | +(defn save |
| 211 | + "Save results at info level or higher, using store." |
| 212 | + [e] |
| 213 | + (when (event/level-enabled? (:level e) :info) |
| 214 | + (store e))) |
| 215 | + |
| 216 | +(defn test-dirs |
| 217 | + "Runs tests in dirs, returning a map of test lib keyword |
| 218 | + to summary data" |
| 219 | + [& dirs] |
| 220 | + (let [nses (mapcat #(ns/find-namespaces-in-dir (java.io.File. ^String %)) dirs) |
| 221 | + conf (config/config)] |
| 222 | + (doseq [ns nses] (require ns)) |
| 223 | + (event/install-default-handlers) |
| 224 | + (run-all-tests nses (:threads conf) (:msec conf)))) |
| 225 | + |
187 | 226 | (defn -main |
188 | 227 | "Command line entry point, runs all tests in dirs using clojure.test and |
189 | 228 | test.generative. Calls System.exit!" |
190 | 229 | [& dirs] |
191 | 230 | (if (seq dirs) |
192 | | - (let [nses (mapcat #(ns/find-namespaces-in-dir (java.io.File. ^String %)) dirs) |
193 | | - conf (config/config)] |
194 | | - (doseq [ns nses] (require ns)) |
195 | | - (event/install-default-handlers) |
196 | | - (try |
197 | | - (let [results (run-all-tests nses (:threads conf) (:msec conf))] |
198 | | - (doseq [[k v] results] |
199 | | - (println (str "\nFramework " k)) |
200 | | - (println v)) |
201 | | - (System/exit (if (some failed? (vals results)) 1 0))) |
202 | | - (catch Throwable t |
203 | | - (.printStackTrace t) |
204 | | - (System/exit -1)) |
205 | | - (finally |
206 | | - (shutdown-agents)))) |
| 231 | + (try |
| 232 | + (let [results (apply test-dirs dirs)] |
| 233 | + (doseq [[k v] results] |
| 234 | + (println (str "\nFramework " k)) |
| 235 | + (println v)) |
| 236 | + (System/exit (if (some failed? (vals results)) 1 0))) |
| 237 | + (catch Throwable t |
| 238 | + (.printStackTrace t) |
| 239 | + (System/exit -1)) |
| 240 | + (finally |
| 241 | + (shutdown-agents))) |
207 | 242 | (do |
208 | 243 | (println "Specify at least one directory with tests") |
209 | 244 | (System/exit -1)))) |
|
0 commit comments