class DohTest::GroupRunner

Public Class Methods

new(group_class, output, config = nil) click to toggle source
# File lib/dohtest/group_runner.rb, line 7
def initialize(group_class, output, config = nil)
  @group_class,@output = group_class,output
  @config = config || DohTest.config
  @group_name = @group_class.to_s
  @before_all_failed = false
  @error_count = @tests_ran = @tests_skipped = @assertions_failed = @assertions_passed = 0
  @test_name = 'no_test_name_set_yet'
  @max_errors = 0
  @max_failures = 0
  @has_brink = false
end

Public Instance Methods

assertion_passed() click to toggle source
# File lib/dohtest/group_runner.rb, line 177
def assertion_passed
  @assertions_passed += 1
  @output.assertion_passed(@group_name, @test_name)
end
caught_error(error, test_name = nil) click to toggle source
# File lib/dohtest/group_runner.rb, line 182
def caught_error(error, test_name = nil)
  @error_count += 1
  @output.test_error(@group_name, test_name || @test_name, error, @config[:dynamic_seed])
end
create_group() click to toggle source
# File lib/dohtest/group_runner.rb, line 30
def create_group
  @group = @group_class.new
rescue => error
  caught_error(error, 'initialize')
  false
else
  @group.runner = self
  true
end
determine_test_methods() click to toggle source
# File lib/dohtest/group_runner.rb, line 168
def determine_test_methods
  @test_methods = @group_class.public_instance_methods.grep(/^test/)
  return unless @config.key?(:grep)
  original_test_count = @test_methods.size
  grep_filter = Regexp.new(@config[:grep])
  @test_methods.select! { |method| method.to_s =~ grep_filter }
  @tests_skipped = original_test_count - @test_methods.size
end
find_after_each_method() click to toggle source
# File lib/dohtest/group_runner.rb, line 79
def find_after_each_method
  has_after_each = @group.respond_to?(:after_each)
  has_teardown = @group.respond_to?(:teardown)
  if has_after_each && has_teardown
    raise ":after_each and :teardown both defined; please pick one"
  elsif has_after_each
    @after_each_method = :after_each
  elsif has_teardown
    @after_each_method = :teardown
  else
    @after_each_method = nil
  end
end
find_before_each_method() click to toggle source
# File lib/dohtest/group_runner.rb, line 65
def find_before_each_method
  has_before_each = @group.respond_to?(:before_each)
  has_setup = @group.respond_to?(:setup)
  if has_before_each && has_setup
    raise ":before_each and :setup both defined; please pick one"
  elsif has_before_each
    @before_each_method = :before_each
  elsif has_setup
    @before_each_method = :setup
  else
    @before_each_method = nil
  end
end
generate_new_seed() click to toggle source
# File lib/dohtest/group_runner.rb, line 139
def generate_new_seed
  if @config[:dynamic_seed]
    @config[:dynamic_seed] = rand(100000000000)
    srand(@config[:dynamic_seed])
  else
    @config[:dynamic_seed] = @config[:seed]
  end
end
past_brink?() click to toggle source
# File lib/dohtest/group_runner.rb, line 134
def past_brink?
  ((@max_errors > 0) && (@error_count >= @max_errors)) ||
  ((@max_failures > 0) && (@assertions_failed >= @max_failures))
end
run() click to toggle source
# File lib/dohtest/group_runner.rb, line 19
def run
  @output.group_begin(@group_name)
  if create_group
    run_before_all
    run_tests unless @before_all_failed
    run_after_all
  end
  @output.group_end(@group_name, @tests_ran, @tests_skipped, @assertions_passed, @assertions_failed)
  past_brink?
end
run_after_all() click to toggle source
# File lib/dohtest/group_runner.rb, line 53
def run_after_all
  @group.after_all if @group.respond_to?(:after_all)
  @config[:post_group_callback].each do |callback|
    if (!callback.call(total_problems))
      @error_count += 1
      @output.callback_failed(callback.inspect)
    end
  end
rescue => error
  caught_error(error, 'after_all')
end
run_after_each() click to toggle source
# File lib/dohtest/group_runner.rb, line 106
def run_after_each
  @group.send(@after_each_method) if @after_each_method
  @config[:post_each_callback].each do |callback|
    if !callback.call
      @error_count += 1
      @output.callback_failed(callback.inspect)
    end
  end
rescue => error
  caught_error(error)
end
run_before_all() click to toggle source
# File lib/dohtest/group_runner.rb, line 40
def run_before_all
  @group.before_all if @group.respond_to?(:before_all)
  @config[:pre_group_callback].each do |callback|
    if (!callback.call(@group))
      @error_count += 1
      @output.callback_failed(callback.inspect)
    end
  end
rescue => error
  @before_all_failed = true
  caught_error(error, 'before_all')
end
run_before_each() click to toggle source
# File lib/dohtest/group_runner.rb, line 93
def run_before_each
  @config[:pre_each_callback].each do |callback|
    if !callback.call
      @error_count += 1
      @output.callback_failed(callback.inspect)
    end
  end
  @group.send(@before_each_method) if @before_each_method
rescue => error
  @before_each_failed = true
  caught_error(error)
end
run_test_method() click to toggle source
# File lib/dohtest/group_runner.rb, line 118
def run_test_method
  @group.send(@test_name)
rescue DohTest::Failure => failure
  @assertions_failed += 1
  @output.assertion_failed(@group_name, @test_name, failure, @config[:dynamic_seed])
rescue => error
  caught_error(error)
end
run_tests() click to toggle source
# File lib/dohtest/group_runner.rb, line 148
def run_tests
  determine_test_methods
  find_before_each_method
  find_after_each_method
  setup_brink

  @test_methods.each do |method_name|
    break if @has_brink && past_brink?
    generate_new_seed
    @test_name = method_name
    @before_each_failed = false
    @output.test_begin(@group_name, @test_name)
    run_before_each
    run_test_method unless @before_each_failed
    run_after_each
    @tests_ran += 1
    @output.test_end(@group_name, @test_name)
  end
end
setup_brink() click to toggle source
# File lib/dohtest/group_runner.rb, line 127
def setup_brink
  @max_errors = @config[:max_errors].to_i
  @max_failures = @config[:max_failures].to_i

  @has_brink = (@max_errors > 0) || (@max_failures > 0)
end
total_problems() click to toggle source
# File lib/dohtest/group_runner.rb, line 187
def total_problems
  @error_count + @assertions_failed
end