class Test::Unit::UI::XML::TestRunner - test-unit: Ruby Standard Library Documentation

# class Test::Unit::UI::XML::TestRunner

Runs a `Test::Unit::TestSuite` and outputs `XML`.

### Public Class Methods

new(suite, options={}) click to toggle source

Creates a new `TestRunner` for running the passed suite. :output option specifies where runner output should go to; defaults to STDOUT.

Calls superclass method `Test::Unit::UI::TestRunner::new`

    # File test-unit-3.6.7/lib/test/unit/ui/xml/testrunner.rb, line 25
    def initialize(suite, options={})
      super
      @output = @options[:output] || STDOUT
      if @options[:output_file_descriptor]
        @output = IO.new(@options[:output_file_descriptor], "w")
      end
      @already_outputted = false
      @indent = 0
      @top_level = true
      @current_test = nil
      @current_test_suite = nil
      @already_outputted = false
    end

### Private Instance Methods

add_content(name, content) click to toggle source

    # File test-unit-3.6.7/lib/test/unit/ui/xml/testrunner.rb, line 182
    def add_content(name, content)
      return if content.nil?
      case content
      when Time
        content = content.iso8601
      end
      @output.puts("#{indent}<#{name}>#{h(content)}</#{name}>")
    end

attach_to_mediator() click to toggle source

    # File test-unit-3.6.7/lib/test/unit/ui/xml/testrunner.rb, line 40
    def attach_to_mediator
      @mediator.add_listener(TestResult::PASS_ASSERTION,
                             &method(:result_pass_assertion))
      @mediator.add_listener(TestResult::FAULT,
                             &method(:result_fault))
      @mediator.add_listener(TestRunnerMediator::STARTED,
                             &method(:started))
      @mediator.add_listener(TestRunnerMediator::FINISHED,
                             &method(:finished))
      @mediator.add_listener(TestCase::STARTED_OBJECT,
                             &method(:test_started))
      @mediator.add_listener(TestCase::FINISHED_OBJECT,
                             &method(:test_finished))
      @mediator.add_listener(TestSuite::STARTED_OBJECT,
                             &method(:test_suite_started))
      @mediator.add_listener(TestSuite::FINISHED_OBJECT,
                             &method(:test_suite_finished))
    end

close_tag(name) click to toggle source

    # File test-unit-3.6.7/lib/test/unit/ui/xml/testrunner.rb, line 191
    def close_tag(name)
      @indent -= 2
      @output.puts("#{indent}</#{name}>")
    end

finished(elapsed_time) click to toggle source

    # File test-unit-3.6.7/lib/test/unit/ui/xml/testrunner.rb, line 102
    def finished(elapsed_time)
      add_content("success", @result.passed?)
      close_tag("stream")
    end

indent() click to toggle source

    # File test-unit-3.6.7/lib/test/unit/ui/xml/testrunner.rb, line 169
    def indent
      " " * @indent
    end

open_tag(name) { || ... } click to toggle source

    # File test-unit-3.6.7/lib/test/unit/ui/xml/testrunner.rb, line 173
    def open_tag(name)
      @output.puts("#{indent}<#{name}>")
      @indent += 2
      if block_given?
        yield
        close_tag(name)
      end
    end

output_started() click to toggle source

    # File test-unit-3.6.7/lib/test/unit/ui/xml/testrunner.rb, line 98
    def output_started
      open_tag("stream")
    end

output_test(test) click to toggle source

    # File test-unit-3.6.7/lib/test/unit/ui/xml/testrunner.rb, line 196
    def output_test(test)
      open_tag("test") do
        add_content("name", test.method_name)
        add_content("start-time", test.start_time)
        add_content("elapsed", test.elapsed_time)
      end
    end

output_test_suite(test_suite) click to toggle source

    # File test-unit-3.6.7/lib/test/unit/ui/xml/testrunner.rb, line 204
    def output_test_suite(test_suite)
      test_case = test_suite.test_case
      if test_case.nil?
        open_tag("test-suite") do
          add_content("name", test_suite.name)
          add_content("start-time", test_suite.start_time)
          add_content("elapsed", test_suite.elapsed_time)
        end
      else
        open_tag("test-case") do
          add_content("name", test_suite.name)
          add_content("start-time", test_suite.start_time)
          add_content("elapsed", test_suite.elapsed_time)
        end
      end
    end

result_fault(fault) click to toggle source

    # File test-unit-3.6.7/lib/test/unit/ui/xml/testrunner.rb, line 65
    def result_fault(fault)
      open_tag("test-result") do
        open_tag("result") do
          output_test_suite(@current_test_suite)
          output_test(@current_test)
          open_tag("backtrace") do
            fault.location.each do |entry|
              file, line, info = entry.split(/:/, 3)
              open_tag("entry") do
                add_content("file", file)
                add_content("line", line)
                add_content("info", info)
              end
            end
          end
          if fault.respond_to?(:expected)
            add_content("expected", fault.expected)
          end
          if fault.respond_to?(:actual)
            add_content("actual", fault.actual)
          end
          add_content("detail", fault.message)
          add_content("status", fault.label.downcase)
        end
      end
      @already_outputted = true if fault.critical?
    end

result_pass_assertion(result) click to toggle source

    # File test-unit-3.6.7/lib/test/unit/ui/xml/testrunner.rb, line 59
    def result_pass_assertion(result)
      open_tag("pass-assertion") do
        output_test(@current_test)
      end
    end

started(result) click to toggle source

    # File test-unit-3.6.7/lib/test/unit/ui/xml/testrunner.rb, line 93
    def started(result)
      @result = result
      output_started
    end

test_finished(test) click to toggle source

    # File test-unit-3.6.7/lib/test/unit/ui/xml/testrunner.rb, line 115
    def test_finished(test)
      unless @already_outputted
        open_tag("test-result") do
          output_test(test)
          open_tag("result") do
            output_test_suite(@current_test_suite)
            output_test(test)
            add_content("status", "success")
          end
        end
      end

      open_tag("complete-test") do
        output_test(test)
        add_content("success", test.passed?)
      end
      @current_test = nil
    end

test_started(test) click to toggle source

    # File test-unit-3.6.7/lib/test/unit/ui/xml/testrunner.rb, line 107
    def test_started(test)
      @already_outputted = false
      @current_test = test
      open_tag("start-test") do
        output_test(test)
      end
    end

test_suite_finished(suite) click to toggle source

    # File test-unit-3.6.7/lib/test/unit/ui/xml/testrunner.rb, line 154
    def test_suite_finished(suite)
      if suite.test_case.nil?
        open_tag("complete-test-suite") do
          output_test_suite(suite)
          add_content("success", suite.passed?)
        end
      else
        open_tag("complete-test-case") do
          output_test_suite(suite)
          add_content("success", suite.passed?)
        end
      end
      @current_test_suite = nil
    end

test_suite_started(suite) click to toggle source

    # File test-unit-3.6.7/lib/test/unit/ui/xml/testrunner.rb, line 134
    def test_suite_started(suite)
      @current_test_suite = suite
      if suite.test_case.nil?
        open_tag("ready-test-suite") do
          add_content("n-tests", suite.size)
        end
        open_tag("start-test-suite") do
          output_test_suite(suite)
        end
      else
        open_tag("ready-test-case") do
          output_test_suite(suite)
          add_content("n-tests", suite.size)
        end
        open_tag("start-test-case") do
          output_test_suite(suite)
        end
      end
    end