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)