class Test::Unit::UI::TestRunnerMediator

Provides an interface to write any given UI against, hopefully making it easy to write new UIs.

Constants

FINISHED
RESET
STARTED

Public Class Methods

new(suite) click to toggle source

Creates a new TestRunnerMediator initialized to run the passed suite.

# File lib/test/unit/ui/testrunnermediator.rb, line 25
def initialize(suite)
  @suite = suite
end

Public Instance Methods

run() click to toggle source

Runs the suite the TestRunnerMediator was created with.

# File lib/test/unit/ui/testrunnermediator.rb, line 31
def run
  AutoRunner.need_auto_run = false

  result = create_result

  Test::Unit.run_at_start_hooks
  start_time = Time.now
  begin
    catch do |stop_tag|
      result.stop_tag = stop_tag
      with_listener(result) do
        notify_listeners(RESET, @suite.size)
        notify_listeners(STARTED, result)

        run_suite(result)
      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) click to toggle source

Just for backward compatibility for NetBeans. NetBeans should not use monkey patching. NetBeans should use runner change public API.

See GitHub#38

https://github.com/test-unit/test-unit/issues/38
# File lib/test/unit/ui/testrunnermediator.rb, line 63
def run_suite(result=nil)
  if result.nil?
    run
  else
    @suite.run(result) do |channel, value|
      notify_listeners(channel, value)
    end
  end
end

Private Instance Methods

create_result() click to toggle source

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 77
def create_result
  TestResult.new
end
measure_time() { || ... } click to toggle source
# File lib/test/unit/ui/testrunnermediator.rb, line 81
def measure_time
  begin_time = Time.now
  yield
  Time.now - begin_time
end
with_listener(result) { || ... } click to toggle source
# File lib/test/unit/ui/testrunnermediator.rb, line 87
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