Class: Test::Unit::TestSuite
Relationships & Source Files | |
Inherits: | Object |
Defined in: | lib/test/unit/testsuite.rb |
Overview
A collection of tests which can be #run.
Note: It is easy to confuse a TestSuite
instance with something that has a static suite method; I know because I have trouble keeping them straight. Think of something that has a suite method as simply providing a way to get a meaningful TestSuite
instance.
Constant Summary
-
FINISHED =
# File 'lib/test/unit/testsuite.rb', line 29name + "::FINISHED"
-
FINISHED_OBJECT =
# File 'lib/test/unit/testsuite.rb', line 30name + "::FINISHED::OBJECT"
-
STARTED =
# File 'lib/test/unit/testsuite.rb', line 27name + "::STARTED"
-
STARTED_OBJECT =
# File 'lib/test/unit/testsuite.rb', line 28name + "::STARTED::OBJECT"
Class Method Summary
-
.new(name = "Unnamed TestSuite", test_case = nil) ⇒ TestSuite
constructor
Creates a new
TestSuite
with the given name.
Instance Attribute Summary
-
#priority
rw
::Test suite that has higher priority is ran prior to test suites that have lower priority.
- #elapsed_time readonly
- #empty? ⇒ Boolean readonly
- #name readonly
- #passed? ⇒ Boolean readonly
- #start_time readonly
- #test_case readonly
- #tests readonly
Instance Method Summary
-
#<<(test)
Adds the test to the suite.
-
#==(other)
It's handy to be able to compare
TestSuite
instances. - #delete(test)
- #delete_tests(tests)
-
#run(result, &progress_block)
Runs the tests and/or suites contained in this
TestSuite
. -
#size
Retuns the rolled up number of tests in this suite; i.e.
-
#to_s
Overridden to return the name given the suite at creation.
- #handle_exception(exception, result) private
- #run_shutdown(result) private
- #run_startup(result) private
- #run_test(test, result) private
Constructor Details
.new(name = "Unnamed TestSuite", test_case = nil) ⇒ TestSuite
Creates a new TestSuite
with the given name.
Instance Attribute Details
#elapsed_time (readonly)
[ GitHub ]# File 'lib/test/unit/testsuite.rb', line 21
attr_reader :name, :tests, :test_case, :start_time, :elapsed_time
#empty? ⇒ Boolean
(readonly)
[ GitHub ]
# File 'lib/test/unit/testsuite.rb', line 89
def empty? size.zero? end
#name (readonly)
[ GitHub ]# File 'lib/test/unit/testsuite.rb', line 21
attr_reader :name, :tests, :test_case, :start_time, :elapsed_time
#passed? ⇒ Boolean
(readonly)
[ GitHub ]
# File 'lib/test/unit/testsuite.rb', line 106
def passed? @passed end
#priority (rw)
::Test suite that has higher priority is ran prior to test suites that have lower priority.
# File 'lib/test/unit/testsuite.rb', line 25
attr_accessor :priority
#start_time (readonly)
[ GitHub ]# File 'lib/test/unit/testsuite.rb', line 21
attr_reader :name, :tests, :test_case, :start_time, :elapsed_time
#test_case (readonly)
[ GitHub ]# File 'lib/test/unit/testsuite.rb', line 21
attr_reader :name, :tests, :test_case, :start_time, :elapsed_time
#tests (readonly)
[ GitHub ]# File 'lib/test/unit/testsuite.rb', line 21
attr_reader :name, :tests, :test_case, :start_time, :elapsed_time
Instance Method Details
#<<(test)
Adds the test to the suite.
# File 'lib/test/unit/testsuite.rb', line 67
def <<(test) @tests << test self end
#==(other)
It's handy to be able to compare TestSuite
instances.
#delete(test)
[ GitHub ]# File 'lib/test/unit/testsuite.rb', line 72
def delete(test) @tests.delete(test) end
#delete_tests(tests)
[ GitHub ]#handle_exception(exception, result) (private)
[ GitHub ]# File 'lib/test/unit/testsuite.rb', line 163
def handle_exception(exception, result) case exception when *ErrorHandler::PASS_THROUGH_EXCEPTIONS false else result.add_error(Error.new(@test_case.name, exception)) @passed = false true end end
#run(result, &progress_block)
Runs the tests and/or suites contained in this TestSuite
.
# File 'lib/test/unit/testsuite.rb', line 46
def run(result, &progress_block) @start_time = Time.now yield(STARTED, name) yield(STARTED_OBJECT, self) run_startup(result) while test = @tests.shift @n_tests += test.size run_test(test, result, &progress_block) @passed = false unless test.passed? end ensure begin run_shutdown(result) ensure @elapsed_time = Time.now - @start_time yield(FINISHED, name) yield(FINISHED_OBJECT, self) end end
#run_shutdown(result) (private)
[ GitHub ]# File 'lib/test/unit/testsuite.rb', line 154
def run_shutdown(result) return if @test_case.nil? or !@test_case.respond_to?(:shutdown) begin @test_case.shutdown rescue Exception raise unless handle_exception($!, result) end end
#run_startup(result) (private)
[ GitHub ]# File 'lib/test/unit/testsuite.rb', line 111
def run_startup(result) return if @test_case.nil? or !@test_case.respond_to?(:startup) begin @test_case.startup rescue Exception raise unless handle_exception($!, result) end end
#run_test(test, result) (private)
[ GitHub ]# File 'lib/test/unit/testsuite.rb', line 120
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
#size
Retuns the rolled up number of tests in this suite; i.e. if the suite contains other suites, it counts the tests within those suites, not the suites themselves.
# File 'lib/test/unit/testsuite.rb', line 83
def size total_size = @n_tests @tests.each { |test| total_size += test.size } total_size end
#to_s
Overridden to return the name given the suite at creation.
# File 'lib/test/unit/testsuite.rb', line 95
def to_s @name end