class Grntest::TestSuitesRunner

Public Class Methods

new(tester) click to toggle source
# File lib/grntest/test-suites-runner.rb, line 83
def initialize(tester)
  @tester = tester
  @reporter = create_reporter
  @result = TestSuitesResult.new
end

Public Instance Methods

run(test_suites) click to toggle source
# File lib/grntest/test-suites-runner.rb, line 89
def run(test_suites)
  succeeded = true

  @result.measure do
    succeeded = run_test_suites(test_suites)
  end
  @reporter.on_finish(@result)

  succeeded
end

Private Instance Methods

create_reporter() click to toggle source
# File lib/grntest/test-suites-runner.rb, line 143
def create_reporter
  Reporters.create_reporter(@tester)
end
run_test_suites(test_suites) click to toggle source
# File lib/grntest/test-suites-runner.rb, line 101
def run_test_suites(test_suites)
  queue = Queue.new
  test_suites.each do |suite_name, test_script_paths|
    next unless @tester.target_test_suite?(suite_name)
    test_script_paths.each do |test_script_path|
      test_name = test_script_path.basename(".*").to_s
      next unless @tester.target_test?(test_name)
      queue << [suite_name, test_script_path, test_name]
      @result.n_total_tests += 1
    end
  end
  @tester.n_workers.times do
    queue << nil
  end

  workers = []
  @tester.n_workers.times do |i|
    workers << Worker.new(i, @tester, @result, @reporter)
  end
  @result.workers = workers
  @reporter.on_start(@result)

  succeeded = true
  worker_threads = []
  @tester.n_workers.times do |i|
    worker = workers[i]
    worker_threads << Thread.new do
      succeeded = false unless worker.run(queue)
    end
  end

  begin
    worker_threads.each(&:join)
  rescue Interrupt
    workers.each do |worker|
      worker.interrupt
    end
  end

  succeeded
end