module Minitest

def self.run args = []

def self.run args = []
  self.load_plugins
  options = process_args args
  reporter = CompositeReporter.new
  reporter << SummaryReporter.new(options[:io], options)
  reporter << ProgressReporter.new(options[:io], options)
  self.reporter = reporter # this makes it available to plugins
  self.init_plugins options
  self.reporter = nil # runnables shouldn't depend on the reporter, ever
  reporter.start
  __run reporter, options
  self.parallel_executor.shutdown
  reporter.report
  reporter.passed?
end