class Minitest::Reporters::DelegateReporter

def all_reporters

def all_reporters
  @all_reporters ||= init_all_reporters
end

def guard_reporter(reporters)

def guard_reporter(reporters)
  guards = Array(reporters.detect { |r| r.class.name == "Guard::Minitest::Reporter" })
  return guards unless ENV['RM_INFO']
  warn 'RM_INFO is set thus guard reporter has been dropped' unless guards.empty?
  []
end

def init_all_reporters

def init_all_reporters
  return @reporters unless defined?(Minitest::Reporters.reporters) && Minitest::Reporters.reporters
  (Minitest::Reporters.reporters + guard_reporter(@reporters)).each do |reporter|
    reporter.io = @options[:io]
    if reporter.respond_to?(:add_defaults)
      reporter.add_defaults(@options.merge(:total_count => total_count(@options)))
    end
  end
end

def initialize(reporters, options = {})

def initialize(reporters, options = {})
  @reporters = reporters
  @options = options
  @all_reporters = nil
end

def io

def io
  all_reporters.first.io unless all_reporters.empty?
  @options[:io]
end

def passed?

def passed?
  all_reporters.all?(&:passed?)
end

def prerecord(klass, name)

def prerecord(klass, name)
  all_reporters.each do |reporter|
    reporter.prerecord klass, name
  end
end

def record(result)

def record(result)
  all_reporters.each do |reporter|
    reporter.record result
  end
end

def report

def report
  all_reporters.each(&:report)
end

def start

def start
  all_reporters.each(&:start)
end

def total_count(options)

stolen from minitest self.run
def total_count(options)
  filter = options[:filter] || '/./'
  filter = Regexp.new $1 if filter =~ /\/(.*)\//
  Minitest::Runnable.runnables.map { |runnable|
    runnable.runnable_methods.find_all { |m|
      filter === m || filter === "#{runnable}##{m}"
    }.size
  }.inject(:+)
end