diff --git a/lib/blanks.ex b/lib/blanks.ex index 3ce4569..8838652 100644 --- a/lib/blanks.ex +++ b/lib/blanks.ex @@ -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) diff --git a/test/blanks_test.exs b/test/blanks_test.exs index 4449a93..e615f17 100644 --- a/test/blanks_test.exs +++ b/test/blanks_test.exs @@ -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 + ___ diff --git a/test/koans/processes_koans_test.exs b/test/koans/processes_koans_test.exs index 4149d52..d17ec9a 100644 --- a/test/koans/processes_koans_test.exs +++ b/test/koans/processes_koans_test.exs @@ -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},