PageRenderTime 43ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 0ms

/src/midje/ideas/prerequisites.clj

https://github.com/dnaumov/Midje
Clojure | 42 lines | 35 code | 7 blank | 0 comment | 1 complexity | 7350dfa648c6c5f4876b573d405c5db5 MD5 | raw file
  1. (ns ^{:doc "Functions for turning provideds into semi-sweet fakes"}
  2. midje.ideas.prerequisites
  3. (:use [midje.util.namespace :only [matches-symbols-in-semi-sweet-or-sweet-ns?]]
  4. [midje.util.form-utils :only [symbol-named?]]
  5. [midje.internal-ideas.file-position :only [arrow-line-number-from-form]]
  6. [midje.ideas.metaconstants :only [metaconstant-for-form
  7. with-fresh-generated-metaconstant-names]]
  8. midje.ideas.arrow-symbols
  9. [midje.ideas.arrows :only [pull-all-arrow-seqs-from]]
  10. [midje.internal-ideas.expect :only [up-to-full-expect-form
  11. tack-on__then__at-rightmost-expect-leaf]])
  12. (:require [clojure.zip :as zip]))
  13. (defn is-head-of-form-providing-prerequisites? [loc]
  14. (matches-symbols-in-semi-sweet-or-sweet-ns? '(provided) loc))
  15. (defn metaconstant-prerequisite? [[lhs arrow rhs & overrides :as fake-body]]
  16. (symbol-named? arrow =contains=>))
  17. (defn prerequisite-to-fake [fake-body]
  18. (let [^Integer line-number (arrow-line-number-from-form fake-body)
  19. fake-tag (if (metaconstant-prerequisite? fake-body)
  20. 'midje.semi-sweet/data-fake
  21. 'midje.semi-sweet/fake)]
  22. (vary-meta
  23. `(~fake-tag ~@fake-body)
  24. assoc :line (Integer. line-number))))
  25. (defn expand-prerequisites-into-fake-calls [provided-loc]
  26. (let [fakes (-> provided-loc zip/up zip/node rest)
  27. fake-bodies (pull-all-arrow-seqs-from fakes)]
  28. (map prerequisite-to-fake fake-bodies)))
  29. (defn delete_prerequisite_form__then__at-previous-full-expect-form [loc]
  30. (assert (is-head-of-form-providing-prerequisites? loc))
  31. (-> loc zip/up zip/remove up-to-full-expect-form))
  32. (defn insert-prerequisites-into-expect-form-as-fakes [loc]
  33. (let [fake-calls (expand-prerequisites-into-fake-calls loc)
  34. full-expect-form (delete_prerequisite_form__then__at-previous-full-expect-form loc)]
  35. (tack-on__then__at-rightmost-expect-leaf fake-calls full-expect-form)))