67 lines
1.9 KiB
Clojure
67 lines
1.9 KiB
Clojure
(ns babashka.reify-test
|
|
(:require
|
|
[babashka.test-utils :as test-utils]
|
|
[clojure.edn :as edn]
|
|
[clojure.test :as test :refer [deftest is testing]]))
|
|
|
|
(defn bb [input & args]
|
|
(edn/read-string
|
|
{:readers *data-readers*
|
|
:eof nil}
|
|
(apply test-utils/bb (when (some? input) (str input)) (map str args))))
|
|
|
|
(deftest file-filter-test
|
|
(is (true? (bb nil "
|
|
(def filter-obj (reify java.io.FileFilter
|
|
(accept [this f] (prn (.getPath f)) true)))
|
|
(def filename-filter-obj
|
|
(reify java.io.FilenameFilter
|
|
(accept [this f name] (prn name) true)))
|
|
(def s1 (with-out-str (.listFiles (clojure.java.io/file \".\") filter-obj)))
|
|
(def s2 (with-out-str (.listFiles (clojure.java.io/file \".\") filename-filter-obj)))
|
|
(and (pos? (count s1)) (pos? (count s2)))"))))
|
|
|
|
(deftest reify-multiple-arities-test
|
|
(testing "ILookup"
|
|
(is (= ["->:foo" 10]
|
|
(bb nil "
|
|
(def m (reify clojure.lang.ILookup
|
|
(valAt [this x] (str \"->\" x))
|
|
(valAt [this x y] y)))
|
|
[(:foo m) (:foo m 10)]"))))
|
|
(testing "IFn"
|
|
(is (= [:yo :three :six :twelve :eighteen :nineteen 19]
|
|
(bb nil "
|
|
(def m (reify clojure.lang.IFn
|
|
(invoke [this] :yo)
|
|
(invoke [this _ _ _] :three)
|
|
(invoke [this _ _ _ _ _ _] :six)
|
|
(invoke [this _ _ _ _ _ _ _ _ _ _ _ _] :twelve)
|
|
(invoke [this _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _] :eighteen)
|
|
(invoke [this _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _] :nineteen)
|
|
(applyTo [this args] (last args))))
|
|
[
|
|
(m)
|
|
(m 1 2 3)
|
|
(m 1 2 3 4 5 6)
|
|
(m 1 2 3 4 5 6 1 2 3 4 5 6)
|
|
(m 1 2 3 4 5 6 1 2 3 4 5 6 1 2 3 4 5 6)
|
|
(m 1 2 3 4 5 6 1 2 3 4 5 6 1 2 3 4 5 6 1)
|
|
(apply m (range 20))
|
|
]")))))
|
|
|
|
(deftest reify-object
|
|
(testing "toString"
|
|
(is (= ":foo"
|
|
(bb nil "
|
|
(def m (reify Object
|
|
(toString [_] (str :foo))))
|
|
(str m)
|
|
"))))
|
|
(testing "Hashcode still works when only overriding toString"
|
|
(is (number?
|
|
(bb nil "
|
|
(def m (reify Object
|
|
(toString [_] (str :foo))))
|
|
(hash m)
|
|
")))))
|