Add support for blanks in assertions

This commit is contained in:
Uku Taht
2016-01-08 16:28:45 +00:00
parent 269647a568
commit 6f5c00d719
2 changed files with 50 additions and 1 deletions

48
lib/blank_assertions.ex Normal file
View File

@@ -0,0 +1,48 @@
defmodule BlankAssertions do
defmacro assert(expr) do
if contains_blank?(expr) do
code = Macro.escape(expr)
quote do
raise ExUnit.AssertionError, expr: unquote(code)
end
else
quote do
ExUnit.Assertions.assert(unquote(expr))
end
end
end
defmacro refute(expr) do
if contains_blank?(expr) do
code = Macro.escape(expr)
quote do
raise ExUnit.AssertionError, expr: unquote(code)
end
else
quote do
ExUnit.Assertions.refute(unquote(expr))
end
end
end
def assert(value, opts) do
ExUnit.Assertions.assert(value, opts)
end
defp contains_blank?(expr) do
{_, blank} = Macro.prewalk(expr, false, &blank?/2)
blank
end
defp blank?(node, true) do
{node, true}
end
defp blank?({expr, _, _} = node, _acc) do
{node, expr == :__}
end
defp blank?(expr, _acc) do
{expr, expr == :__}
end
end

View File

@@ -18,7 +18,8 @@ defmodule Koans do
defmacro __using__(_) do
quote do
import Koans
import ExUnit.Assertions
require ExUnit.Assertions
import BlankAssertions
end
end