Skip to content

Commit 8614498

Browse files
committed
CLJS-2665: Port clojure.spec.test.alpha/enumerate-namespace
1 parent d2cc14a commit 8614498

File tree

4 files changed

+38
-1
lines changed

4 files changed

+38
-1
lines changed

src/main/cljs/cljs/spec/test/alpha.cljc

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,23 @@
2222
(list x)
2323
x))
2424

25+
(defn- enumerate-namespace* [sym-or-syms]
26+
(into #{}
27+
(mapcat
28+
(fn [sym]
29+
(->> (vals (ana-api/ns-interns sym))
30+
(map :name)
31+
(map
32+
(fn [name-sym]
33+
(symbol (name sym) (name name-sym)))))))
34+
(collectionize sym-or-syms)))
35+
36+
(defmacro enumerate-namespace
37+
"Given a symbol naming an ns, or a collection of such symbols,
38+
returns the set of all symbols naming vars in those nses."
39+
[ns-sym-or-syms]
40+
`'~(enumerate-namespace* (eval ns-sym-or-syms)))
41+
2542
(defn- fn-spec-name?
2643
[s]
2744
(symbol? s))
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
(ns cljs.spec.test.test-ns1)
2+
3+
(def x 1)
4+
5+
(def y 2)
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
(ns cljs.spec.test.test-ns2)
2+
3+
(def z 3)

src/test/cljs/cljs/spec/test_test.cljs

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22
(:require-macros [cljs.spec.test.test-macros])
33
(:require [cljs.test :as test :refer-macros [deftest is are run-tests]]
44
[cljs.spec.alpha :as s]
5-
[cljs.spec.test.alpha :as stest]))
5+
[cljs.spec.test.alpha :as stest]
6+
[cljs.spec.test.test-ns1]
7+
[cljs.spec.test.test-ns2]))
68

79
(s/fdef clojure.core/symbol
810
:args (s/alt :separate (s/cat :ns string? :n string?)
@@ -85,3 +87,13 @@
8587

8688
(deftest test-2755
8789
(is (uri? (ffirst (s/exercise uri? 1)))))
90+
91+
(deftest test-cljs-2665
92+
(is (= '#{cljs.spec.test.test-ns1/x cljs.spec.test.test-ns1/y cljs.spec.test.test-ns2/z}
93+
(stest/enumerate-namespace '[cljs.spec.test.test-ns1 cljs.spec.test.test-ns2])))
94+
(is (= '#{cljs.spec.test.test-ns1/x cljs.spec.test.test-ns1/y cljs.spec.test.test-ns2/z}
95+
(stest/enumerate-namespace ['cljs.spec.test.test-ns1 'cljs.spec.test.test-ns2])))
96+
(is (= '#{cljs.spec.test.test-ns1/x cljs.spec.test.test-ns1/y}
97+
(stest/enumerate-namespace 'cljs.spec.test.test-ns1)))
98+
(is (= '#{cljs.spec.test.test-ns2/z}
99+
(stest/enumerate-namespace 'cljs.spec.test.test-ns2))))

0 commit comments

Comments
 (0)