summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorStuart Halloway <stu@thinkrelevance.com>2010-10-14 16:38:39 -0400
committerStuart Halloway <stu@thinkrelevance.com>2010-10-15 07:26:44 -0400
commit479bb230b410cd39f3ca94120729096a38c8df67 (patch)
tree037f11706ab414423a8e2fcb26b0d3dfb7273d5d /test
parent11aed8912e8247629398e0c12484401d6f8ca3ed (diff)
#453 reflection
Signed-off-by: Stuart Halloway <stu@thinkrelevance.com>
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"))