   @doc """
   Defines a callback to be run before all tests in a case.
 
-  Pass a block or name of a unary function as atom, or list of such
-  atoms.
-
-  Can return values to be merged into the context, to set up state for
+  Accepts a block or the name of a one-arity function in the form of an atom,
+  or a list of such atoms.
+
+  Can return values to be merged into the `context`, to set up the state for
   tests. For more details, see the "Context" section shown above.
 
   ## Examples

  @doc """
  Defines a callback to be run before all tests in a case.

  Pass a block or name of a unary function as atom, or list of such
  atoms.

  Can return values to be merged into the context, to set up state for
  tests. For more details, see the "Context" section shown above.

  ## Examples

      end

  """
  defmacro setup_all(context, block) do
    do_setup_all(context, block)
  end

  defp do_setup_all(context, block) do
    quote bind_quoted: [context: escape(context), block: escape(block)] do
      @ex_unit_describe && raise "cannot invoke setup_all/2 inside describe"
      name = :"__ex_unit_setup_all_#{length(@ex_unit_setup_all)}"
      defp unquote(name)(unquote(context)), unquote(block)
      @ex_unit_setup_all [{name, nil} | @ex_unit_setup_all]
    end
  end
