lib/test/unit/testsuite.rb in test-unit-2.5.0 vs lib/test/unit/testsuite.rb in test-unit-2.5.1

- old
+ new

@@ -48,11 +48,11 @@ yield(STARTED, name) yield(STARTED_OBJECT, self) run_startup(result) while test = @tests.shift @n_tests += test.size - test.run(result, &progress_block) + run_test(test, result, &progress_block) @passed = false unless test.passed? end run_shutdown(result) ensure @elapsed_time = Time.now - @start_time @@ -105,9 +105,43 @@ 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) + finished_is_yielded = false + finished_object_is_yielded = false + previous_event_name = nil + test.run(result) 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 finished_is_yielded and not finished_object_is_yielded + yield(Test::Unit::TestCase::FINISHED_OBJECT, test) end end def run_shutdown(result) return if @test_case.nil? or !@test_case.respond_to?(:shutdown)