         # ...
       end
 
+  ### Handlers
+
+  You can define "global" on-exit handlers in `setup_all/1` callbacks:
+
+      setup_all do
+        Database.create_table_for(__MODULE__)
+
+        on_exit(fn ->
+          Database.drop_table_for(__MODULE__)
+        end)
+
+        :ok
+      end
+
+  The handler in the example above will be executed only once, after
+  running all tests in the module.
   """
   defmacro setup_all(block) do
     if Keyword.keyword?(block) do

  end

  @doc """
  Defines a callback that runs once the test exits.

  `callback` is a function that receives no arguments and
  runs in a separate process than the caller.

  `on_exit/2` is usually called from `setup` and `setup_all`
  callbacks, often to undo the action performed during the setup.
  However, `on_exit/2` may also be called dynamically, where a
  reference can be used to guarantee the callback will be invoked
  only once.

  `on_exit/2` gets executed in a blocking fashion after a test
  exits and **before** running the next test. This means that no
  other test from the same test case will be running while the
  `on_exit/2` callback for a previous test is running.

  `on_exit/2` is executed in a different process than the test
  process.

  ## Examples


  `setup_all/1` callbacks are executed in a separate process than tests.
  All `setup_all/1` callbacks are executed in order in the same process.

  ## On-Exit Handlers

  On-exit handlers that you register inside `setup_all/1` callbacks
  are executed at once after all tests in the module have been run.
  They are all executed *in the same process*, which is a separate
  process dedicated to running these handlers. These handlers are
  executed in the reverse order of their respective `setup_all/1`
  callbacks.

  ## Examples

      # One-arity function name
