Meikel  Brandmeyer avatar Meikel Brandmeyer committed 0477559

Allow to name specific tests explicitly

Comments (0)

Files changed (2)

clojuresque/src/main/groovy/clojuresque/ClojureTestTask.groovy

     def FileCollection testClasspath
     def SourceDirectorySet testRoots
     def Closure jvmOptions = {}
+    def List<String> tests = []
 
     @TaskAction
     public void runTests() {
                 this.classesDir,
                 this.testClasspath
             )
-            main = "clojuresque.tasks.test/main"
-            args = this.source.files
+            if (tests.size() == 0) {
+                main = "clojuresque.tasks.test/test-namespaces"
+                args = this.source.files
+            } else {
+                main = "clojuresque.tasks.test/test-vars"
+                args = tests
+            }
         }
     }
 }

runtime/src/main/resources/clojuresque/tasks/test.clj

 (ns clojuresque.tasks.test
   (:use
-    [clojure.test :only (run-tests)]
+    [clojure.test :only (run-tests) :as t]
     [clojuresque.cli :only (deftask)]
     [clojuresque.util :only (namespaces)]))
 
-(deftask main
+(defn check-result
+  [result]
+  (when (or (pos? (:fail result)) (pos? (:error result)))
+    (System/exit 1)))
+
+(deftask test-namespaces
   "Run all tests in the namespaces of the given files by virtue of clojure.test."
   [files]
   (let [namespaces (namespaces files)]
     (apply require namespaces)
-    (let [result (apply run-tests namespaces)]
-      (when (or (pos? (:fail result)) (pos? (:error result)))
-        (System/exit 1)))))
+    (check-result (apply run-tests namespaces))))
+
+; For now: do stuff manually for explicitly named tests.
+(deftask test-vars
+  "Run only the named tests by virtue of clojure.test."
+  [tests]
+  (let [tests (group-by (comp symbol namespace) (map read-string tests))]
+    (apply require (keys tests))
+    (binding [t/*report-counters* (ref t/*initial-report-counters*)]
+      (doseq [[nspace test-vars] tests]
+        (let [ns-obj          (the-ns nspace)
+              once-fixture-fn (t/join-fixtures
+                                (::t/once-fixtures (meta ns-obj)))
+              each-fixture-fn (t/join-fixtures
+                                (::t/each-fixtures (meta ns-obj)))]
+          (t/do-report {:type :begin-test-ns :ns ns-obj})
+          (once-fixture-fn
+            (fn []
+              (doseq [v (map resolve test-vars)]
+                (when (:test (meta v))
+                  (each-fixture-fn (fn [] (t/test-var v)))))))
+          (t/do-report {:type :end-test-ns :ns ns-obj})))
+      (let [summary (assoc @t/*report-counters* :type :summary)]
+        (t/do-report summary)
+        (check-result summary)))))
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.