Merge pull request #93 from iamvery/assert-receive-does-not-work

Problem with assert_receive in koans
This commit is contained in:
Uku Taht
2016-05-04 09:48:55 +01:00
3 changed files with 26 additions and 1 deletions

View File

@@ -7,10 +7,25 @@ defmodule Blanks do
|> elem(0)
end
defp pre({:assert_receive, _, args} = node, replacements) do
{args, replacements} = Macro.prewalk(args, replacements, &pre_pin/2)
{put_elem(node, 2, args), replacements}
end
defp pre(:___, [first | remainder]), do: {first, remainder}
defp pre({:___, _, _}, [first | remainder]), do: {first, remainder}
defp pre(node, acc), do: {node, acc}
defp pre_pin(:___, [first | remainder]), do: {pin(first), remainder}
defp pre_pin({:___, _, _}, [first | remainder]), do: {pin(first), remainder}
defp pre_pin(node, acc), do: {node, acc}
defp pin(var) when is_tuple(var) do
quote do
^unquote(var)
end
end
defp pin(var), do: var
def count(ast) do
ast
|> Macro.prewalk(0, &count/2)

View File

@@ -24,6 +24,16 @@ defmodule BlanksTest do
assert Blanks.replace(ast, [true, false]) == quote(do: assert true == false)
end
test "pins variables in assert_receive replacement" do
ast = quote do: assert_receive ___
assert Blanks.replace(ast, Macro.var(:answer, __MODULE__)) == quote(do: assert_receive ^answer)
end
test "does not pin values in assert_receive replacement" do
ast = quote do: assert_receive ___
assert Blanks.replace(ast, :lolwat) == quote(do: assert_receive :lolwat)
end
test "counts simple blanks" do
ast = quote do: 1 + ___

View File

@@ -9,7 +9,7 @@ defmodule ProcessesTests do
true,
"hola!",
:how_are_you?,
{:waited_too_long, "I am inpatient"},
{:waited_too_long, "I am impatient"},
false,
{:multiple, [true, false]},
{:exited, :random_reason},