/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

  1. (ns babashka.datafy-test
  2. (:require [babashka.test-utils :as tu]
  3. [clojure.edn :as edn]
  4. [clojure.test :as t :refer [deftest is testing]]))
  5. (defn bb [& args]
  6. (edn/read-string (apply tu/bb nil (map str args))))
  7. (deftest datafy-test
  8. (testing "default implementation of datafy works"
  9. (is (= #{:public} (bb "(require '[clojure.datafy :as d]) (:flags (d/datafy Exception))"))))
  10. (testing "custom implementation of datafy works"
  11. (is (= {:number 1} (bb "
  12. (require '[clojure.datafy :as d]
  13. '[clojure.core.protocols :as p])
  14. (extend-type Number
  15. p/Datafiable
  16. (datafy [x]
  17. {:number x}))
  18. (d/datafy 1)
  19. "))))
  20. (testing "implement datafy via metadata"
  21. (is (= {:datafied []} (bb "
  22. (require '[clojure.datafy :as d]
  23. '[clojure.core.protocols :as p])
  24. (def x (with-meta [] {`p/datafy (fn [this] {:datafied this})}))
  25. (d/datafy x)
  26. "))))
  27. (testing "reify Datafiable"
  28. (let [prog "
  29. (require '[clojure.datafy :as d]
  30. '[clojure.core.protocols :as p])
  31. (def x (reify p/Datafiable (datafy [_] [:data])))
  32. (d/datafy x)"]
  33. (is (= [:data] (bb prog)))))
  34. (testing "default implementation of nav works"
  35. (is (= 1 (bb "(require '[clojure.datafy :as d]) (d/nav {:a 1} :a 1)"))))
  36. (testing "custom implementation of nav works"
  37. (is (= \f (bb "
  38. (require '[clojure.datafy :as d]
  39. '[clojure.core.protocols :as p])
  40. (extend-type String
  41. p/Navigable
  42. (nav [coll k v]
  43. (.charAt coll k)))
  44. (d/nav \"foo\" 0 nil)
  45. "))))
  46. (testing "implement nav via metadata"
  47. (is (= {:nav [[] :k :v]} (bb "
  48. (require '[clojure.datafy :as d]
  49. '[clojure.core.protocols :as p])
  50. (def x (with-meta [] {`p/nav (fn [this k v] {:nav [this k v]})}))
  51. (d/nav x :k :v)
  52. "))))
  53. (testing "reify Navigable"
  54. (let [prog "
  55. (require '[clojure.datafy :as d]
  56. '[clojure.core.protocols :as p])
  57. (def x (reify p/Navigable (nav [_ _ _] [:data])))
  58. (d/nav x nil nil)"]
  59. (is (= [:data] (bb prog))))))
  60. ;;;; Scratch
  61. (comment
  62. (t/run-tests *ns*)
  63. (datafy-test))