How to assert some process received some message?

@josevalim maybe something like this could be put into ExUnit?

defmacro assert_process_receive(pid, message, fun) do
  quote do
    :erlang.trace(unquote(pid), true, [:receive])
    unquote(fun).()
    assert_receive({:trace, ^unquote(pid), :receive, message})
  end
end