Skip to content

Commit be0c54b

Browse files
combo runner for c.t. / c.t.g.
1 parent 4d488b9 commit be0c54b

17 files changed

Lines changed: 500 additions & 248 deletions

File tree

.gitignoreREADME.md

Lines changed: 0 additions & 1 deletion
This file was deleted.

README.md

Lines changed: 34 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -38,13 +38,40 @@ and a validator:
3838
[^long a ^long b] ;; input spec
3939
(assert (integer? %))) ;; 0 or more validator forms
4040

41-
To generate test data, see the fns in the generators namespace.
42-
43-
To integrate with clojure.test:
44-
45-
;; somewhere in your test suite
46-
(:require '[clojure.test.generative.clojure-test :as clojure-test])
47-
(clojure-test/run-generative-tests)
41+
To generate test data, see the fns in the generators namespace. Note
42+
that these functions shadow a bunch of clojure.core names.
43+
44+
You can run clojure.test and clojure.test.generative tests together
45+
from the c.t.g. runner:
46+
47+
(require '[clojure.test.generative.runner :as runner])
48+
(runner/-main "src/test/clojure" "src/examples/clojure")
49+
50+
Assertion support is currently minimal. There is an `is` macro,
51+
similar to clojure.test's, that provides rudimentaty contextual
52+
reporting. You can also use plain assertions, or clojure.test
53+
validation forms such as `is` and `are`, or any other forms that throw
54+
exception on failure. No contextual reporting for these yet.
55+
56+
You can configure the runner with Java system properties:
57+
58+
<table>
59+
<tr>
60+
<th>Java Property</th><th>Interpretation</th>
61+
</tr>
62+
<tr>
63+
<td>clojure.test.generative.threads</td><td>Number of concurrent threads</td>
64+
</tr>
65+
<tr>
66+
<td>clojure.test.generative.msec</td><td>Desired test run duration</td>
67+
</tr>
68+
<tr>
69+
<td>clojure.test.generative.handlers</td><td>Comma-delimited list of handlers</td>
70+
</tr>
71+
</table>
72+
73+
The default handler prints test run to stdout, but others could
74+
e.g. put test events in a database.
4875

4976
Developer Information
5077
========================================
@@ -57,8 +84,6 @@ Developer Information
5784

5885
* [Compatibility Test Matrix](http://build.clojure.org/job/test.generative-test-matrix/)
5986

60-
61-
6287
Change Log
6388
====================
6489

bin/test.clj

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
(require '[clojure.test.generative.runner :as runner])
2+
(runner/-main "src/test/clojure" "src/examples/clojure")
3+

data-model.org

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
* Common Event Keys
2+
| name | type | notes |
3+
|-------------+--------------------+----------------------------------------|
4+
| tstamp | long | msec since epoch |
5+
| thread | long | thread id |
6+
| pid | long | process id |
7+
| level | keyword enum | severiry level |
8+
| type | namespaced keyword | drive extended interpretation |
9+
| locals | map | local bindings |
10+
| file | string | file path |
11+
| ns | symbol | namespace |
12+
| line | long | line number |
13+
| bindings | map | dynamic bindings |
14+
| thread/name | string | name of a thread |
15+
| msec | long | a duration |
16+
| nsec | long | a duration |
17+
| count | long | a count |
18+
| tag | set of keyword | |
19+
| args | list of any | args to a fn |
20+
| return | any | return value of a fun |
21+
| exception | exception | an exception |
22+
| name | symbol | a name |
23+
| description | string | a non-name characterization of a thing |
24+
| uuid | uuid | a unique name |
25+
| message | string | a message |
26+
* Comment Event Types
27+
| type | notes |
28+
|-------+------------|
29+
| error | runtime error |
30+
* Test Event Keys
31+
| name | type | notes |
32+
|---------------+--------+----------------------|
33+
| test/count | long | number of tests |
34+
| test/threads | long | number of threads |
35+
| test/seed | long | numeric seed |
36+
| text/expected | any | |
37+
| test/actual | any | |
38+
| test/library | symbol | name of test library |
39+
* Test Events in c.t.g
40+
| name | begin/end tags? | count | args | test/threads | msec | context | level |
41+
|--------------+-----------------+-------+------+--------------+------+---------+-------|
42+
| :test/group | x | x | | | | | info |
43+
| :test/iter | | | x | | | | info |
44+
| :test/test | x | x | | | x | | info |
45+
| :test/seed | | | | | | | info |
46+
| :test/fail | | | | | | x | warn |
47+
| :test/pass | | | | | | | info |
48+
| :assert/pass | | | | | | | debug |
49+
| :assert/fail | | | | | | | debug |
50+
* Test Events in c.t
51+
| name | becomes | other keys |
52+
|---------------------+-------------------------+--------------------------------------------------|
53+
| :pass | :assert/pass | |
54+
| :fail | :assert/fail | :expected, :actual, :message, *testing-contexts* |
55+
| :error | :error | :expected, :actual, :message, *testing-contexts* |
56+
| :summary | (ignore, do own calc) | |
57+
| :begin/end-test-ns | :test/group :begin/:end | :ns -> name |
58+
| :begin/end-test-var | :test/test :begin/:end | :var -> name |

pom.xml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,10 @@
9696
<version>1.3.7</version>
9797
<configuration>
9898
<vmargs>-Dclojure.test.generative.runner=clojure.test</vmargs>
99-
<!-- <testScript>bin/test_runner.clj</testScript> -->
99+
<testScript>bin/test.clj</testScript>
100+
<testSourceDirectories>
101+
<testSourceDirectory>src/examples/clojure</testSourceDirectory>
102+
</testSourceDirectories>
100103
<copiedNamespaces>
101104
<namespace>!.*</namespace>
102105
</copiedNamespaces>

src/examples/clojure/clojure/test/array_test.clj

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,7 @@
99

1010
(ns clojure.test.array-test
1111
(:use clojure.test.generative)
12-
(:require [clojure.test.generative.generators :as gen]
13-
[clojure.test.generative.clojure-test :as clojure-test]))
14-
15-
(clojure-test/run-generative-tests)
12+
(:require [clojure.test.generative.generators :as gen]))
1613

1714
(defn nan-or-=
1815
[a b]

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@
4949
[& args]
5050
`(do
5151
(runner/failed!)
52-
~(with-meta `(event/report-context :type ::fail
52+
~(with-meta `(event/report-context :assert/fail
5353
:level :warn
5454
~@args)
5555
(meta &form))))
@@ -60,7 +60,7 @@
6060
`(let [~'actual ~v ~'expected '~v]
6161
(if ~'actual
6262
(do
63-
(event/report :level :debug :type ::pass)
63+
(event/report :assert/pass :level :debug)
6464
~'actual)
6565
~(with-meta
6666
`(fail ~@(when msg `[:message ~msg]))

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

Lines changed: 0 additions & 78 deletions
This file was deleted.
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
; Copyright (c) Rich Hickey, Stuart Halloway, and contributors.
2+
; All rights reserved.
3+
; The use and distribution terms for this software are covered by the
4+
; Eclipse Public License 1.0 (http://opensource.org/licenses/eclipse-1.0.php)
5+
; which can be found in the file epl-v10.html at the root of this distribution.
6+
; By using this software in any fashion, you are agreeing to be bound by
7+
; the terms of this license.
8+
; You must not remove this notice, or any other, from this software.
9+
10+
(ns clojure.test.generative.clojure-test-adapter
11+
(:require [clojure.test.generative.event :as event]
12+
[clojure.test.generative.config :as config]
13+
[clojure.test.generative.io :as testio]
14+
[clojure.tools.namespace :as ns]
15+
[clojure.test :as ctest]))
16+
17+
(defmulti ctevent->event
18+
"Convert a clojure.test reporting event to an event."
19+
:type)
20+
21+
(defmethod ctevent->event :default
22+
[e]
23+
(event/create :clojure.test/unknown e))
24+
25+
(defmethod ctevent->event :pass
26+
[e]
27+
(event/create :type :assert/pass))
28+
29+
(defmethod ctevent->event :fail
30+
[e]
31+
(event/create :type :assert/fail
32+
::ctest/testing-contexts (seq ctest/*testing-contexts*)))
33+
34+
(defmethod ctevent->event :error
35+
[e]
36+
(event/create :level :error
37+
:type :error
38+
::ctest/testing-contexts (seq ctest/*testing-contexts*)
39+
:message (:message e)
40+
:test/expected (:expected e)
41+
:test/actual (:actual e)
42+
:file (:file e)
43+
:line (:line e)
44+
::ctest/testing-vars (reverse (map #(:name (meta %)) ctest/*testing-vars*))))
45+
46+
(defmethod ctevent->event :summary
47+
[e]
48+
nil)
49+
50+
(defmethod ctevent->event :begin-test-ns
51+
[e]
52+
(event/create :type :test/group
53+
:tags #{:begin}
54+
:name (ns-name (:ns e))))
55+
56+
(defmethod ctevent->event :end-test-ns
57+
[e]
58+
(event/create :type :test/group
59+
:tags #{:end}
60+
:name (ns-name (:ns e))))
61+
62+
(defmethod ctevent->event :begin-test-var
63+
[e]
64+
(event/create :type :test/test
65+
:tags #{:begin}
66+
:name (event/fqname (:var e))))
67+
68+
(defmethod ctevent->event :end-test-var
69+
[e]
70+
(event/create :type :test/test
71+
:tags #{:end}
72+
:name (event/fqname (:var e))))
73+
74+
(defn report-adapter
75+
"Adapt clojure.test event model to fire c.t.g events."
76+
[m]
77+
(when-let [e (ctevent->event m)]
78+
(event/report-fn e)))
79+
80+
81+

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,13 @@
77
; the terms of this license.
88
; You must not remove this notice, or any other, from this software.
99

10-
(ns clojure.test.generative.config)
10+
(ns clojure.test.generative.config
11+
(:require [clojure.string :as str]))
1112

1213
(def config-mapping
1314
[["clojure.test.generative.threads" [:threads] read-string (.availableProcessors (Runtime/getRuntime))]
1415
["clojure.test.generative.msec" [:msec] read-string 10000]
15-
["clojure.test.generative.runner" [:runner] identity nil]])
16+
["clojure.test.generative.handlers" [:handlers] #(str/split % #",") ["clojure.test.generative.io/console-reporter"]]])
1617

1718
(defn config
1819
[]

0 commit comments

Comments
 (0)