     end
   end
 
-  defp assert_callers(callee, contents_a, contents_b \\ "", expected) do
-    in_fixture "no_mixfile", fn ->
-      File.write!("lib/a.ex", contents_a)
-      File.write!("lib/b.ex", contents_b)
+  defp assert_callers(callee, files, expected) do
+    in_fixture "no_mixfile", fn ->
+      for {file, contents} <- files do
+        File.write!(file, contents)
+      end
 
       output =
         capture_io(fn ->

  ## Callers

  test "callers: prints callers of specified Module" do
    code = """
    defmodule A do
      def a, do: A.a()
      def a(arg), do: A.a(arg)
      def b, do: A.b()
      def c, do: B.a()
    end
    """

    output = """
    lib/a.ex:2: A.a/0

    lib/a.ex:4: A.b/0
    """

    assert_callers("A", files, output)
  end

  test "callers: prints callers of specified Module.func" do
    files = %{
      "lib/a.ex" => """
      defmodule A do
        def a, do: A.a()
        def a(arg), do: A.a(arg)
        def b, do: A.b()
        def c, do: B.a()
      end
      """
    }

    output = """
    lib/a.ex:2: A.a/0
    lib/a.ex:3: A.a/1
    """

    assert_callers("A.a", files, output)
  end

  test "callers: prints callers of specified Module.func/arity" do
    files = %{
      "lib/a.ex" => """
      defmodule A do
        def a, do: A.a()
        def a(arg), do: A.a(arg)
        def b, do: A.b()
        def c, do: B.a()
      end
      """
    }

    output = """
    lib/a.ex:2: A.a/0
    """

    assert_callers("A.a/0", files, output)
  end

  test "callers: lists compile calls and macros" do
    files = %{
      "lib/a.ex" => """
      defmodule A do
        defmacro a_macro, do: :ok
        def a, do: :ok
      end
      """,
      "lib/b.ex" => """
      defmodule B do
        require A

        A.a_macro()
        A.a()
      end
      """
    }

    output = """
    lib/b.ex:5: A.a/0
    lib/b.ex:4: A.a_macro/0
    """

    assert_callers("A", files, output)
  end

  test "callers: handles aliases" do
    files = %{
      "lib/a.ex" => """
      defmodule A do
        alias Enum, as: E

        E.map([], &E.flatten/1)

        def a(a, b), do: E.map(a, b)
      end
      """
    }

    output = """
    lib/a.ex:4: Enum.flatten/1
