class Tryouts::CLI::Run

def run

Executes all tryouts that can be found from the current working directory.
$ sergeant run [path/2/tryouts]
def run
  start = Time.now
  
  Tryouts.enable_debug if Drydock.debug?
  Tryouts.verbose = @global.quiet ? -1 : @global.verbose
  if Tryouts.verbose > 0
    print "Tryouts #{Tryouts::VERSION} -- "
    print "#{Tryouts.sysinfo.to_s} (#{RUBY_VERSION}) -- "
    puts "#{start.strftime("%Y-%m-%d %H:%M:%S")}"
  end
  
  load_available_tryouts_files
  
  passed, failed = 0, 0
  Tryouts.instances.each_pair do |group,tryouts_inst|
    puts '', ' %-80s'.att(:reverse) % group  unless Tryouts.verbose < 0
    puts "  #{tryouts_inst.paths.join("\n  ")}" if Tryouts.verbose > 0
    tryouts_inst.tryouts.each_pair do |name,to|
      begin
        to.run
        to.report
      rescue SyntaxError, LoadError, Exception, TypeError,
             RuntimeError, NoMethodError, NameError => ex
        tryouts_inst.errors << ex
      end
      STDOUT.flush
      passed += to.passed
      failed += to.failed
    end
    
    unless tryouts_inst.errors.empty?
      title = '%-79s' % " RUNTIME ERRORS !?"
      puts $/, ' ' << title.color(:red).att(:reverse).bright
      tryouts_inst.errors.each do |ex|
        trace = Tryouts.verbose > 1 ? ex.backtrace : [ex.backtrace.first]
        puts '%14s: %s' % [ex.class, ex.message.to_s.split($/).join($/ + ' '*16)]
        puts
        puts '%14s  %s' % ["", trace.join($/ + ' '*16)]
        puts 
      end
    end
  end
  
  if Tryouts.verbose < 0
    if (passed == 0 && failed == 0)
      exit -1
    elsif failed == 0 && !Tryouts.failed?
      puts "PASS"
      exit 0
    else
      puts "FAIL"
      exit 1
    end
  else
    if Tryouts.verbose > 0
      elapsed = Time.now - start
      puts $/, "  Elapsed: %.3f seconds" % elapsed.to_f #if elapsed > 0.01
    end
    if (passed == 0 && failed == 0)
      puts DEV if Tryouts.verbose > 4
      msg = " You didn't even try to acheive your dreams :[ "
      puts $/, msg.att(:reverse)
      exit -1
    elsif failed == 0 && !Tryouts.failed?
      puts PUG if Tryouts.verbose > 4
      msg = passed > 1 ? "All %s dreams" : "Your only dream"
      msg = (" #{msg} came true " % [passed+failed]).color(:green)
      puts $/, msg.att(:reverse)
      exit 0
    else
      puts BUG if Tryouts.verbose > 4
      score = (passed.to_f / (passed.to_f+failed.to_f)) * 100
      msg = " %s of %s dreams came true (%d%%) ".color(:red)
      msg = msg % [passed, passed+failed, score.to_i]
      puts $/, msg.att(:reverse)
      exit 1
    end
    
  end
end