class Test::Unit::TestSuiteRunner
def handle_exception(exception, result)
def handle_exception(exception, result) case exception when *ErrorHandler::PASS_THROUGH_EXCEPTIONS false else result.add_error(Error.new(@test_suite.test_case.name, exception)) true end end
def initialize(test_suite)
def initialize(test_suite) @test_suite = test_suite end
def n_workers
def n_workers @n_workers end
def n_workers=(n)
def n_workers=(n) @n_workers = n end
def run(result, run_context: nil, &progress_block)
def run(result, run_context: nil, &progress_block) yield(TestSuite::STARTED, @test_suite.name) yield(TestSuite::STARTED_OBJECT, @test_suite) run_startup(result) run_tests(result, run_context: run_context, &progress_block) ensure begin run_shutdown(result) ensure yield(TestSuite::FINISHED, @test_suite.name) yield(TestSuite::FINISHED_OBJECT, @test_suite) end end
def run_all_tests
def run_all_tests yield(TestRunContext.new(self)) end
def run_shutdown(result)
def run_shutdown(result) test_case = @test_suite.test_case return if test_case.nil? or !test_case.respond_to?(:shutdown) begin test_case.shutdown rescue Exception raise unless handle_exception($!, result) end end
def run_startup(result)
def run_startup(result) test_case = @test_suite.test_case return if test_case.nil? or !test_case.respond_to?(:startup) begin test_case.startup rescue Exception raise unless handle_exception($!, result) end end
def run_test(test, result, run_context: nil)
def run_test(test, result, run_context: nil) finished_is_yielded = false finished_object_is_yielded = false previous_event_name = nil event_listener = lambda do |event_name, *args| case previous_event_name when Test::Unit::TestCase::STARTED if event_name != Test::Unit::TestCase::STARTED_OBJECT yield(Test::Unit::TestCase::STARTED_OBJECT, test) end when Test::Unit::TestCase::FINISHED if event_name != Test::Unit::TestCase::FINISHED_OBJECT yield(Test::Unit::TestCase::FINISHED_OBJECT, test) end finished_object_is_yielded = true end case event_name when Test::Unit::TestCase::STARTED finished_is_yielded = false finished_object_is_yielded = false when Test::Unit::TestCase::FINISHED finished_is_yielded = true end previous_event_name = event_name yield(event_name, *args) end if test.method(:run).arity == -2 test.run(result, run_context: run_context, &event_listener) else # For backward compatibility. There are scripts that overrides # Test::Unit::TestCase#run without keyword arguments. test.run(result, &event_listener) end if finished_is_yielded and not finished_object_is_yielded yield(Test::Unit::TestCase::FINISHED_OBJECT, test) end end
def run_tests(result, run_context: nil, &progress_block)
def run_tests(result, run_context: nil, &progress_block) @test_suite.tests.each do |test| run_test(test, result, run_context: run_context, &progress_block) end end