class Test::Unit::UI::JUnitXml::TestRunner

Runs a Test::Unit::TestSuite and outputs JUnit XML format.

Public Class Methods

new(suite, options={}) click to toggle source
Calls superclass method
# File lib/test/unit/ui/junitxml/testrunner.rb, line 14
def initialize(suite, options={})
  super
  @junit_test_suites = []
end

Private Instance Methods

attach_to_mediator() click to toggle source
# File lib/test/unit/ui/junitxml/testrunner.rb, line 21
def attach_to_mediator
  @mediator.add_listener(TestSuite::STARTED_OBJECT,
                         &method(:test_suite_started))
  @mediator.add_listener(TestSuite::FINISHED_OBJECT,
                         &method(:test_suite_finished))
  @mediator.add_listener(TestCase::STARTED_OBJECT,
                         &method(:test_started))
  @mediator.add_listener(TestCase::FINISHED_OBJECT,
                         &method(:test_finished))
  @mediator.add_listener(TestResult::PASS_ASSERTION,
                         &method(:result_pass_assertion))
  @mediator.add_listener(TestResult::FAULT,
                         &method(:result_fault))
  @mediator.add_listener(TestRunnerMediator::FINISHED,
                         &method(:finished))
end
finished(elapsed_time) click to toggle source
# File lib/test/unit/ui/junitxml/testrunner.rb, line 67
def finished(elapsed_time)
  # open ERB template
  template = File.read(File.expand_path("xml.erb",
                                        File.dirname(__FILE__)))
  if ERB.instance_method(:initialize).parameters.assoc(:key)
    erb = ERB.new(template, trim_mode: "%")
  else
    erb = ERB.new(template, nil, "%")
  end

  # output
  output = if @options[:junitxml_output_file]
             File.open(@options[:junitxml_output_file], "w")
           elsif @options[:output_file_descriptor]
             IO.new(@options[:output_file_descriptor], "w")
           elsif @options[:output]
             @options[:output]
           else
             STDOUT
           end
  output.write(erb.result(binding))
  output.flush
  output.close if @options[:junitxml_output_file]
end
result_fault(fault) click to toggle source
# File lib/test/unit/ui/junitxml/testrunner.rb, line 63
def result_fault(fault)
  @junit_test_suites.last.test_cases.last << fault
end
result_pass_assertion(result) click to toggle source
# File lib/test/unit/ui/junitxml/testrunner.rb, line 59
def result_pass_assertion(result)
  @junit_test_suites.last.test_cases.last.assertion_count += 1
end
test_finished(test) click to toggle source
# File lib/test/unit/ui/junitxml/testrunner.rb, line 55
def test_finished(test)
  @junit_test_suites.last.test_cases.last.time = test.elapsed_time
end
test_started(test) click to toggle source
# File lib/test/unit/ui/junitxml/testrunner.rb, line 50
def test_started(test)
  @junit_test_suites.last << JUnitTestCase.new(test.class.name,
                                               test.description)
end
test_suite_finished(suite) click to toggle source
# File lib/test/unit/ui/junitxml/testrunner.rb, line 44
def test_suite_finished(suite)
  if suite.test_case
    @junit_test_suites.last.time = suite.elapsed_time
  end
end
test_suite_started(suite) click to toggle source
# File lib/test/unit/ui/junitxml/testrunner.rb, line 38
def test_suite_started(suite)
  if suite.test_case
    @junit_test_suites << JUnitTestSuite.new(suite.name)
  end
end