Class: Test::Unit::TestSuiteThreadRunner
Relationships & Source Files | |
Super Chains via Extension / Inclusion / Inheritance | |
Class Chain:
self,
TestSuiteRunner
|
|
Instance Chain:
self,
TestSuiteRunner
|
|
Inherits: |
Test::Unit::TestSuiteRunner
|
Defined in: | lib/test/unit/test-suite-thread-runner.rb |
Class Attribute Summary
TestSuiteRunner
- Inherited
Class Method Summary
TestSuiteRunner
- Inherited
Instance Method Summary
- #run(result, run_context: nil, &progress_block)
- #run_tests(result, run_context: nil, &progress_block) private
TestSuiteRunner
- Inherited
Constructor Details
This class inherits a constructor from Test::Unit::TestSuiteRunner
Class Method Details
.run_all_tests {|TestThreadRunContext.new(self, queue, shutdowns)| ... }
# File 'lib/test/unit/test-suite-thread-runner.rb', line 15
def run_all_tests n_workers = TestSuiteRunner.n_workers queue = Thread::Queue.new shutdowns = [] yield(TestThreadRunContext.new(self, queue, shutdowns)) n_workers.times do queue << nil end workers = [] sub_exceptions = [] n_workers.times do |i| workers << Thread.new(i) do |worker_id| begin loop do task = queue.pop break if task.nil? catch do |stop_tag| task.call(stop_tag) end end rescue Exception => exception sub_exceptions << exception end end end workers.each(&:join) shutdowns.each(&:call) sub_exceptions.each do |exception| raise exception end end
Instance Method Details
#run(result, run_context: nil, &progress_block)
[ GitHub ]# File 'lib/test/unit/test-suite-thread-runner.rb', line 51
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 run_context.shutdowns << lambda do begin run_shutdown(result) ensure yield(TestSuite::FINISHED, @test_suite.name) yield(TestSuite::FINISHED_OBJECT, @test_suite) end end end
#run_tests(result, run_context: nil, &progress_block) (private)
[ GitHub ]# File 'lib/test/unit/test-suite-thread-runner.rb', line 68
def run_tests(result, run_context: nil, &progress_block) @test_suite.tests.each do |test| if test.is_a?(TestSuite) or not @test_suite.parallel_safe? run_test(test, result, run_context: run_context, &progress_block) else task = lambda do |stop_tag| sub_result = SubTestResult.new(result) sub_result.stop_tag = stop_tag run_test(test, sub_result, run_context: run_context, &progress_block) end run_context.queue << task end end end