summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/clojure/test_clojure.clj1
-rw-r--r--test/clojure/test_clojure/reflect.clj33
2 files changed, 34 insertions, 0 deletions
diff --git a/test/clojure/test_clojure.clj b/test/clojure/test_clojure.clj
index a82ed0ae..2f3fc4f8 100644
--- a/test/clojure/test_clojure.clj
+++ b/test/clojure/test_clojure.clj
@@ -65,6 +65,7 @@
:def
:keywords
:data
+ :reflect
])
(def test-namespaces
diff --git a/test/clojure/test_clojure/reflect.clj b/test/clojure/test_clojure/reflect.clj
new file mode 100644
index 00000000..416092ac
--- /dev/null
+++ b/test/clojure/test_clojure/reflect.clj
@@ -0,0 +1,33 @@
+(ns clojure.test-clojure.reflect
+ (:use clojure.data [clojure.reflect :as reflect] clojure.test clojure.pprint)
+ (:import [clojure.reflect AsmReflector JavaReflector]))
+
+(defn nodiff
+ [x y]
+ (let [[x-only y-only common] (diff x y)]
+ (when (or x-only y-only)
+ (is false (with-out-str (pprint {:x-only x-only
+ :y-only y-only
+ :common common}))))))
+
+(deftest compare-reflect-and-asm
+ (let [cl (.getContextClassLoader (Thread/currentThread))
+ asm-reflector (AsmReflector. cl)
+ java-reflector (JavaReflector. cl)]
+ (doseq [classname '[java.lang.Runnable
+ java.lang.Object
+ java.io.FileInputStream
+ clojure.lang.Compiler
+ clojure.lang.PersistentVector]]
+ (nodiff (type-reflect classname :reflector asm-reflector)
+ (type-reflect classname :reflector java-reflector)))))
+
+(deftest field-descriptor->class-symbol-test
+ (are [s d] (= s (@#'reflect/field-descriptor->class-symbol d))
+ 'clojure.asm.Type<><> "[[Lclojure/asm/Type;"
+ 'int "I"
+ 'java.lang.Object "Ljava.lang.Object;"))
+
+(deftest internal-name->class-symbol-test
+ (are [s n] (= s (@#'reflect/internal-name->class-symbol n))
+ 'java.lang.Exception "java/lang/Exception"))