38 lines
1.3 KiB
Clojure
38 lines
1.3 KiB
Clojure
;; BB-TEST-PATCH: add this file to mock the midje 'fact' macro
|
|
|
|
(ns me.raynes.mock-midje
|
|
(:require [rewrite-clj.paredit :as rcp]
|
|
[rewrite-clj.zip :as rcz]
|
|
[clojure.string :as str]
|
|
[clojure.test :refer [deftest is testing]]))
|
|
|
|
(defn- up-until-nil [z]
|
|
(if-let [new-z (rcz/up z)]
|
|
(recur new-z)
|
|
z))
|
|
|
|
(defn- replace-arrow [form-zipper-at-arrow]
|
|
(let [lhs (-> form-zipper-at-arrow rcz/left rcz/node)
|
|
rhs (-> form-zipper-at-arrow rcz/right rcz/node)]
|
|
(-> form-zipper-at-arrow
|
|
(rcp/wrap-around :list)
|
|
rcp/slurp-backward
|
|
rcp/slurp-forward
|
|
rcz/up
|
|
(rcz/replace `(is (= ~lhs ~rhs)))
|
|
up-until-nil)))
|
|
|
|
(defn- replace-arrows [form-zipper]
|
|
(if-let [next-arrow (rcz/find-next-value form-zipper rcz/next '=>)]
|
|
(let [rd (replace-arrow next-arrow)]
|
|
(recur rd))
|
|
(rcz/sexpr form-zipper)))
|
|
|
|
(defmacro fact
|
|
"mockup of midje's fact that just transforms `=>` into `is` checks and uses deftest"
|
|
[& _] ;operating on &form
|
|
(let [[nameish body] (if (string? (second &form))
|
|
[(str/replace (second &form) #"[^\w\d]" "-") (nnext &form)]
|
|
["test" (next &form)])
|
|
transformed-body (replace-arrows (rcz/of-string (pr-str body)))]
|
|
`(deftest ~(gensym nameish) ~@transformed-body)))
|