Merge pull request #14 from heruku/blanks
Add support for blanks in assertions
This commit is contained in:
48
lib/blank_assertions.ex
Normal file
48
lib/blank_assertions.ex
Normal 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
|
||||||
@@ -18,7 +18,8 @@ defmodule Koans do
|
|||||||
defmacro __using__(_) do
|
defmacro __using__(_) do
|
||||||
quote do
|
quote do
|
||||||
import Koans
|
import Koans
|
||||||
import ExUnit.Assertions
|
require ExUnit.Assertions
|
||||||
|
import BlankAssertions
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user