class Turn::IsoRunner


log results to a file.
The IsoRunner proiveds some variery in ouput formats and can also
each test in isolation (solo testing) or in pairs (cross testing).
in isolated processes. It can do this either by running
Iso Runner provides means from running unit test
= IsoRunner

def initialize

def initialize
  @config = Turn.config
  @reporter = @config.reporter
  #yield(self) if block_given?
  @loadpath = @config.loadpath
  @requires = @config.requires
  @live     = @config.live?
  @minitest = @config.framework == :minitest
end

def log_report(report)

NOT USED YET.
def log_report(report)
  if log #&& !dryrun?
    #logfile = File.join('log', apply_naming_policy('testlog', 'txt'))
    FileUtils.mkdir_p('log')
    logfile = File.join('log', 'testlog.txt')
    File.open(logfile, 'a') do |f|
      f << "= #{self.class} Test @ #{Time.now}\n"
      f << report
      f << "\n"
    end
  end
end

def start


This is used by #test_solo and #test_cross.
Runs the list of test calls passed to it.
def start
  suite = TestSuite.new
  testruns = @config.files.collect do |file|
    name = file.sub(Dir.pwd+'/','')
    suite.new_case(name, file)
  end
  test_loop_runner(suite)
end

def test_loop_runner(suite)

runs.
manifest mode, to gather results from isolated
The IsoRunner actually shells out to turn in
def test_loop_runner(suite)
  reporter.start_suite(suite)
  recase = []
  suite.each_with_index do |kase, index|
    reporter.start_case(kase)
    turn_path = File.expand_path(File.dirname(__FILE__) + '/../bin.rb')
    files = kase.files.map{ |f| f.sub(Dir.pwd+'/', '') }
    # FRACKING GENIUS RIGHT HERE !!!!!!!!!!!!
    cmd = []
    cmd << "ruby"
    cmd << "-I#{@loadpath.join(':')}" unless @loadpath.empty?
    cmd << "-r#{@requires.join(':')}" unless @requires.empty?
    cmd << "--"
    cmd << turn_path
    cmd << "--marshal"
    cmd << %[--loadpath="#{@loadpath.join(':')}"] unless @loadpath.empty?
    cmd << %[--requires="#{@requires.join(':')}"] unless @requires.empty?
    cmd << "--live" if @live
    cmd << "--minitest" if @minitest
    cmd << files.join(' ')
    cmd = cmd.join(' ')
    #out = `#{cmd}`
    #err = ''
    out, err = nil, nil
md
    Open3.popen3(cmd) do |stdin, stdout, stderr|
      stdin.close
      out = stdout.read.chomp
      err = stderr.read.chomp
    end
    # TODO: how to report? will need to add something to reporter
    # b/c it may have redirected stdout. Or use STDOUT?
    #if !err.empty?
    #  puts err
    #  raise
    #end
    files = kase.files
    # remove any unexpected output injected at the beginning
    b = out.index(/^---/m)
    yaml = out[b..-1]
    sub_suite = YAML.load(yaml)
    # TODO: How to handle pairs?
    #name  = kase.name
    kases = sub_suite.cases
    suite.cases[index] = kases
    kases.each do |kase|
      kase.files = files
      #reporter.start_case(kase)
      kase.tests.each do |test|
        reporter.start_test(test)
        if test.error?
          #reporter.error(test.message)
          reporter.error(test.raised)
        elsif test.fail?
          #reporter.fail(test.message)
          reporter.error(test.raised)
        else
          reporter.pass
        end
        reporter.finish_test(test)
      end
      reporter.finish_case(kase)
    end
  end
  suite.cases.flatten!
  reporter.finish_suite(suite)
  # shutdown auto runner
  if @minitest
  else
    ::Test::Unit.run=true rescue nil
  end
  suite
end