/test/babashka/datafy_test.clj
https://github.com/borkdude/babashka · Clojure · 75 lines · 62 code · 12 blank · 1 comment · 8 complexity · 7cbd54c61d97ce5fb7b7cc6104229183 MD5 · raw file
- (ns babashka.datafy-test
- (:require [babashka.test-utils :as tu]
- [clojure.edn :as edn]
- [clojure.test :as t :refer [deftest is testing]]))
- (defn bb [& args]
- (edn/read-string (apply tu/bb nil (map str args))))
- (deftest datafy-test
- (testing "default implementation of datafy works"
- (is (= #{:public} (bb "(require '[clojure.datafy :as d]) (:flags (d/datafy Exception))"))))
- (testing "custom implementation of datafy works"
- (is (= {:number 1} (bb "
- (require '[clojure.datafy :as d]
- '[clojure.core.protocols :as p])
- (extend-type Number
- p/Datafiable
- (datafy [x]
- {:number x}))
- (d/datafy 1)
- "))))
- (testing "implement datafy via metadata"
- (is (= {:datafied []} (bb "
- (require '[clojure.datafy :as d]
- '[clojure.core.protocols :as p])
- (def x (with-meta [] {`p/datafy (fn [this] {:datafied this})}))
- (d/datafy x)
- "))))
- (testing "reify Datafiable"
- (let [prog "
- (require '[clojure.datafy :as d]
- '[clojure.core.protocols :as p])
- (def x (reify p/Datafiable (datafy [_] [:data])))
- (d/datafy x)"]
- (is (= [:data] (bb prog)))))
-
- (testing "default implementation of nav works"
- (is (= 1 (bb "(require '[clojure.datafy :as d]) (d/nav {:a 1} :a 1)"))))
- (testing "custom implementation of nav works"
- (is (= \f (bb "
- (require '[clojure.datafy :as d]
- '[clojure.core.protocols :as p])
- (extend-type String
- p/Navigable
- (nav [coll k v]
- (.charAt coll k)))
- (d/nav \"foo\" 0 nil)
- "))))
- (testing "implement nav via metadata"
- (is (= {:nav [[] :k :v]} (bb "
- (require '[clojure.datafy :as d]
- '[clojure.core.protocols :as p])
- (def x (with-meta [] {`p/nav (fn [this k v] {:nav [this k v]})}))
- (d/nav x :k :v)
- "))))
- (testing "reify Navigable"
- (let [prog "
- (require '[clojure.datafy :as d]
- '[clojure.core.protocols :as p])
- (def x (reify p/Navigable (nav [_ _ _] [:data])))
- (d/nav x nil nil)"]
- (is (= [:data] (bb prog))))))
- ;;;; Scratch
- (comment
- (t/run-tests *ns*)
- (datafy-test))