Class: Test::Unit::UI::TestRunnerMediator
Relationships & Source Files | |
Super Chains via Extension / Inclusion / Inheritance | |
Instance Chain:
|
|
Inherits: | Object |
Defined in: | lib/test/unit/ui/testrunnermediator.rb |
Overview
Provides an interface to write any given ::Test::Unit::UI
against, hopefully making it easy to write new UIs.
Constant Summary
-
FINISHED =
# File 'lib/test/unit/ui/testrunnermediator.rb', line 19name + "::FINISHED"
-
RESET =
# File 'lib/test/unit/ui/testrunnermediator.rb', line 17name + "::RESET"
-
STARTED =
# File 'lib/test/unit/ui/testrunnermediator.rb', line 18name + "::STARTED"
::Test::Unit::Util::Observable
- Included
Class Method Summary
-
.new(suite, options = {}) ⇒ TestRunnerMediator
constructor
Creates a new
TestRunnerMediator
initialized to run the passed suite.
Instance Method Summary
-
#run
Runs the suite the
TestRunnerMediator
was created with. -
#run_suite(result = nil)
Just for backward compatibility for NetBeans.
-
#create_result
private
A factory method to create the result the mediator should run with.
- #measure_time private
- #with_listener(result) private
::Test::Unit::Util::Observable
- Included
#add_listener | Adds the passed proc as a listener on the channel indicated by channel_name. |
#notify_listeners | Calls all the procs registered on the channel indicated by channel_name. |
#remove_listener | Removes the listener indicated by listener_key from the channel indicated by channel_name. |
#channels |
Constructor Details
.new(suite, options = {}) ⇒ TestRunnerMediator
Creates a new TestRunnerMediator
initialized to run the passed suite.
# File 'lib/test/unit/ui/testrunnermediator.rb', line 25
def initialize(suite, ={}) @suite = suite @options = @test_suite_runner_class = @options[:test_suite_runner_class] @test_suite_runner_class ||= TestSuiteRunner end
Instance Method Details
#create_result (private)
A factory method to create the result the mediator should run with. Can be overridden by subclasses if one wants to use a different result.
# File 'lib/test/unit/ui/testrunnermediator.rb', line 82
def create_result TestResult.new end
#measure_time (private)
[ GitHub ]# File 'lib/test/unit/ui/testrunnermediator.rb', line 86
def measure_time begin_time = Time.now yield Time.now - begin_time end
#run
Runs the suite the TestRunnerMediator
was created with.
# File 'lib/test/unit/ui/testrunnermediator.rb', line 34
def run AutoRunner.need_auto_run = false result = create_result Test::Unit.run_at_start_hooks start_time = Time.now begin with_listener(result) do @test_suite_runner_class.run_all_tests do catch do |stop_tag| result.stop_tag = stop_tag notify_listeners(RESET, @suite.size) notify_listeners(STARTED, result) run_suite(result) end end end ensure elapsed_time = Time.now - start_time notify_listeners(FINISHED, elapsed_time) end Test::Unit.run_at_exit_hooks result end
#run_suite(result = nil)
Just for backward compatibility for NetBeans. NetBeans should not use monkey patching. NetBeans should use runner change public API.
See GitHub#38
github.com/test-unit/test-unit/issues/38
#with_listener(result) (private)
[ GitHub ]# File 'lib/test/unit/ui/testrunnermediator.rb', line 92
def with_listener(result) finished_listener = result.add_listener(TestResult::FINISHED) do |*args| notify_listeners(TestResult::FINISHED, *args) end changed_listener = result.add_listener(TestResult::CHANGED) do |*args| notify_listeners(TestResult::CHANGED, *args) end pass_assertion_listener = result.add_listener(TestResult::PASS_ASSERTION) do |*args| notify_listeners(TestResult::PASS_ASSERTION, *args) end fault_listener = result.add_listener(TestResult::FAULT) do |*args| notify_listeners(TestResult::FAULT, *args) end begin yield ensure result.remove_listener(TestResult::FAULT, fault_listener) result.remove_listener(TestResult::CHANGED, changed_listener) result.remove_listener(TestResult::FINISHED, finished_listener) result.remove_listener(TestResult::PASS_ASSERTION, pass_assertion_listener) end end