Skip to content

Commit 1afc5a6

Browse files
fix shuffle, make c.t/is play nice in generative tests
1 parent d1aeae8 commit 1afc5a6

5 files changed

Lines changed: 105 additions & 119 deletions

File tree

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

Lines changed: 0 additions & 88 deletions
This file was deleted.

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -277,7 +277,7 @@ instance you can get a repeatable basis for tests."
277277
(defn shuffle
278278
"Shuffle coll"
279279
[coll]
280-
(sort-by double coll))
280+
(sort-by (fn [_] (long)) coll))
281281

282282

283283

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@
6363
(comment
6464
(require :reload '[clojure.test.generative.event :as event])
6565
(require :reload '[clojure.test.generative.event.logback :as la])
66-
(in-ns 'clojure.test.generative.event.logback-adapter)
66+
(in-ns 'clojure.test.generative.event.logback)
6767
(set! *warn-on-reflection* true)
6868
(def l (LoggerFactory/getLogger "stu"))
6969
(.info l "hi")

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

Lines changed: 98 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,90 @@
1616
[clojure.test.generative.event :as event]
1717
[clojure.test.generative.generators :as gen]
1818
[clojure.test.generative.io :as io]
19-
[clojure.test.generative.clojure-test-adapter :as cta]
2019
[clojure.test :as ctest]))
2120

2221
(set! *warn-on-reflection* true)
2322

23+
;; non-nil binding means running inside the framework
24+
(def ^:dynamic *failed* nil)
25+
26+
(defn failed!
27+
"Tell the runner that a test failed"
28+
[]
29+
(when *failed*
30+
(deliver *failed* :failed)))
31+
32+
(defmulti ctevent->event
33+
"Convert a clojure.test reporting event to an event."
34+
:type)
35+
36+
(defmethod ctevent->event :default
37+
[e]
38+
(event/create :clojure.test/unknown e))
39+
40+
(defmethod ctevent->event :pass
41+
[e]
42+
(event/create :type :assert/pass))
43+
44+
(defmethod ctevent->event :fail
45+
[e]
46+
(failed!)
47+
(event/create :type :assert/fail
48+
:level :warn
49+
:message (:message e)
50+
:test/actual (:actual e)
51+
:test/expected (:expected e)
52+
:file (:file e)
53+
:line (:line e)
54+
::ctest/contexts (seq ctest/*testing-contexts*)
55+
::ctest/vars (reverse (map #(:name (meta %)) ctest/*testing-vars*))))
56+
57+
(defmethod ctevent->event :error
58+
[e]
59+
(event/create :level :error
60+
:type :error
61+
::ctest/contexts (seq ctest/*testing-contexts*)
62+
:message (:message e)
63+
:test/expected (:expected e)
64+
:exception (:actual e)
65+
:file (:file e)
66+
:line (:line e)
67+
::ctest/vars (reverse (map #(:name (meta %)) ctest/*testing-vars*))))
68+
69+
(defmethod ctevent->event :summary
70+
[e]
71+
nil)
72+
73+
(defmethod ctevent->event :begin-test-ns
74+
[e]
75+
(event/create :type :test/group
76+
:tags #{:begin}
77+
:name (ns-name (:ns e))))
78+
79+
(defmethod ctevent->event :end-test-ns
80+
[e]
81+
(event/create :type :test/group
82+
:tags #{:end}
83+
:name (ns-name (:ns e))))
84+
85+
(defmethod ctevent->event :begin-test-var
86+
[e]
87+
(event/create :type :test/test
88+
:tags #{:begin}
89+
:name (event/fqname (:var e))))
90+
91+
(defmethod ctevent->event :end-test-var
92+
[e]
93+
(event/create :type :test/test
94+
:tags #{:end}
95+
:name (event/fqname (:var e))))
96+
97+
(defn ct-adapter
98+
"Adapt clojure.test event model to fire c.t.g events."
99+
[m]
100+
(when-let [e (ctevent->event m)]
101+
(event/report-fn e)))
102+
24103
(defprotocol Test
25104
(test-name [_])
26105
(test-fn [_])
@@ -41,9 +120,6 @@
41120
[v]
42121
(map #(%) (:clojure.test.generative/inputs (meta v)))))
43122

44-
;; non-nil binding means running inside the framework
45-
(def ^:dynamic *failed* nil)
46-
47123
(defn run-iter
48124
"Run a single test iteration"
49125
[test]
@@ -99,12 +175,6 @@
99175
(doseq [test tests]
100176
(run-for test nthreads test-msec))))
101177

102-
(defn failed!
103-
"Tell the runner that a test failed"
104-
[]
105-
(when *failed*
106-
(deliver *failed* :failed)))
107-
108178
#_(defn set-seed
109179
[n]
110180
(set! gen/*rnd* (java.util.Random. n)))
@@ -160,24 +230,24 @@
160230
(defn run-all-tests
161231
"Run generative tests and clojure.test tests"
162232
[nses threads msec]
163-
(let [run-with-counts
164-
(fn [lib f]
165-
(let [event-counts (atom {})
166-
event-counter #(when-not (contains? (:tags %) :begin)
167-
(when-let [type (:type %)]
168-
(swap! event-counts update-in [type] (fnil inc 0))))]
169-
(event/report :test/library :name lib)
170-
(event/with-handler event-counter (f))
171-
@event-counts))
172-
ct-results (run-with-counts 'clojure.test
173-
#(binding [ctest/report cta/report-adapter]
174-
(when-let [ctnses (seq (filter has-clojure-test-tests? nses))]
175-
(apply ctest/run-tests ctnses))))
176-
ctg-results (run-with-counts 'clojure.test.generative
177-
#(run-generative-tests nses threads msec))]
178-
(io/await)
179-
{'clojure.test ct-results
180-
'clojure.test.generative ctg-results}))
233+
(binding [ctest/report ct-adapter]
234+
(let [run-with-counts
235+
(fn [lib f]
236+
(let [event-counts (atom {})
237+
event-counter #(when-not (contains? (:tags %) :begin)
238+
(when-let [type (:type %)]
239+
(swap! event-counts update-in [type] (fnil inc 0))))]
240+
(event/report :test/library :name lib)
241+
(event/with-handler event-counter (f))
242+
@event-counts))
243+
ct-results (run-with-counts 'clojure.test
244+
#(when-let [ctnses (seq (filter has-clojure-test-tests? nses))]
245+
(apply ctest/run-tests ctnses)))
246+
ctg-results (run-with-counts 'clojure.test.generative
247+
#(run-generative-tests nses threads msec))]
248+
(io/await)
249+
{'clojure.test ct-results
250+
'clojure.test.generative ctg-results})))
181251

182252
(defn failed?
183253
[result]

src/test/clojure/clojure/test/generative/generators_test.clj

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
(ns clojure.test.generative.generators-test
22
(:use clojure.test.generative
3-
[clojure.test :only (deftest)])
3+
[clojure.test :only (deftest) :as ct])
44
(:require [clojure.test.generative.generators :as gen]))
55

66
(defspec test-repeatable-generation
@@ -22,3 +22,7 @@
2222
(is (= (+ (count longs) (count bools))
2323
(count %)))))
2424

25+
(defspec test-shuffle
26+
gen/shuffle
27+
[^{:tag (vec long)} input]
28+
(is (= (sort input) (sort %))))

0 commit comments

Comments
 (0)