atpsoft/dohtest

View on GitHub
lib/dohtest/master_runner.rb

Summary

Maintainability
A
25 mins
Test Coverage
require 'dohtest/group_runner'
require 'dohtest/load_test_files'

module DohTest

class MasterRunner
  def initialize(output, config)
    @output = output
    @config = config
  end

  def run
    start_time = Time.now
    srand(@config[:seed])
    @output.run_begin(@config)

    if @config[:test_files].empty?
      @output.no_tests_found
      return 1
    end

    DohTest.load_test_files(@config[:test_files])

    @config[:pre_test_callback].each do |callback|
      callback.call(@output)
    end

    total_problems = 0
    # sort them to be the same order no matter what (different machines were returning different results)
    TestGroup.descendants.sort{|a,b|a.to_s<=>b.to_s}.shuffle.each do |group_class|
      runner = GroupRunner.new(group_class, @output, @config)
      brink_hit = runner.run
      total_problems += runner.total_problems
      break if brink_hit
    end
    @config[:post_all_callback].each do |proc|
      if !proc.call(total_problems)
        @output.callback_failed(proc.inspect)
      end
    end
    @output.run_end(Time.now - start_time)
  end
end

end