Skip to content

Commit 7cb3632

Browse files
committed
Increase test coverage for :fail-fast?
This will help reliably coming up with a fix for #75. Coverage is extended by: * providing counterexamples for each test case * also exercising exception handling, whether it happens in the deftest body, or in fixtures.
1 parent 24290cb commit 7cb3632

File tree

1 file changed

+85
-12
lines changed

1 file changed

+85
-12
lines changed

eftest/test/eftest/runner_test.clj

Lines changed: 85 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,42 @@
22
(:require [clojure.test :refer :all]
33
[eftest.runner :as sut]))
44

5-
(in-ns 'eftest.test-ns.single-failing-test)
5+
(def tests-completed
6+
(atom []))
7+
8+
;; Example test namespaces have a prefix such as ns-0 so that they can be
9+
;; deterministically sorted.
10+
11+
(in-ns 'eftest.test-ns-0.throwing-test)
12+
(clojure.core/refer-clojure)
13+
(clojure.core/require 'clojure.test)
14+
(clojure.test/deftest throwing-test
15+
(swap! eftest.runner-test/tests-completed conj :throwing-test)
16+
(throw (ex-info "." {})))
17+
18+
(in-ns 'eftest.test-ns-1.throwing-test-in-fixtures)
19+
(clojure.core/refer-clojure)
20+
(clojure.core/require 'clojure.test)
21+
(clojure.test/use-fixtures :once
22+
(fn [t]
23+
(swap! eftest.runner-test/tests-completed conj :throwing-test-in-fixtures)
24+
(throw (ex-info "." {}))
25+
(t)))
26+
(clojure.test/deftest example-test
27+
(clojure.test/is (= 1 1)))
28+
29+
(in-ns 'eftest.test-ns-2.single-failing-test)
630
(clojure.core/refer-clojure)
731
(clojure.core/require 'clojure.test)
832
(clojure.test/deftest single-failing-test
33+
(swap! eftest.runner-test/tests-completed conj :single-failing-test)
934
(clojure.test/is (= 1 2)))
1035

11-
(in-ns 'eftest.test-ns.another-failing-test)
36+
(in-ns 'eftest.test-ns-3.another-failing-test)
1237
(clojure.core/refer-clojure)
1338
(clojure.core/require 'clojure.test)
1439
(clojure.test/deftest another-failing-test
40+
(swap! eftest.runner-test/tests-completed conj :another-failing-test)
1541
(clojure.test/is (= 3 4)))
1642

1743
(in-ns 'eftest.test-ns.slow-test)
@@ -44,23 +70,70 @@
4470
:return @ret})))
4571

4672
(deftest test-reporting
47-
(let [out (:output (test-run-tests 'eftest.test-ns.single-failing-test))]
48-
(is (re-find #"FAIL in eftest.test-ns.single-failing-test/single-failing-test" out))
73+
(let [out (:output (test-run-tests 'eftest.test-ns-2.single-failing-test))]
74+
(is (re-find #"FAIL in eftest.test-ns-2.single-failing-test/single-failing-test" out))
4975
(is (not (re-find #"IllegalArgumentException" out)))))
5076

5177
(deftest test-fail-fast
52-
(let [result (:return
53-
(test-run-tests
54-
'[eftest.test-ns.single-failing-test
55-
eftest.test-ns.another-failing-test]
56-
{:fail-fast? true, :multithread? false}))]
57-
(is (= {:test 1 :fail 1} (select-keys result [:test :fail])))))
78+
(let [run! (fn [nses opts]
79+
(reset! tests-completed [])
80+
(-> nses
81+
(test-run-tests (merge {:multithread? false} opts))
82+
:return
83+
(select-keys [:test :fail :error])))]
84+
85+
(testing "Failing tests"
86+
(let [result (run! '[eftest.test-ns-2.single-failing-test
87+
eftest.test-ns-3.another-failing-test]
88+
{:fail-fast? true})]
89+
(is (= {:test 1 :fail 1 :error 0} result))
90+
(is (= [:single-failing-test]
91+
@tests-completed)))
92+
93+
(let [result (run! '[eftest.test-ns-2.single-failing-test
94+
eftest.test-ns-3.another-failing-test]
95+
{:fail-fast? false})]
96+
(is (= {:test 2 :fail 2 :error 0} result))
97+
(is (= [:single-failing-test :another-failing-test]
98+
@tests-completed))))
99+
100+
(testing "Exceptions in tests"
101+
(let [result (run! '[eftest.test-ns-0.throwing-test
102+
eftest.test-ns-2.single-failing-test]
103+
{:fail-fast? true})]
104+
(is (= {:test 1 :fail 0 :error 1} result))
105+
(is (= [:throwing-test]
106+
@tests-completed)))
107+
108+
(let [result (run! '[eftest.test-ns-0.throwing-test
109+
eftest.test-ns-2.single-failing-test]
110+
{:fail-fast? false})]
111+
(is (= {:test 2 :fail 1 :error 1} result))
112+
(is (= [:throwing-test
113+
:single-failing-test]
114+
@tests-completed))))
115+
116+
(testing "Exceptions in fixtures"
117+
(let [result (run! '[eftest.test-ns-1.throwing-test-in-fixtures
118+
eftest.test-ns-2.single-failing-test]
119+
{:fail-fast? true})]
120+
(is (= {:test 0 :fail 0 :error 1} result))
121+
(is (= [:throwing-test-in-fixtures]
122+
@tests-completed)))
123+
124+
(let [result (run! '[eftest.test-ns-1.throwing-test-in-fixtures
125+
eftest.test-ns-2.single-failing-test]
126+
{:fail-fast? false})]
127+
(is (= {:test 1 :fail 1 :error 1} result))
128+
(is (= [:throwing-test-in-fixtures
129+
:single-failing-test]
130+
@tests-completed))))))
58131

59132
(deftest test-fail-multi
60133
(let [out (:output
61134
(test-run-tests
62-
'[eftest.test-ns.single-failing-test
63-
eftest.test-ns.another-failing-test]))]
135+
'[eftest.test-ns-2.single-failing-test
136+
eftest.test-ns-3.another-failing-test]))]
64137
(println out)
65138
(is (re-find #"(?m)expected: 1\n actual: 2" out))
66139
(is (re-find #"(?m)expected: 3\n actual: 4" out))))

0 commit comments

Comments
 (0)