-
Notifications
You must be signed in to change notification settings - Fork 128
/
core.clj
28 lines (19 loc) · 1.07 KB
/
core.clj
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
(ns ^{:doc "Utility functions dealing with checking or tranforming forms or zippers."}
midje.parsing.util.core
(:use midje.clojure.core
[utilize.seq :only (first-truthy-fn)])
(:require [clojure.zip :as zip]))
(defn tree-variant [treelike]
(letfn [(is-zipper? [treelike]
(:zip/make-node (meta treelike)))]
(if (is-zipper? treelike) :zipper :form)))
(defmulti matches-symbols-in-semi-sweet-or-sweet-ns? (fn [_symbols_ treelike] (tree-variant treelike)))
(defmethod matches-symbols-in-semi-sweet-or-sweet-ns? :zipper [symbols loc]
(matches-symbols-in-semi-sweet-or-sweet-ns? symbols (zip/node loc)))
(defmethod matches-symbols-in-semi-sweet-or-sweet-ns? :form [symbols node]
(let [base-names (map name symbols)
semi-sweet-names (map #(str "midje.semi-sweet/" %) base-names)
sweet-names (map #(str "midje.sweet/" %) base-names)]
(some #(= % (str node)) (concat base-names semi-sweet-names sweet-names))))
(defn semi-sweet-keyword? [loc]
(matches-symbols-in-semi-sweet-or-sweet-ns? '(expect fake not-called data-fake) loc))