         callback report
       return
     
-    before_alls_callback = (runner_reports) =>
-      before_alls = []
+    # Called after @_run_runners is finished iterating through befores.
+    # Note that these are both `before_alls` and `before_eachs`
+    befores_callback = (runner_reports) =>
+      # Since we just ran before_alls, empty it if we need to.
+      if before_alls.length > 0
+        before_alls = []
       item.run test_callback
     
+    # Called when our test is done.
     test_callback = (test_report) =>
       # We're just faking the report for now.
       report.total_tests += 1
       @_run_runners after_eachs, after_eachs_callback
     
+    # Called after `@_run_runners` is finished iterating through `after_eachs`
     after_eachs_callback = (runner_reports) =>
       @_run callback, before_alls, before_eachs, after_eachs, ++index, report
     
+    # Called when item is a suite, and `item._run` has finished.
     suite_callback = (suite_report) =>
       if suite_report.total_tests > 0
         before_alls = []

    # A list of suites and test runners.
    @_tests_and_suites = []
  
  # (callback) -> undefined
  _run: (callback,
      before_alls=[], before_eachs=[], after_eachs=[], index=0,
      report={
        total_tests: 0
        }) =>
    
    if index is 0
      before_alls.push @_before_alls...
      before_eachs.push @_before_eachs...
      after_eachs[...0] = @_after_eachs
    
    item = @_tests_and_suites[index]
    
    if not item?
      if report.total_tests > 0
        @_run_runners @_after_alls, ->
          callback report

      @_run callback, before_alls, before_eachs, after_eachs, ++index, report
    
    if item instanceof Test
      befores = []
      befores.push before_alls...
      befores.push before_eachs...
      @_run_runners befores, befores_callback
    else
      item._run suite_callback, before_alls[..],
        before_eachs[..], after_eachs[..]
  
  # (runners, callback, index=0, reports=[]) -> undefined
  #
  # Params:
  #   runners: A list of runners to iterate over and execute.
  #   callback: The callback
  #   index: Optional. The recursive index.
  #   reports: Optional. The reports from each runner.
  #
  # Desc:
  #   An internal function to run a list of runners, and callback when
  #   complete.
  _run_runners: (runners, callback, index=0, reports=[]) =>
    runner = runners[index]
    # If the item is null, callback with our collective reports.
    if not runner?
      callback reports
      return
    
    # Run the runner!
    runner.run (report) =>
      reports.push report
      @_run_runners runners, callback, ++index, reports
