Class: RightDevelop::CI::Formatters::RSpecV1

Inherits:
Spec::Runner::Formatter::BaseTextFormatter
  • Object
show all
Defined in:
lib/right_develop/ci/formatters/rspec_v1.rb

Overview

JUnit XML output formatter for RSpec 1.x

Instance Method Summary collapse

Constructor Details

#initialize(*args) ⇒ RSpecV1

Returns a new instance of RSpecV1.



4
5
6
7
8
9
10
11
# File 'lib/right_develop/ci/formatters/rspec_v1.rb', line 4

def initialize(*args)
  super(*args)
  @current_example_group = nil
  @test_times = {}
  @test_groups = {}
  @test_results = {}
  @test_failures = {}
end

Instance Method Details

#dump_failure(counter, failure) ⇒ Object



71
72
73
# File 'lib/right_develop/ci/formatters/rspec_v1.rb', line 71

def dump_failure(counter, failure)
  # no-op; our summary contains everything
end

#dump_pendingObject



75
76
77
# File 'lib/right_develop/ci/formatters/rspec_v1.rb', line 75

def dump_pending()
  # no-op; our summary contains everything
end

#dump_summary(duration, example_count, failure_count, pending_count) ⇒ Object



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/right_develop/ci/formatters/rspec_v1.rb', line 41

def dump_summary(duration, example_count, failure_count, pending_count)
  builder = Builder::XmlMarkup.new :indent => 2
  builder.instruct! :xml, :version => "1.0", :encoding => "UTF-8"
  builder.testsuite :errors => 0, :failures => failure_count, :skipped => pending_count, :tests => example_count, :time => duration, :timestamp => Time.now.iso8601 do
    builder.properties
    @test_results.each_pair do |test, result|
      classname        = purify(classname_for(test))
      full_description = purify(test.description)

      # The full description always begins with the classname, but this is useless info when
      # generating the XML report.
      if full_description.start_with?(classname)
        full_description = full_description[classname.length..-1].strip
      end

      builder.testcase(:classname => classname.to_sym, :name => full_description, :time => @test_times[test]) do
        case result
        when "failed"
          builder.failure :message => "failed #{full_description}", :type => "failed" do
            builder.cdata! purify(failure_details_for(test))
          end
        when "pending" then
          builder.skipped
        end
      end
    end
  end
  output.puts builder.target!
end

#example_failed(example, counter, failure) ⇒ Object



28
29
30
31
32
33
# File 'lib/right_develop/ci/formatters/rspec_v1.rb', line 28

def example_failed(example, counter, failure)
  @test_groups[example] ||= @current_example_group
  @test_times[example] = Time.now - @example_started_at
  @test_results[example] = 'failed'
  @test_failures[example] = failure
end

#example_group_started(example) ⇒ Object



13
14
15
# File 'lib/right_develop/ci/formatters/rspec_v1.rb', line 13

def example_group_started(example)
  @current_example_group = example
end

#example_passed(example) ⇒ Object



22
23
24
25
26
# File 'lib/right_develop/ci/formatters/rspec_v1.rb', line 22

def example_passed(example)
  @test_groups[example] ||= @current_example_group
  @test_times[example] = Time.now - @example_started_at
  @test_results[example] = 'passed'
end

#example_pending(example, message, deprecated_pending_location = nil) ⇒ Object



35
36
37
38
39
# File 'lib/right_develop/ci/formatters/rspec_v1.rb', line 35

def example_pending(example, message, deprecated_pending_location=nil)
  @test_groups[example] ||= @current_example_group
  @test_times[example] = Time.now - @example_started_at
  @test_results[example] = 'pending'
end

#example_started(example) ⇒ Object



17
18
19
20
# File 'lib/right_develop/ci/formatters/rspec_v1.rb', line 17

def example_started(example)
  @test_groups[example] ||= @current_example_group
  @example_started_at = Time.now
end