From 0b9fc411115e189979b0fa2d2481d12e061c2647 Mon Sep 17 00:00:00 2001 From: Stuart Sierra Date: Sun, 15 Aug 2010 20:52:01 -0400 Subject: [PATCH] Add local variables map to 'expect' --- src/main/clojure/lazytest/expect.clj | 8 ++++++++ src/test/clojure/lazytest/expect_asserts.clj | 8 ++++++++ 2 files changed, 16 insertions(+) diff --git a/src/main/clojure/lazytest/expect.clj b/src/main/clojure/lazytest/expect.clj index 362e1dd..79baedb 100644 --- a/src/main/clojure/lazytest/expect.clj +++ b/src/main/clojure/lazytest/expect.clj @@ -1,6 +1,12 @@ (ns lazytest.expect (:import (lazytest ExpectationFailed))) +(defn- local-bindings + "Returns a map of the names of local bindings to their values." + [env] + (reduce (fn [m sym] (assoc m `'~sym sym)) + {} (keys env))) + (defn- function-call? "True if form is a list representing a normal function call." [form] @@ -33,6 +39,7 @@ (merge '~(meta &form) '~(meta expr) {:form '~expr + :locals ~(local-bindings &env) :evaluated (list* f# args#) :result result# :file ~*file* @@ -45,6 +52,7 @@ (merge '~(meta &form) '~(meta expr) {:form '~expr + :locals ~(local-bindings &env) :result result# :file ~*file* :ns *ns*} diff --git a/src/test/clojure/lazytest/expect_asserts.clj b/src/test/clojure/lazytest/expect_asserts.clj index 1f5053e..ef5d6b0 100644 --- a/src/test/clojure/lazytest/expect_asserts.clj +++ b/src/test/clojure/lazytest/expect_asserts.clj @@ -37,3 +37,11 @@ (assert (= '(instance? java.lang.String 42) (:form reason))) (assert (= (list instance? java.lang.String 42) (:evaluated reason))) (assert (false? (:result reason))))) + +(let [x (+ 3 4)] + (let [e4 (try (expect (zero? (* x 2))) + false + (catch ExpectationFailed err err))] + (assert e4) + (let [reason (.reason e4)] + (assert (= {'x 7} (:locals reason)))))) \ No newline at end of file