Class: CI::Reporter::TestSuite

Inherits:
Struct
  • Object
show all
Defined in:
lib/ci/reporter/test_suite.rb

Overview

Basic structure representing the running of a test suite. Used to time tests and store results.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name) ⇒ TestSuite

Returns a new instance of TestSuite.



42
43
44
45
# File 'lib/ci/reporter/test_suite.rb', line 42

def initialize(name)
  super(name.to_s) # RSpec passes a "description" object instead of a string
  @testcases = []
end

Instance Attribute Details

#assertionsObject

Returns the value of attribute assertions

Returns:

  • (Object)

    the current value of assertions



39
40
41
# File 'lib/ci/reporter/test_suite.rb', line 39

def assertions
  @assertions
end

#errorsObject

Returns the value of attribute errors

Returns:

  • (Object)

    the current value of errors



39
40
41
# File 'lib/ci/reporter/test_suite.rb', line 39

def errors
  @errors
end

#failuresObject

Returns the value of attribute failures

Returns:

  • (Object)

    the current value of failures



39
40
41
# File 'lib/ci/reporter/test_suite.rb', line 39

def failures
  @failures
end

#nameObject

Returns the value of attribute name

Returns:

  • (Object)

    the current value of name



39
40
41
# File 'lib/ci/reporter/test_suite.rb', line 39

def name
  @name
end

#skippedObject

Returns the value of attribute skipped

Returns:

  • (Object)

    the current value of skipped



39
40
41
# File 'lib/ci/reporter/test_suite.rb', line 39

def skipped
  @skipped
end

#stderrObject

Returns the value of attribute stderr.



41
42
43
# File 'lib/ci/reporter/test_suite.rb', line 41

def stderr
  @stderr
end

#stdoutObject

Returns the value of attribute stdout.



41
42
43
# File 'lib/ci/reporter/test_suite.rb', line 41

def stdout
  @stdout
end

#testcasesObject

Returns the value of attribute testcases.



40
41
42
# File 'lib/ci/reporter/test_suite.rb', line 40

def testcases
  @testcases
end

#testsObject

Returns the value of attribute tests

Returns:

  • (Object)

    the current value of tests



39
40
41
# File 'lib/ci/reporter/test_suite.rb', line 39

def tests
  @tests
end

#timeObject

Returns the value of attribute time

Returns:

  • (Object)

    the current value of time



39
40
41
# File 'lib/ci/reporter/test_suite.rb', line 39

def time
  @time
end

Instance Method Details

#create_builderObject

Creates the xml builder instance used to create the report xml document.



68
69
70
71
72
73
74
75
76
77
78
# File 'lib/ci/reporter/test_suite.rb', line 68

def create_builder
  begin
    require 'rubygems'
    gem 'builder'
  rescue LoadError
  end

  require 'builder'
  # :escape_attrs is obsolete in a newer version, but should do no harm
  Builder::XmlMarkup.new(:indent => 2, :escape_attrs => true)
end

#finishObject

Finishes timing the test suite.



57
58
59
60
61
62
63
64
65
# File 'lib/ci/reporter/test_suite.rb', line 57

def finish
  self.tests = testcases.size
  self.time = Time.now - @start
  self.failures = testcases.inject(0) {|sum,tc| sum += tc.failures.select{|f| f.failure? }.size }
  self.errors = testcases.inject(0) {|sum,tc| sum += tc.failures.select{|f| f.error? }.size }
  self.skipped = testcases.inject(0) {|sum,tc| sum += (tc.skipped? ? 1 : 0) }
  self.stdout = @capture_out.finish if @capture_out
  self.stderr = @capture_err.finish if @capture_err
end

#startObject

Starts timing the test suite.



48
49
50
51
52
53
54
# File 'lib/ci/reporter/test_suite.rb', line 48

def start
  @start = Time.now
  unless ENV['CI_CAPTURE'] == "off"
    @capture_out = OutputCapture.new($stdout) {|io| $stdout = io }
    @capture_err = OutputCapture.new($stderr) {|io| $stderr = io }
  end
end

#to_xmlObject

Creates an xml string containing the test suite results.



81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
# File 'lib/ci/reporter/test_suite.rb', line 81

def to_xml
  builder = create_builder
  # more recent version of Builder doesn't need the escaping
  def builder.trunc!(txt)
    txt.sub(/\n.*/m, '...')
  end
  builder.instruct!
  attrs = {}
  each_pair {|k,v| attrs[k] = builder.trunc!(v.to_s) unless v.nil? || v.to_s.empty? }
  builder.testsuite(attrs) do
    @testcases.each do |tc|
      tc.to_xml(builder)
    end
    builder.tag! "system-out" do
      builder.text! self.stdout
    end
    builder.tag! "system-err" do
      builder.text! self.stderr
    end
  end
end