Support disabling :monkeypatch-clojure-test.
This commit is contained in:
parent
d661b1846a
commit
824552e449
3 changed files with 40 additions and 27 deletions
|
@ -116,6 +116,9 @@
|
|||
:test-selectors {:default (fn [m] (not (or (:integration m) (:regression m))))
|
||||
:integration :integration
|
||||
:regression :regression}
|
||||
;; In order to support the `retest` task, Leiningen must monkeypatch the
|
||||
;; clojure.test library. This disables that feature and breaks `lein retest`.
|
||||
:monkeypatch-clojure-test false
|
||||
;; These namespaces will be AOT-compiled. Needed for gen-class and
|
||||
;; other Java interop functionality. Put a regex here to compile all
|
||||
;; namespaces whose names match.
|
||||
|
|
|
@ -1,11 +1,14 @@
|
|||
(ns leiningen.retest
|
||||
(:require [leiningen.test :as test]))
|
||||
(:require [leiningen.test :as test]
|
||||
[leiningen.core.main :as main]))
|
||||
|
||||
(defn retest
|
||||
"Run only the test namespaces which failed last time around."
|
||||
[project & selectors]
|
||||
(apply test/test project
|
||||
(concat (if (.exists (java.io.File. ".lein-failures"))
|
||||
(->> (slurp ".lein-failures")
|
||||
read-string sort (map name)))
|
||||
selectors)))
|
||||
(if (:monkeypatch-clojure-test project true)
|
||||
(apply test/test project
|
||||
(concat (if (.exists (java.io.File. ".lein-failures"))
|
||||
(->> (slurp ".lein-failures")
|
||||
read-string sort (map name)))
|
||||
selectors))
|
||||
(main/abort "Cannot retest when :monkeypatch-clojure-test is disabled.")))
|
||||
|
|
|
@ -61,6 +61,9 @@
|
|||
~selectors)]
|
||||
ns#)))
|
||||
|
||||
;; TODO: make this an arg to form-for-testing-namespaces in 3.0.
|
||||
(def ^:private ^:dynamic *monkeypatch?* true)
|
||||
|
||||
(defn form-for-testing-namespaces
|
||||
"Return a form that when eval'd in the context of the project will test
|
||||
each namespace and print an overall summary."
|
||||
|
@ -70,27 +73,30 @@
|
|||
(when (seq ~ns-sym)
|
||||
(apply require :reload ~ns-sym))
|
||||
(let [failures# (atom #{})
|
||||
selected-namespaces# ~(form-for-nses-selectors-match selectors ns-sym)
|
||||
_# (leiningen.core.injected/add-hook
|
||||
#'clojure.test/report
|
||||
(fn [report# m# & args#]
|
||||
(when (#{:error :fail} (:type m#))
|
||||
(when-let [first-var# (-> clojure.test/*testing-vars* first meta)]
|
||||
(swap! failures# conj (ns-name (:ns first-var#)))
|
||||
(newline)
|
||||
(println "lein test :only"
|
||||
(str (ns-name (:ns first-var#))
|
||||
"/"
|
||||
(:name first-var#)))))
|
||||
(if (= :begin-test-ns (:type m#))
|
||||
(clojure.test/with-test-out
|
||||
(newline)
|
||||
(println "lein test" (ns-name (:ns m#))))
|
||||
(apply report# m# args#))))
|
||||
selected-namespaces# ~(form-for-nses-selectors-match selectors ns-sym)
|
||||
_# (when ~*monkeypatch?*
|
||||
(leiningen.core.injected/add-hook
|
||||
#'clojure.test/report
|
||||
(fn [report# m# & args#]
|
||||
(when (#{:error :fail} (:type m#))
|
||||
(when-let [first-var# (-> clojure.test/*testing-vars* first meta)]
|
||||
(swap! failures# conj (ns-name (:ns first-var#)))
|
||||
(newline)
|
||||
(println "lein test :only"
|
||||
(str (ns-name (:ns first-var#)) "/"
|
||||
(:name first-var#)))))
|
||||
(if (= :begin-test-ns (:type m#))
|
||||
(clojure.test/with-test-out
|
||||
(newline)
|
||||
(println "lein test" (ns-name (:ns m#))))
|
||||
(apply report# m# args#)))))
|
||||
summary# (binding [clojure.test/*test-out* *out*]
|
||||
(~form-for-suppressing-unselected-tests selected-namespaces# ~selectors
|
||||
#(apply ~'clojure.test/run-tests selected-namespaces#)))]
|
||||
(spit ".lein-failures" (pr-str @failures#))
|
||||
(~form-for-suppressing-unselected-tests
|
||||
selected-namespaces# ~selectors
|
||||
#(apply ~'clojure.test/run-tests selected-namespaces#)))]
|
||||
(spit ".lein-failures" (if ~*monkeypatch?*
|
||||
(pr-str @failures#)
|
||||
"#<disabled :monkeypatch-clojure-test>"))
|
||||
(if ~*exit-after-tests*
|
||||
(System/exit (+ (:error summary#) (:fail summary#)))
|
||||
(+ (:error summary#) (:fail summary#))))))))
|
||||
|
@ -182,7 +188,8 @@ specified test. A default :all test-selector is available to run all tests."
|
|||
main/*exit-process?*)
|
||||
*exit-after-tests* (if (= :leiningen (:eval-in project))
|
||||
false
|
||||
*exit-after-tests*)]
|
||||
*exit-after-tests*)
|
||||
*monkeypatch?* (:monkeypatch-clojure-test project true)]
|
||||
(let [project (project/merge-profiles project [:leiningen/test :test])
|
||||
[nses selectors] (read-args tests project)
|
||||
form (form-for-testing-namespaces nses nil (vec selectors))]
|
||||
|
|
Loading…
Reference in a new issue