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)
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)
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