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 26
def initialize(suite)
  @suite = suite
end

Public Instance Methods

run_suite() click to toggle source

Runs the suite the TestRunnerMediator was created with.

# File lib/test/unit/ui/testrunnermediator.rb, line 32
def run_suite
  Unit.run = true

  result = create_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

  start_time = Time.now
  begin
    notify_listeners(RESET, @suite.size)
    notify_listeners(STARTED, result)

    @suite.run(result) do |channel, value|
      notify_listeners(channel, value)
    end
  ensure
    elapsed_time = Time.now - start_time
    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)
    notify_listeners(FINISHED, elapsed_time)
  end

  result
end