Skip to content

Instantly share code, notes, and snippets.

@pingles
Created February 15, 2011 11:36
Show Gist options
  • Save pingles/827425 to your computer and use it in GitHub Desktop.
Save pingles/827425 to your computer and use it in GitHub Desktop.
Trying to dynamically create clojure.test deftests
(ns macrotest
(:require [clojure.contrib.string :as s]
[clojure.pprint :as pp])
(:use clojure.test))
(defn- generate-record-test
[f r {:keys [name actual name_key] :as record} body]
(let [n (gensym (eval (list f record)))]
`(let [~r ~record]
(deftest ~n
~@body))))
(defmacro record-tests
[f rs [r] & body]
`(do ~@(map #(generate-record-test f r % body)
~rs)))
(defn- test-name
[r]
(->> r :name .toLowerCase (s/replace-re #"[^a-z]" "-")))
;; (let [records [{:name "Paul Ingles"
;; :actual 2
;; :expected 3}
;; {:name "Emma"
;; :actual 1
;; :expected 3}]]
;; (record-tests test-name records [r] (is (= (:actual r)
;; (:expected r)))))
(pp/pprint (macroexpand '(record-tests identity rs [r] (= 1 2))))
(clojure.test/run-tests 'macrotest)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment