gen_reset.ex 872 B

123456789101112131415161718192021222324252627282930313233343536373839
  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. GenReset.Tracker.add(self())
  18. :erlang.put(:"$gen_reset_initial_args", args)
  19. end
  20. end
  21. end
  22. end
  23. defmodule Server do
  24. use GenServer
  25. use GenReset
  26. def init(args) do
  27. register_gen_reset(args)
  28. {:ok, args}
  29. end
  30. def handle_call(:state, _from, state), do: {:reply, state, state}
  31. def handle_cast({:set, value}, _state), do: {:noreply, value}
  32. end