ci_reporter 1.0 → 1.6.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,25 +1,35 @@
1
+ # Copyright (c) 2006-2010 Nick Sieger <nicksieger@gmail.com>
2
+ # See the file LICENSE.txt included with the distribution for
3
+ # software license details.
4
+
1
5
  require File.dirname(__FILE__) + "/../../spec_helper.rb"
2
6
  require 'rexml/document'
3
7
 
4
- context "A TestSuite" do
5
- setup do
8
+ describe "A TestSuite" do
9
+ before(:each) do
6
10
  @suite = CI::Reporter::TestSuite.new("example suite")
7
11
  end
8
12
 
9
- specify "should collect timings when start and finish are invoked in sequence" do
13
+ it "should collect timings when start and finish are invoked in sequence" do
10
14
  @suite.start
11
15
  @suite.finish
12
- @suite.time.should_be > 0
16
+ @suite.time.should >= 0
13
17
  end
14
18
 
15
- specify "should aggregate tests" do
19
+ it "should aggregate tests" do
16
20
  @suite.start
17
21
  @suite.testcases << CI::Reporter::TestCase.new("example test")
18
22
  @suite.finish
19
23
  @suite.tests.should == 1
20
24
  end
25
+
26
+ it "should stringify the name for cases when the object passed in is not a string" do
27
+ name = Object.new
28
+ def name.to_s; "object name"; end
29
+ CI::Reporter::TestSuite.new(name).name.should == "object name"
30
+ end
21
31
 
22
- specify "should indicate number of failures and errors" do
32
+ it "should indicate number of failures and errors" do
23
33
  failure = mock("failure")
24
34
  failure.stub!(:failure?).and_return true
25
35
  failure.stub!(:error?).and_return false
@@ -31,20 +41,20 @@ context "A TestSuite" do
31
41
  @suite.start
32
42
  @suite.testcases << CI::Reporter::TestCase.new("example test")
33
43
  @suite.testcases << CI::Reporter::TestCase.new("failure test")
34
- @suite.testcases.last.failure = failure
44
+ @suite.testcases.last.failures << failure
35
45
  @suite.testcases << CI::Reporter::TestCase.new("error test")
36
- @suite.testcases.last.failure = error
46
+ @suite.testcases.last.failures << error
37
47
  @suite.finish
38
48
  @suite.tests.should == 3
39
49
  @suite.failures.should == 1
40
50
  @suite.errors.should == 1
41
51
  end
42
-
43
52
  end
44
53
 
45
- context "TestSuite xml" do
46
- setup do
54
+ describe "TestSuite xml" do
55
+ before(:each) do
47
56
  @suite = CI::Reporter::TestSuite.new("example suite")
57
+ @suite.assertions = 11
48
58
  begin
49
59
  raise StandardError, "an exception occurred"
50
60
  rescue => e
@@ -52,7 +62,7 @@ context "TestSuite xml" do
52
62
  end
53
63
  end
54
64
 
55
- specify "should contain Ant/JUnit-formatted description of entire suite" do
65
+ it "should contain Ant/JUnit-formatted description of entire suite" do
56
66
  failure = mock("failure")
57
67
  failure.stub!(:failure?).and_return true
58
68
  failure.stub!(:error?).and_return false
@@ -69,23 +79,48 @@ context "TestSuite xml" do
69
79
 
70
80
  @suite.start
71
81
  @suite.testcases << CI::Reporter::TestCase.new("example test")
82
+ @suite.testcases << CI::Reporter::TestCase.new("skipped test").tap {|tc| tc.skipped = true }
72
83
  @suite.testcases << CI::Reporter::TestCase.new("failure test")
73
- @suite.testcases.last.failure = failure
84
+ @suite.testcases.last.failures << failure
74
85
  @suite.testcases << CI::Reporter::TestCase.new("error test")
75
- @suite.testcases.last.failure = error
86
+ @suite.testcases.last.failures << error
76
87
  @suite.finish
77
88
 
78
89
  xml = @suite.to_xml
79
90
  doc = REXML::Document.new(xml)
80
- testsuite = doc.root.elements.to_a('/testsuite')
91
+ testsuite = doc.root.elements.to_a("/testsuite")
81
92
  testsuite.length.should == 1
82
93
  testsuite = testsuite.first
94
+ testsuite.attributes["name"].should == "example suite"
95
+ testsuite.attributes["assertions"].should == "11"
83
96
 
84
- testcases = testsuite.elements.to_a('testcase')
85
- testcases.length.should == 3
97
+ testcases = testsuite.elements.to_a("testcase")
98
+ testcases.length.should == 4
86
99
  end
87
-
88
- specify "should filter attributes properly for invalid characters" do
100
+
101
+ it "should contain full exception type and message in location element" do
102
+ failure = mock("failure")
103
+ failure.stub!(:failure?).and_return true
104
+ failure.stub!(:error?).and_return false
105
+ failure.stub!(:name).and_return "failure"
106
+ failure.stub!(:message).and_return "There was a failure"
107
+ failure.stub!(:location).and_return @exception.backtrace.join("\n")
108
+
109
+ @suite.start
110
+ @suite.testcases << CI::Reporter::TestCase.new("example test")
111
+ @suite.testcases << CI::Reporter::TestCase.new("failure test")
112
+ @suite.testcases.last.failures << failure
113
+ @suite.finish
114
+
115
+ xml = @suite.to_xml
116
+ doc = REXML::Document.new(xml)
117
+ elem = doc.root.elements.to_a("/testsuite/testcase[@name='failure test']/failure").first
118
+ location = elem.texts.join
119
+ location.should =~ Regexp.new(failure.message)
120
+ location.should =~ Regexp.new(failure.name)
121
+ end
122
+
123
+ it "should filter attributes properly for invalid characters" do
89
124
  failure = mock("failure")
90
125
  failure.stub!(:failure?).and_return true
91
126
  failure.stub!(:error?).and_return false
@@ -95,22 +130,22 @@ context "TestSuite xml" do
95
130
 
96
131
  @suite.start
97
132
  @suite.testcases << CI::Reporter::TestCase.new("failure test")
98
- @suite.testcases.last.failure = failure
133
+ @suite.testcases.last.failures << failure
99
134
  @suite.finish
100
135
 
101
136
  xml = @suite.to_xml
102
- xml.should_match %r/message="There was a &lt;failure&gt;\.\.\."/
137
+ xml.should =~ %r/message="There was a &lt;failure&gt;\.\.\."/
103
138
  end
104
139
  end
105
140
 
106
- context "A TestCase" do
107
- setup do
141
+ describe "A TestCase" do
142
+ before(:each) do
108
143
  @tc = CI::Reporter::TestCase.new("example test")
109
144
  end
110
145
 
111
- specify "should collect timings when start and finish are invoked in sequence" do
146
+ it "should collect timings when start and finish are invoked in sequence" do
112
147
  @tc.start
113
148
  @tc.finish
114
- @tc.time.should_be > 0
149
+ @tc.time.should >= 0
115
150
  end
116
- end
151
+ end
@@ -1,16 +1,22 @@
1
+ # Copyright (c) 2006-2010 Nick Sieger <nicksieger@gmail.com>
2
+ # See the file LICENSE.txt included with the distribution for
3
+ # software license details.
4
+
1
5
  require File.dirname(__FILE__) + "/../../spec_helper.rb"
2
6
 
3
- context "The TestUnit reporter" do
4
- setup do
7
+ describe "The TestUnit reporter" do
8
+ before(:each) do
5
9
  @report_mgr = mock("report manager")
6
10
  @testunit = CI::Reporter::TestUnit.new(nil, @report_mgr)
11
+ @result = mock("result")
12
+ @result.stub!(:assertion_count).and_return(7)
7
13
  end
8
14
 
9
- specify "should build suites based on adjacent tests with the same class name" do
15
+ it "should build suites based on adjacent tests with the same class name" do
10
16
  @suite = nil
11
17
  @report_mgr.should_receive(:write_report).once.and_return {|suite| @suite = suite }
12
18
 
13
- @testunit.started(mock("result"))
19
+ @testunit.started(@result)
14
20
  @testunit.test_started("test_one(TestCaseClass)")
15
21
  @testunit.test_finished("test_one(TestCaseClass)")
16
22
  @testunit.test_started("test_two(TestCaseClass)")
@@ -20,18 +26,18 @@ context "The TestUnit reporter" do
20
26
  @suite.name.should == "TestCaseClass"
21
27
  @suite.testcases.length.should == 2
22
28
  @suite.testcases.first.name.should == "test_one"
23
- @suite.testcases.first.should_not_be_failure
24
- @suite.testcases.first.should_not_be_error
29
+ @suite.testcases.first.should_not be_failure
30
+ @suite.testcases.first.should_not be_error
25
31
  @suite.testcases.last.name.should == "test_two"
26
- @suite.testcases.last.should_not_be_failure
27
- @suite.testcases.last.should_not_be_error
32
+ @suite.testcases.last.should_not be_failure
33
+ @suite.testcases.last.should_not be_error
28
34
  end
29
35
 
30
- specify "should build two suites when encountering different class names" do
36
+ it "should build two suites when encountering different class names" do
31
37
  @suites = []
32
38
  @report_mgr.should_receive(:write_report).twice.and_return {|suite| @suites << suite }
33
39
 
34
- @testunit.started(mock("result"))
40
+ @testunit.started(@result)
35
41
  @testunit.test_started("test_one(TestCaseClass)")
36
42
  @testunit.test_finished("test_one(TestCaseClass)")
37
43
  @testunit.test_started("test_two(AnotherTestCaseClass)")
@@ -41,12 +47,46 @@ context "The TestUnit reporter" do
41
47
  @suites.first.name.should == "TestCaseClass"
42
48
  @suites.first.testcases.length.should == 1
43
49
  @suites.first.testcases.first.name.should == "test_one"
50
+ @suites.first.testcases.first.assertions.should == 7
51
+
44
52
  @suites.last.name.should == "AnotherTestCaseClass"
45
53
  @suites.last.testcases.length.should == 1
46
54
  @suites.last.testcases.first.name.should == "test_two"
55
+ @suites.last.testcases.first.assertions.should == 0
47
56
  end
48
57
 
49
- specify "should add failures to testcases when encountering a fault" do
58
+ it "should record assertion counts during test run" do
59
+ @suite = nil
60
+ @report_mgr.should_receive(:write_report).and_return {|suite| @suite = suite }
61
+
62
+ @testunit.started(@result)
63
+ @testunit.test_started("test_one(TestCaseClass)")
64
+ @testunit.test_finished("test_one(TestCaseClass)")
65
+ @testunit.finished(10)
66
+
67
+ @suite.assertions.should == 7
68
+ @suite.testcases.last.assertions.should == 7
69
+ end
70
+
71
+ it "should add failures to testcases when encountering a fault" do
72
+ @failure = Test::Unit::Failure.new("test_one(TestCaseClass)", "somewhere:10", "it failed")
73
+
74
+ @suite = nil
75
+ @report_mgr.should_receive(:write_report).once.and_return {|suite| @suite = suite }
76
+
77
+ @testunit.started(@result)
78
+ @testunit.test_started("test_one(TestCaseClass)")
79
+ @testunit.fault(@failure)
80
+ @testunit.test_finished("test_one(TestCaseClass)")
81
+ @testunit.finished(10)
82
+
83
+ @suite.name.should == "TestCaseClass"
84
+ @suite.testcases.length.should == 1
85
+ @suite.testcases.first.name.should == "test_one"
86
+ @suite.testcases.first.should be_failure
87
+ end
88
+
89
+ it "should add errors to testcases when encountering a fault" do
50
90
  begin
51
91
  raise StandardError, "error"
52
92
  rescue => e
@@ -56,20 +96,57 @@ context "The TestUnit reporter" do
56
96
  @suite = nil
57
97
  @report_mgr.should_receive(:write_report).once.and_return {|suite| @suite = suite }
58
98
 
59
- @testunit.started(mock("result"))
99
+ @testunit.started(@result)
60
100
  @testunit.test_started("test_one(TestCaseClass)")
61
101
  @testunit.test_finished("test_one(TestCaseClass)")
62
102
  @testunit.test_started("test_two(TestCaseClass)")
63
103
  @testunit.fault(@error)
104
+ @testunit.test_finished("test_two(TestCaseClass)")
64
105
  @testunit.finished(10)
65
106
 
66
107
  @suite.name.should == "TestCaseClass"
67
108
  @suite.testcases.length.should == 2
68
109
  @suite.testcases.first.name.should == "test_one"
69
- @suite.testcases.first.should_not_be_failure
70
- @suite.testcases.first.should_not_be_error
110
+ @suite.testcases.first.should_not be_failure
111
+ @suite.testcases.first.should_not be_error
71
112
  @suite.testcases.last.name.should == "test_two"
72
- @suite.testcases.last.should_not_be_failure
73
- @suite.testcases.last.should_be_error
113
+ @suite.testcases.last.should_not be_failure
114
+ @suite.testcases.last.should be_error
115
+ end
116
+
117
+ it "should add multiple failures to a testcase" do
118
+ @failure1 = Test::Unit::Failure.new("test_one(TestCaseClass)", "somewhere:10", "it failed")
119
+ @failure2 = Test::Unit::Failure.new("test_one(TestCaseClass)", "somewhere:12", "it failed again in teardown")
120
+
121
+ @suite = nil
122
+ @report_mgr.should_receive(:write_report).once.and_return {|suite| @suite = suite }
123
+
124
+ @testunit.started(@result)
125
+ @testunit.test_started("test_one(TestCaseClass)")
126
+ @testunit.fault(@failure1)
127
+ @testunit.fault(@failure2)
128
+ @testunit.test_finished("test_one(TestCaseClass)")
129
+ @testunit.finished(10)
130
+
131
+ @suite.name.should == "TestCaseClass"
132
+ @suite.testcases.length.should == 1
133
+ @suite.testcases.first.name.should == "test_one"
134
+ @suite.testcases.first.should be_failure
135
+ @suite.testcases.first.failures.size.should == 2
136
+ @suite.failures.should == 2
137
+ end
138
+
139
+ it "should count test case names that don't conform to the standard pattern" do
140
+ @suite = nil
141
+ @report_mgr.should_receive(:write_report).once.and_return {|suite| @suite = suite }
142
+
143
+ @testunit.started(@result)
144
+ @testunit.test_started("some unknown test")
145
+ @testunit.test_finished("some unknown test")
146
+ @testunit.finished(10)
147
+
148
+ @suite.name.should == "unknown-1"
149
+ @suite.testcases.length.should == 1
150
+ @suite.testcases.first.name.should == "some unknown test"
74
151
  end
75
- end
152
+ end
data/spec/spec_helper.rb CHANGED
@@ -1,9 +1,21 @@
1
+ # Copyright (c) 2006-2010 Nick Sieger <nicksieger@gmail.com>
2
+ # See the file LICENSE.txt included with the distribution for
3
+ # software license details.
4
+
1
5
  require 'rubygems'
2
- gem 'rspec'
3
- require 'spec'
4
- $: << File.dirname(__FILE__) + "/../lib"
6
+ begin
7
+ require 'rspec'
8
+ rescue LoadError
9
+ require 'spec'
10
+ end
11
+
12
+ unless defined?(CI_REPORTER_LIB)
13
+ CI_REPORTER_LIB = File.expand_path(File.dirname(__FILE__) + "/../lib")
14
+ $: << CI_REPORTER_LIB
15
+ end
16
+
5
17
  require 'ci/reporter/core'
6
18
  require 'ci/reporter/test_unit'
7
19
  require 'ci/reporter/rspec'
8
20
 
9
- REPORTS_DIR = File.dirname(__FILE__) + "/reports"
21
+ REPORTS_DIR = File.dirname(__FILE__) + "/reports" unless defined?(REPORTS_DIR)
data/stub.rake ADDED
@@ -0,0 +1,14 @@
1
+ # Copyright (c) 2006-2010 Nick Sieger <nicksieger@gmail.com>
2
+ # See the file LICENSE.txt included with the distribution for
3
+ # software license details.
4
+ #
5
+ # Use this stub rakefile as a wrapper around a regular Rakefile. Run in the
6
+ # same directory as the real Rakefile.
7
+ #
8
+ # rake -f /path/to/ci_reporter/lib/ci/reporter/rake/stub.rake ci:setup:rspec default
9
+ #
10
+
11
+ load File.dirname(__FILE__) + '/lib/ci/reporter/rake/rspec.rb'
12
+ load File.dirname(__FILE__) + '/lib/ci/reporter/rake/cucumber.rb'
13
+ load File.dirname(__FILE__) + '/lib/ci/reporter/rake/test_unit.rb'
14
+ load 'Rakefile'
@@ -1,12 +1,18 @@
1
+ # Copyright (c) 2006-2010 Nick Sieger <nicksieger@gmail.com>
2
+ # See the file LICENSE.txt included with the distribution for
3
+ # software license details.
4
+
1
5
  begin
2
6
  gem 'ci_reporter'
3
- rescue
7
+ rescue Gem::LoadError
4
8
  $: << File.dirname(__FILE__) + "/../lib"
5
9
  end
6
10
  require 'ci/reporter/rake/rspec'
11
+ require 'ci/reporter/rake/cucumber'
7
12
  require 'ci/reporter/rake/test_unit'
8
13
 
9
14
  namespace :ci do
10
15
  task :setup_rspec => "ci:setup:rspec"
16
+ task :setup_cucumber => "ci:setup:cucumber"
11
17
  task :setup_testunit => "ci:setup:testunit"
12
18
  end
metadata CHANGED
@@ -1,67 +1,129 @@
1
1
  --- !ruby/object:Gem::Specification
2
- rubygems_version: 0.9.0
3
- specification_version: 1
4
2
  name: ci_reporter
5
3
  version: !ruby/object:Gem::Version
6
- version: "1.0"
7
- date: 2007-02-14 00:00:00 -06:00
8
- summary: CI::Reporter allows you to generate reams of XML for use with continuous integration systems.
9
- require_paths:
10
- - lib
11
- email: nick@nicksieger.com
12
- homepage: http://caldersphere.rubyforge.org/ci_reporter
13
- rubyforge_project: caldersphere
14
- description: CI::Reporter is an add-on to Test::Unit and RSpec that allows you to generate XML reports of your test and/or spec runs. The resulting files can be read by a continuous integration system that understands Ant's JUnit report XML format, thus allowing your CI system to track test/spec successes and failures.
15
- autorequire:
16
- default_executable:
17
- bindir: bin
18
- has_rdoc: true
19
- required_ruby_version: !ruby/object:Gem::Version::Requirement
20
- requirements:
21
- - - ">"
22
- - !ruby/object:Gem::Version
23
- version: 0.0.0
24
- version:
4
+ prerelease:
5
+ version: 1.6.5
25
6
  platform: ruby
26
- signing_key:
27
- cert_chain:
28
- post_install_message:
29
7
  authors:
30
- - Nick Sieger
31
- files:
32
- - History.txt
33
- - Manifest.txt
34
- - README.txt
35
- - Rakefile
36
- - lib/ci/reporter/core.rb
37
- - lib/ci/reporter/report_manager.rb
38
- - lib/ci/reporter/rspec.rb
39
- - lib/ci/reporter/test_suite.rb
40
- - lib/ci/reporter/test_unit.rb
41
- - lib/ci/reporter/rake/rspec.rb
42
- - lib/ci/reporter/rake/rspec_loader.rb
43
- - lib/ci/reporter/rake/test_unit.rb
44
- - lib/ci/reporter/rake/test_unit_loader.rb
45
- - spec/spec_helper.rb
46
- - spec/ci/reporter/report_manager_spec.rb
47
- - spec/ci/reporter/rspec_spec.rb
48
- - spec/ci/reporter/test_suite_spec.rb
49
- - spec/ci/reporter/test_unit_spec.rb
50
- - tasks/ci_reporter.rake
51
- test_files:
52
- - spec/ci/reporter/report_manager_spec.rb
53
- - spec/ci/reporter/rspec_spec.rb
54
- - spec/ci/reporter/test_suite_spec.rb
55
- - spec/ci/reporter/test_unit_spec.rb
56
- rdoc_options: []
57
-
58
- extra_rdoc_files: []
8
+ - Nick Sieger
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
59
12
 
13
+ date: 2011-06-14 00:00:00 -05:00
14
+ default_executable:
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: builder
18
+ prerelease: false
19
+ requirement: &id001 !ruby/object:Gem::Requirement
20
+ none: false
21
+ requirements:
22
+ - - ">="
23
+ - !ruby/object:Gem::Version
24
+ version: 2.1.2
25
+ type: :runtime
26
+ version_requirements: *id001
27
+ - !ruby/object:Gem::Dependency
28
+ name: rubyforge
29
+ prerelease: false
30
+ requirement: &id002 !ruby/object:Gem::Requirement
31
+ none: false
32
+ requirements:
33
+ - - ">="
34
+ - !ruby/object:Gem::Version
35
+ version: 2.0.4
36
+ type: :development
37
+ version_requirements: *id002
38
+ - !ruby/object:Gem::Dependency
39
+ name: hoe
40
+ prerelease: false
41
+ requirement: &id003 !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: 2.9.4
47
+ type: :development
48
+ version_requirements: *id003
49
+ description: CI::Reporter is an add-on to Test::Unit, RSpec and Cucumber that allows you to generate XML reports of your test, spec and/or feature runs. The resulting files can be read by a continuous integration system that understands Ant's JUnit report XML format, thus allowing your CI system to track test/spec successes and failures.
50
+ email: nick@nicksieger.com
60
51
  executables: []
61
52
 
62
53
  extensions: []
63
54
 
64
- requirements: []
55
+ extra_rdoc_files:
56
+ - History.txt
57
+ - Manifest.txt
58
+ - README.txt
59
+ - LICENSE.txt
60
+ files:
61
+ - History.txt
62
+ - Manifest.txt
63
+ - README.txt
64
+ - LICENSE.txt
65
+ - Rakefile
66
+ - stub.rake
67
+ - lib/ci/reporter/core.rb
68
+ - lib/ci/reporter/cucumber.rb
69
+ - lib/ci/reporter/report_manager.rb
70
+ - lib/ci/reporter/rspec.rb
71
+ - lib/ci/reporter/test_suite.rb
72
+ - lib/ci/reporter/test_unit.rb
73
+ - lib/ci/reporter/version.rb
74
+ - lib/ci/reporter/rake/cucumber.rb
75
+ - lib/ci/reporter/rake/cucumber_loader.rb
76
+ - lib/ci/reporter/rake/rspec.rb
77
+ - lib/ci/reporter/rake/rspec_loader.rb
78
+ - lib/ci/reporter/rake/test_unit.rb
79
+ - lib/ci/reporter/rake/test_unit_loader.rb
80
+ - lib/ci/reporter/rake/utils.rb
81
+ - spec/spec_helper.rb
82
+ - spec/ci/reporter/cucumber_spec.rb
83
+ - spec/ci/reporter/output_capture_spec.rb
84
+ - spec/ci/reporter/report_manager_spec.rb
85
+ - spec/ci/reporter/rspec_spec.rb
86
+ - spec/ci/reporter/test_suite_spec.rb
87
+ - spec/ci/reporter/test_unit_spec.rb
88
+ - spec/ci/reporter/rake/rake_tasks_spec.rb
89
+ - tasks/ci_reporter.rake
90
+ has_rdoc: true
91
+ homepage: http://caldersphere.rubyforge.org/ci_reporter
92
+ licenses: []
65
93
 
66
- dependencies: []
94
+ post_install_message:
95
+ rdoc_options:
96
+ - --main
97
+ - README.txt
98
+ - -SHN
99
+ - -f
100
+ - darkfish
101
+ require_paths:
102
+ - lib
103
+ required_ruby_version: !ruby/object:Gem::Requirement
104
+ none: false
105
+ requirements:
106
+ - - ">="
107
+ - !ruby/object:Gem::Version
108
+ version: "0"
109
+ required_rubygems_version: !ruby/object:Gem::Requirement
110
+ none: false
111
+ requirements:
112
+ - - ">="
113
+ - !ruby/object:Gem::Version
114
+ version: "0"
115
+ requirements: []
67
116
 
117
+ rubyforge_project: caldersphere
118
+ rubygems_version: 1.5.1
119
+ signing_key:
120
+ specification_version: 3
121
+ summary: CI::Reporter allows you to generate reams of XML for use with continuous integration systems.
122
+ test_files:
123
+ - spec/ci/reporter/cucumber_spec.rb
124
+ - spec/ci/reporter/output_capture_spec.rb
125
+ - spec/ci/reporter/report_manager_spec.rb
126
+ - spec/ci/reporter/rspec_spec.rb
127
+ - spec/ci/reporter/test_suite_spec.rb
128
+ - spec/ci/reporter/test_unit_spec.rb
129
+ - spec/ci/reporter/rake/rake_tasks_spec.rb