Meikel  Brandmeyer avatar Meikel Brandmeyer committed 9274c42

Implement RunTests nail

Fixes #36

Comments (0)

Files changed (5)

autoload/vimclojure.vim

 
 function! vimclojure#RunTests(all)
 	let ns = b:vimclojure_namespace
-	let all = a:all ? "-all" : ""
 
-	let cmd = ""
-	if ns != "user"
-		let cmd .= "(require :reload" . all . " '" . ns . ")"
-	endif
-	let cmd .= "(require 'clojure.contrib.test-is)"
-	let cmd .= "(clojure.contrib.test-is/run-tests (find-ns '" . ns ."))"
-	let result = vimclojure#ExecuteNailWithInput("Repl", cmd, "-r")
-
+	let result = call(function("vimclojure#ExecuteNailWithInput"),
+				\ [ "RunTests", "", "-n", ns ] + (a:all ? [ "-a" ] : []))
 	let resultBuffer = g:vimclojure#ClojureResultBuffer.New()
 	call resultBuffer.showOutput(result)
 	wincmd p

src/main/clojure/vimclojure/nails.clj

         completions (mapcat #(backend/complete % nspace prefix base)
                             to-complete)]
     (map #(apply util/make-completion-item %) completions)))
+
+(defnail RunTests
+  "Usage: ng vimclojure.nails.RunTests"
+  [[nspace n "Run tests in the given namespace." "user"]
+   [all?   a "Reload all or only the namespace under test"]]
+  (when (not= "user" nspace)
+    (if all
+      (require :reload-all (symbol nspace))
+      (require :reload (symbol nspace))))
+  (util/run-tests-helper (symbol nspace))
+  nil)
+

src/main/clojure/vimclojure/optional/contrib_test_is.clj

+;-
+; Copyright 2009 (c) Meikel Brandmeyer.
+; All rights reserved.
+;
+; Permission is hereby granted, free of charge, to any person obtaining a copy
+; of this software and associated documentation files (the "Software"), to deal
+; in the Software without restriction, including without limitation the rights
+; to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+; copies of the Software, and to permit persons to whom the Software is
+; furnished to do so, subject to the following conditions:
+;
+; The above copyright notice and this permission notice shall be included in
+; all copies or substantial portions of the Software.
+;
+; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+; IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+; FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+; AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+; LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+; OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+; THE SOFTWARE.
+
+(clojure.core/in-ns 'vimclojure.util)
+
+(require '[clojure.contrib.test-is :as test-is])
+
+(defoptional run-tests-helper
+  [& namespaces]
+  (apply test-is/run-tests namespaces))
+
+(def test-runner :clojure.contrib.test-is)

src/main/clojure/vimclojure/optional/core_test.clj

+;-
+; Copyright 2009 (c) Meikel Brandmeyer.
+; All rights reserved.
+;
+; Permission is hereby granted, free of charge, to any person obtaining a copy
+; of this software and associated documentation files (the "Software"), to deal
+; in the Software without restriction, including without limitation the rights
+; to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+; copies of the Software, and to permit persons to whom the Software is
+; furnished to do so, subject to the following conditions:
+;
+; The above copyright notice and this permission notice shall be included in
+; all copies or substantial portions of the Software.
+;
+; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+; IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+; FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+; AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+; LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+; OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+; THE SOFTWARE.
+
+(clojure.core/in-ns 'vimclojure.util)
+
+(require '[clojure.test :as core-test])
+
+(defoptional run-tests-helper
+  [& namespaces]
+  (apply core-test/run-tests namespaces))
+
+(def test-runner :clojure.test)

src/main/clojure/vimclojure/util.clj

   [e]
   (pretty-print-stacktrace e))
 
+(defn run-tests-helper
+  "Run the unit tests of the given namespaces. This is just a helper for
+  run-tests from c.test/c.c.test-is."
+  [& namespaces]
+  (println "VimClojure could determine the location of run-tests."))
+
 ; Load optional libraries
 (defmacro defoptional
    [sym args & body]
     (catch Exception exc
       (when-not (re-find #"Could not locate clojure/contrib/stacktrace__init.class or clojure/contrib/stacktrace.clj on classpath" (str exc))
         (throw exc)))))
+
+(def test-runner nil)
+
+(try
+  (load "optional/core_test")
+  (catch Exception exc
+    (when-not (re-find #"Could not locate clojure/test__init.class or clojure/test.clj on classpath" (str exc))
+      (throw exc))))
+
+(when-not test-runner
+  (try
+    (load "optional/contrib_test_is")
+    (catch Exception exc
+      (when-not (re-find #"Could not locate clojure/contrib/test_is__init.class or clojure/contrib/test_is.clj on classpath" (str exc))
+        (throw exc)))))
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.