* Add tests for markdown-clj and tools.namespace
See comment for why only one markdown test could be run.
Closes #1069 and #1064
* Convert 10 test libs using add-libtest
Also improved add-libtest to only require maven artifact
and rely on clojars for getting git-url most of the time
* Convert 8 more test libs using add-libtest
Also updated table and added comment for newline test
* Fix doric test
* Disable tools.namespace test that fails on windows
* Added dozen manual test libs and converted 2 test libs
add-libtest.clj supports manually-added and test-directories options
* Converts last tests to test namespaces and write libraries.csv
* Add a number of library tests from projects.md
Also add more docs around adding test libs and tweak add script
* Use :sha for gitlib and older clojure cli
* Revert "Use :sha for gitlib and older clojure cli"
This reverts commit c663ab8368.
* Fix and disable failing tests
Disabled tests that fail consistently and fixed windows one
210 lines
6.4 KiB
Clojure
210 lines
6.4 KiB
Clojure
(ns clojure.tools.namespace.parse-test
|
|
(:use [clojure.test :only (deftest is)]
|
|
[clojure.tools.namespace.parse :only (deps-from-ns-decl
|
|
read-ns-decl)]))
|
|
|
|
(def ns-decl-prefix-list
|
|
'(ns com.example.one
|
|
(:require (com.example two
|
|
[three :as three]
|
|
[four :refer (a b)])
|
|
(com.example.sub [five :as five]
|
|
six))
|
|
(:use (com.example seven
|
|
[eight :as eight]
|
|
(nine :only (c d))
|
|
[ten]))))
|
|
|
|
;; Some people like to write prefix lists as vectors, not lists. The
|
|
;; use/require functions accept this form.
|
|
(def ns-decl-prefix-list-as-vector
|
|
'(ns com.example.one
|
|
(:require [com.example
|
|
two
|
|
[three :as three]
|
|
[four :refer (a b)]]
|
|
[com.example.sub
|
|
[five :as five]
|
|
six])
|
|
(:use [com.example
|
|
seven
|
|
[eight :as eight]
|
|
(nine :only (c d))
|
|
[ten]])))
|
|
|
|
(def ns-decl-prefix-list-clauses-as-vectors
|
|
"Sometimes people even write the clauses inside ns as vectors, which
|
|
clojure.core/ns allows. See TNS-21."
|
|
'(ns com.example.one
|
|
[:require [com.example
|
|
two
|
|
[three :as three]
|
|
[four :refer (a b)]]
|
|
[com.example.sub
|
|
[five :as five]
|
|
six]]
|
|
[:use [com.example
|
|
seven
|
|
[eight :as eight]
|
|
(nine :only (c d))
|
|
[ten]]]))
|
|
|
|
(def deps-from-prefix-list
|
|
'#{com.example.two
|
|
com.example.three
|
|
com.example.four
|
|
com.example.sub.five
|
|
com.example.sub.six
|
|
com.example.seven
|
|
com.example.eight
|
|
com.example.nine
|
|
com.example.ten})
|
|
|
|
(deftest t-prefix-list
|
|
(is (= deps-from-prefix-list
|
|
(deps-from-ns-decl ns-decl-prefix-list))))
|
|
|
|
(deftest t-prefix-list-as-vector
|
|
(is (= deps-from-prefix-list
|
|
(deps-from-ns-decl ns-decl-prefix-list-as-vector))))
|
|
|
|
(deftest t-prefix-list-clauses-as-vectors
|
|
(is (= deps-from-prefix-list
|
|
(deps-from-ns-decl ns-decl-prefix-list-clauses-as-vectors))))
|
|
|
|
(deftest t-no-deps-returns-empty-set
|
|
(is (= #{} (deps-from-ns-decl '(ns com.example.one)))))
|
|
|
|
(def multiple-ns-decls
|
|
'((ns one)
|
|
(ns two (:require one))
|
|
(ns three (:require [one :as o] [two :as t]))))
|
|
|
|
(def multiple-ns-decls-string
|
|
" (println \"Code before first ns\")
|
|
(ns one)
|
|
(println \"Some code\")
|
|
(defn hello-world [] \"Hello, World!\")
|
|
(ns two (:require one))
|
|
(println \"Some more code\")
|
|
(ns three (:require [one :as o] [two :as t]))")
|
|
|
|
(deftest t-read-multiple-ns-decls
|
|
(with-open [rdr (clojure.lang.LineNumberingPushbackReader.
|
|
(java.io.PushbackReader.
|
|
(java.io.StringReader. multiple-ns-decls-string)))]
|
|
(is (= multiple-ns-decls
|
|
(take-while identity (repeatedly #(read-ns-decl rdr)))))))
|
|
|
|
(def ns-docstring-example
|
|
"The example ns declaration used in the docstring of clojure.core/ns"
|
|
'(ns foo.bar
|
|
(:refer-clojure :exclude [ancestors printf])
|
|
(:require (clojure.contrib sql combinatorics))
|
|
(:use (my.lib this that))
|
|
(:import (java.util Date Timer Random)
|
|
(java.sql Connection Statement))))
|
|
|
|
(def deps-from-ns-docstring-example
|
|
'#{clojure.contrib.sql
|
|
clojure.contrib.combinatorics
|
|
my.lib.this
|
|
my.lib.that})
|
|
|
|
(deftest t-ns-docstring-example
|
|
(is (= deps-from-ns-docstring-example
|
|
(deps-from-ns-decl ns-docstring-example))))
|
|
|
|
(def require-docstring-example
|
|
"The example ns declaration used in the docstring of
|
|
clojure.core/require"
|
|
'(ns (:require (clojure zip [set :as s]))))
|
|
|
|
(def deps-from-require-docstring-example
|
|
'#{clojure.zip
|
|
clojure.set})
|
|
|
|
(deftest t-require-docstring-example
|
|
(is (= deps-from-require-docstring-example
|
|
(deps-from-ns-decl require-docstring-example))))
|
|
|
|
(def multiple-clauses
|
|
"Example showing more than one :require or :use clause in one ns
|
|
declaration, which clojure.core/ns allows."
|
|
'(ns foo.bar
|
|
(:require com.example.one)
|
|
(:import java.io.File)
|
|
(:require (com.example two three))
|
|
(:use (com.example [four :only [x]]))
|
|
(:use (com.example (five :only [x])))))
|
|
|
|
(def deps-from-multiple-clauses
|
|
'#{com.example.one
|
|
com.example.two
|
|
com.example.three
|
|
com.example.four
|
|
com.example.five})
|
|
|
|
(deftest t-deps-from-multiple-clauses
|
|
(is (= deps-from-multiple-clauses
|
|
(deps-from-ns-decl multiple-clauses))))
|
|
|
|
(def clauses-without-keywords
|
|
"Example of require/use clauses with symbols instead of keywords,
|
|
which clojure.core/ns allows."
|
|
'(ns foo.bar
|
|
(require com.example.one)
|
|
(import java.io.File)
|
|
(use (com.example (prefixes (two :only [x])
|
|
three)))))
|
|
|
|
(def deps-from-clauses-without-keywords
|
|
'#{com.example.one
|
|
com.example.prefixes.two
|
|
com.example.prefixes.three})
|
|
|
|
(deftest t-clauses-without-keywords
|
|
(is (= deps-from-clauses-without-keywords
|
|
(deps-from-ns-decl clauses-without-keywords))))
|
|
|
|
(def reader-conditionals-string
|
|
"(ns com.examples.one
|
|
(:require #?(:clj clojure.string
|
|
:cljs goog.string)))")
|
|
|
|
(deftest t-reader-conditionals
|
|
;; TODO: the predicate wasn't added to bb yet, will come in version after 0.6.7
|
|
(when true #_(resolve 'clojure.core/reader-conditional?)
|
|
(let [actual (-> reader-conditionals-string
|
|
java.io.StringReader.
|
|
java.io.PushbackReader.
|
|
clojure.lang.LineNumberingPushbackReader.
|
|
read-ns-decl
|
|
deps-from-ns-decl)]
|
|
(is (= #{'clojure.string} actual)))))
|
|
|
|
(def ns-with-npm-dependency
|
|
"(ns com.examples.one
|
|
(:require [\"foobar\"] [baz]))")
|
|
|
|
(deftest npm-dependency
|
|
(let [actual (-> ns-with-npm-dependency
|
|
java.io.StringReader.
|
|
java.io.PushbackReader.
|
|
clojure.lang.LineNumberingPushbackReader.
|
|
read-ns-decl
|
|
deps-from-ns-decl)]
|
|
(is (= #{'baz} actual))))
|
|
|
|
(def ns-with-require-macros
|
|
"(ns com.examples.one
|
|
(:require-macros [foo :refer [bar]]))")
|
|
|
|
(deftest require-macros
|
|
(let [actual (-> ns-with-require-macros
|
|
java.io.StringReader.
|
|
java.io.PushbackReader.
|
|
clojure.lang.LineNumberingPushbackReader.
|
|
read-ns-decl
|
|
deps-from-ns-decl)]
|
|
(is (= #{'foo} actual))))
|