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
46
47
48
49
# File 'lib/ci/reporter/test_suite.rb', line 42

def initialize(name)
  suite_name = name.to_s.gsub(/#/, " ")
  super(suite_name) # RSpec passes a "description" object instead of a string
  if potential_classname = suite_name.split(" ").first
    self.classname = potential_classname if defined?(potential_classname) == "constant"
  end
  @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

#classnameObject

Returns the value of attribute classname

Returns:

  • (Object)

    the current value of classname



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

def classname
  @classname
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

#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.



71
72
73
74
75
76
77
78
79
80
81
# File 'lib/ci/reporter/test_suite.rb', line 71

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.



61
62
63
64
65
66
67
68
# File 'lib/ci/reporter/test_suite.rb', line 61

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.stdout = @capture_out.finish if @capture_out
  self.stderr = @capture_err.finish if @capture_err
end

#startObject

Starts timing the test suite.



52
53
54
55
56
57
58
# File 'lib/ci/reporter/test_suite.rb', line 52

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.



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

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.cdata! self.stdout
    end
    builder.tag! "system-err" do
      builder.cdata! self.stderr
    end
  end
end