gen_reset.ex 835 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. defmodule GenReset do
  2. @moduledoc """
  3. Documentation for GenServerReset.
  4. GenServerReset allows GenServers to be reset during testing.
  5. """
  6. defmacro __using__(_args) do
  7. quote do
  8. def handle_info(:"$gen_reset", state) do
  9. case init(:erlang.get(:"$gen_reset_initial_args")) do
  10. {:ok, state} ->
  11. {:noreply, state}
  12. {:ok, state, continue} ->
  13. {:noreply, state, continue}
  14. end
  15. end
  16. def register_gen_reset(args) do
  17. :erlang.put(:"$gen_reset_initial_args", args)
  18. end
  19. end
  20. end
  21. end
  22. defmodule Server do
  23. use GenServer
  24. use GenReset
  25. def init(args) do
  26. register_gen_reset(args)
  27. {:ok, args}
  28. end
  29. def handle_call(:state, _from, state), do: {:reply, state, state}
  30. def handle_cast({:set, value}, _state), do: {:noreply, value}
  31. end