is is looking for specific patterns and, if it can't find a known one, defaults 
to assuming its argument is a random predicate and prints that.

So what's happening here is the syntax quote expands (resolves) = to 
clojure.core/= and thus it doesn't match the pattern for = anymore.

So you'd need for = to not be expanded and stay as exactly the = symbol after 
macroexpansion. There are various ways to achieve that, but I can't think of a 
generic, elegant one. In the trivial example you posted you can just replace = 
with ~'=, I think, though that might not be so easy on more complex macros.

You can also take a look at the assert-expr and report multimethods in 
clojure.test.

> On 9 Oct 2017, at 22:32, Timothy Baldridge <tbaldri...@gmail.com> wrote:
> 
> The problem isn't the macro, it's your use of syntax quoting. `(= x y) gets 
> expanded at read-time into `(clojure.core/= x y)`. Not much you can do about 
> that. Although I'd suggest perhaps changing your code a bit to not require 
> macros. 
> 
> deftest mostly just creates a defn with some extra metadata and the like. One 
> option would be to use a dynamic var to setup your config information. Or 
> better yet have the test itself read the config data the way your normal app 
> would. This not only exercises the same config codepaths, but it also keeps 
> the code quite functional. 
> 
>> On Mon, Oct 9, 2017 at 2:40 PM, Matt Grimm <matt.t.gr...@gmail.com> wrote:
>> Hello,
>> 
>> I'm generating deftest's using a helper macro that takes a variety of test 
>> parameters and though the tests function correctly, the output of a failed 
>> test is not exactly right. The expect value is shown as the un-evaluated 
>> test form, and the actual value is shown as the result of evaluating the 
>> test form. I realize 'is' is a macro itself, but I'm not quite sure how to 
>> expand or escape the guts of my macro to make the output match that of a 
>> normal test.
>> 
>> Whereas a normal test failure looks like this (some output elided):
>> 
>> user=> (deftest normal-test
>>   #_=>   (is (= [0 1 5] (range 3))))
>> #'user/normal-test
>> user=> (run-tests)
>> 
>> FAIL in (normal-test)
>> 
>> expected: [0 1 5]
>>   actual: ((0 1 2))
>> 
>> A failure for a deftest defined within a macro comes out like this:
>> 
>> user=> (defmacro defnesttest [v]
>>   #_=>   `(deftest nested-test
>>   #_=>      (is (= [0 1 5] ~v))))
>> #'user/defnesttest
>> user=> (defnesttest (range 3))
>> #'user/nested-test
>> user=> (run-tests)
>> 
>> FAIL in (nested-test)
>> 
>> expected: (clojure.core/= [0 1 5] (range 3))
>>   actual: false
>> 
>> Thanks for any insight,
>> m.
>> -- 
>> You received this message because you are subscribed to the Google
>> Groups "Clojure" group.
>> To post to this group, send email to clojure@googlegroups.com
>> Note that posts from new members are moderated - please be patient with your 
>> first post.
>> To unsubscribe from this group, send email to
>> clojure+unsubscr...@googlegroups.com
>> For more options, visit this group at
>> http://groups.google.com/group/clojure?hl=en
>> --- 
>> You received this message because you are subscribed to the Google Groups 
>> "Clojure" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to clojure+unsubscr...@googlegroups.com.
>> For more options, visit https://groups.google.com/d/optout.
> 
> 
> 
> -- 
> “One of the main causes of the fall of the Roman Empire was that–lacking 
> zero–they had no way to indicate successful termination of their C programs.”
> (Robert Firth)
> -- 
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To post to this group, send email to clojure@googlegroups.com
> Note that posts from new members are moderated - please be patient with your 
> first post.
> To unsubscribe from this group, send email to
> clojure+unsubscr...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/clojure?hl=en
> --- 
> You received this message because you are subscribed to the Google Groups 
> "Clojure" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to clojure+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to