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) |> elem(0)
end 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({:___, _, _}, [first | remainder]), do: {first, remainder} defp pre({:___, _, _}, [first | remainder]), do: {first, remainder}
defp pre(node, acc), do: {node, acc} 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 def count(ast) do
ast ast
|> Macro.prewalk(0, &count/2) |> 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) assert Blanks.replace(ast, [true, false]) == quote(do: assert true == false)
end 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 test "counts simple blanks" do
ast = quote do: 1 + ___ ast = quote do: 1 + ___

View File

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