ci_reporter 1.6.2 → 1.6.3
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +8 -0
- data/Manifest.txt +8 -7
- data/README.txt +4 -9
- data/Rakefile +37 -18
- data/lib/ci/reporter/cucumber.rb +56 -35
- data/lib/ci/reporter/rake/cucumber.rb +4 -2
- data/lib/ci/reporter/rake/rspec.rb +4 -2
- data/lib/ci/reporter/rake/test_unit.rb +4 -1
- data/lib/ci/reporter/rake/utils.rb +14 -0
- data/lib/ci/reporter/rspec.rb +75 -34
- data/lib/ci/reporter/test_suite.rb +0 -6
- data/lib/ci/reporter/version.rb +1 -1
- data/spec/ci/reporter/cucumber_spec.rb +86 -60
- data/spec/ci/reporter/rspec_spec.rb +4 -3
- data/spec/spec_helper.rb +5 -2
- metadata +95 -73
data/History.txt
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
== 1.6.3
|
2
|
+
|
3
|
+
- Thanks to yairgo and tylerkovacs for their assistance and prodding
|
4
|
+
for RSpec 2 support this release.
|
5
|
+
- GH #4: Updated for modern Cucumber (0.9.2 as of this writing)
|
6
|
+
- GH #6: Capture dynamically-named RSpec examples
|
7
|
+
- GH #7: RSpec 2.0.0 compatibility
|
8
|
+
|
1
9
|
== 1.6.2
|
2
10
|
|
3
11
|
- GH #1: Properly escape text in system-out and system-err tags (Matt Kanwisher)
|
data/Manifest.txt
CHANGED
@@ -6,23 +6,24 @@ Rakefile
|
|
6
6
|
stub.rake
|
7
7
|
lib/ci/reporter/core.rb
|
8
8
|
lib/ci/reporter/cucumber.rb
|
9
|
+
lib/ci/reporter/report_manager.rb
|
10
|
+
lib/ci/reporter/rspec.rb
|
11
|
+
lib/ci/reporter/test_suite.rb
|
12
|
+
lib/ci/reporter/test_unit.rb
|
13
|
+
lib/ci/reporter/version.rb
|
9
14
|
lib/ci/reporter/rake/cucumber.rb
|
10
15
|
lib/ci/reporter/rake/cucumber_loader.rb
|
11
16
|
lib/ci/reporter/rake/rspec.rb
|
12
17
|
lib/ci/reporter/rake/rspec_loader.rb
|
13
18
|
lib/ci/reporter/rake/test_unit.rb
|
14
19
|
lib/ci/reporter/rake/test_unit_loader.rb
|
15
|
-
lib/ci/reporter/
|
16
|
-
|
17
|
-
lib/ci/reporter/test_suite.rb
|
18
|
-
lib/ci/reporter/test_unit.rb
|
19
|
-
lib/ci/reporter/version.rb
|
20
|
+
lib/ci/reporter/rake/utils.rb
|
21
|
+
spec/spec_helper.rb
|
20
22
|
spec/ci/reporter/cucumber_spec.rb
|
21
23
|
spec/ci/reporter/output_capture_spec.rb
|
22
|
-
spec/ci/reporter/rake/rake_tasks_spec.rb
|
23
24
|
spec/ci/reporter/report_manager_spec.rb
|
24
25
|
spec/ci/reporter/rspec_spec.rb
|
25
26
|
spec/ci/reporter/test_suite_spec.rb
|
26
27
|
spec/ci/reporter/test_unit_spec.rb
|
27
|
-
spec/
|
28
|
+
spec/ci/reporter/rake/rake_tasks_spec.rb
|
28
29
|
tasks/ci_reporter.rake
|
data/README.txt
CHANGED
@@ -1,9 +1,5 @@
|
|
1
1
|
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.
|
2
2
|
|
3
|
-
== Dependencies
|
4
|
-
|
5
|
-
CI::Reporter has one required dependency on Builder, but since many will have a viable version of Builder via Rails' ActiveSupport gem, Builder is not a direct dependency of the project at the moment. Instead, ensure that you have either the +builder+ or +activesupport+ gem installed before continuing. CI::Reporter will raise an exception at runtime if it cannot locate Builder.
|
6
|
-
|
7
3
|
== Installation
|
8
4
|
|
9
5
|
CI::Reporter is available as a gem. To install the gem, use the usual gem command:
|
@@ -12,12 +8,11 @@ CI::Reporter is available as a gem. To install the gem, use the usual gem comman
|
|
12
8
|
|
13
9
|
== Usage
|
14
10
|
|
15
|
-
CI::Reporter works best with projects that use a +Rakefile+ along with the standard <code>Rake::TestTask</code> or <code>Spec::Rake::SpecTask</code> tasks for running tests or examples, respectively. In this fashion, it hooks into <code>Test::Unit</code> or +RSpec+ using environment variables recognized by these custom tasks to inject the CI::Reporter code into the test or spec runs. If you're using the Rails plugin, step 1 is unnecessary; skip to step 2.
|
11
|
+
CI::Reporter works best with projects that use a +Rakefile+ along with the standard <code>Rake::TestTask</code> or <code>Spec::Rake::SpecTask/RSpec::Core::RakeTask</code> tasks for running tests or examples, respectively. In this fashion, it hooks into <code>Test::Unit</code> or +RSpec+ using environment variables recognized by these custom tasks to inject the CI::Reporter code into the test or spec runs. If you're using the Rails plugin, step 1 is unnecessary; skip to step 2.
|
16
12
|
|
17
13
|
1. To use CI::Reporter, simply add the following lines to your Rakefile:
|
18
14
|
|
19
15
|
require 'rubygems'
|
20
|
-
gem 'ci_reporter'
|
21
16
|
require 'ci/reporter/rake/rspec' # use this if you're using RSpec
|
22
17
|
require 'ci/reporter/rake/cucumber' # use this if you're using Cucumber
|
23
18
|
require 'ci/reporter/rake/test_unit' # use this if you're using Test::Unit
|
@@ -49,7 +44,7 @@ If for some reason you can't use the above technique to inject CI::Reporter (e.g
|
|
49
44
|
|
50
45
|
ruby -r GEM_PATH/lib/ci/reporter/rake/cucumber_loader -S cucumber --format CI::Reporter::Cucumber
|
51
46
|
|
52
|
-
There's a bit of a chicken and egg problem because rubygems needs to be loaded before you can require any CI::Reporter files. If you cringe hard-coding a full path to a specific version of the gem, you can also copy the +
|
47
|
+
There's a bit of a chicken and egg problem because rubygems needs to be loaded before you can require any CI::Reporter files. If you cringe hard-coding a full path to a specific version of the gem, you can also copy the +cucumber_loader+ file into your project and require it directly -- the contents are version-agnostic and are not likely to change in future releases.
|
53
48
|
|
54
49
|
== Environment Variables
|
55
50
|
|
@@ -63,8 +58,8 @@ You can get the CI::Reporter source using Git, in any of the following ways:
|
|
63
58
|
git clone git://git.caldersphere.net/ci_reporter.git
|
64
59
|
git clone git://github.com/nicksieger/ci_reporter.git
|
65
60
|
|
66
|
-
You can also download a tarball of the latest CI::Reporter source at http://github.com/nicksieger/ci_reporter
|
61
|
+
You can also download a tarball of the latest CI::Reporter source at http://github.com/nicksieger/ci_reporter/.
|
67
62
|
|
68
63
|
== License
|
69
64
|
|
70
|
-
This software is released under an MIT license. For details, see the LICENSE.txt file included with the distribution. The software is copyright (c) 2006-
|
65
|
+
This software is released under an MIT license. For details, see the LICENSE.txt file included with the distribution. The software is copyright (c) 2006-2010 Nick Sieger <nicksieger@gmail.com>.
|
data/Rakefile
CHANGED
@@ -1,6 +1,3 @@
|
|
1
|
-
require 'spec/rake/spectask'
|
2
|
-
require 'spec/rake/verify_rcov'
|
3
|
-
|
4
1
|
MANIFEST = FileList["History.txt", "Manifest.txt", "README.txt", "LICENSE.txt", "Rakefile",
|
5
2
|
"*.rake", "lib/**/*.rb", "spec/**/*.rb", "tasks/**/*.rake"]
|
6
3
|
|
@@ -23,6 +20,12 @@ begin
|
|
23
20
|
end
|
24
21
|
hoe.spec.files = MANIFEST
|
25
22
|
hoe.spec.dependencies.delete_if { |dep| dep.name == "hoe" }
|
23
|
+
hoe.spec.rdoc_options += ["-SHN", "-f", "darkfish"]
|
24
|
+
|
25
|
+
task :gemspec do
|
26
|
+
File.open("#{hoe.name}.gemspec", "w") {|f| f << hoe.spec.to_ruby }
|
27
|
+
end
|
28
|
+
task :package => :gemspec
|
26
29
|
rescue LoadError
|
27
30
|
puts "You really need Hoe installed to be able to package this gem"
|
28
31
|
end
|
@@ -31,6 +34,7 @@ end
|
|
31
34
|
# !@#$ no easy way to empty the default list of prerequisites
|
32
35
|
# Leave my tasks alone, Hoe
|
33
36
|
%w(default spec rcov).each do |task|
|
37
|
+
next unless Rake::Task.task_defined?(task)
|
34
38
|
Rake::Task[task].prerequisites.clear
|
35
39
|
Rake::Task[task].actions.clear
|
36
40
|
end
|
@@ -42,21 +46,36 @@ else
|
|
42
46
|
task :default => :rcov
|
43
47
|
end
|
44
48
|
|
45
|
-
|
46
|
-
|
49
|
+
RSpecTask = begin
|
50
|
+
require 'rspec/core/rake_task'
|
51
|
+
@spec_bin = 'rspec'
|
52
|
+
RSpec::Core::RakeTask
|
53
|
+
rescue LoadError
|
54
|
+
require 'spec/rake/spectask'
|
55
|
+
@spec_bin = 'spec'
|
56
|
+
Spec::Rake::SpecTask
|
57
|
+
end
|
58
|
+
|
59
|
+
RSpecTask.new do |t|
|
47
60
|
end
|
48
61
|
|
49
|
-
|
50
|
-
t.rcov_opts
|
62
|
+
RSpecTask.new("spec:rcov") do |t|
|
63
|
+
t.rcov_opts = ['--exclude gems/*']
|
51
64
|
t.rcov = true
|
52
65
|
end
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
#
|
57
|
-
|
58
|
-
|
66
|
+
|
67
|
+
begin
|
68
|
+
require 'spec/rake/verify_rcov'
|
69
|
+
# so we don't confuse autotest
|
70
|
+
RCov::VerifyTask.new(:rcov) do |t|
|
71
|
+
# Can't get threshold up to 100 unless RSpec backwards compatibility
|
72
|
+
# code is dropped
|
73
|
+
t.threshold = 95
|
74
|
+
t.require_exact_threshold = false
|
75
|
+
end
|
76
|
+
rescue LoadError
|
59
77
|
end
|
78
|
+
|
60
79
|
task "spec:rcov" do
|
61
80
|
rm_f "Manifest.txt"
|
62
81
|
end
|
@@ -66,17 +85,17 @@ task :generate_output do
|
|
66
85
|
rm_rf "acceptance/reports"
|
67
86
|
ENV['CI_REPORTS'] = "acceptance/reports"
|
68
87
|
begin
|
69
|
-
`ruby -Ilib acceptance/test_unit_example_test.rb` rescue
|
70
|
-
`ruby -Ilib -S
|
71
|
-
`ruby -Ilib -rci/reporter/rake/cucumber_loader -S cucumber --format CI::Reporter::Cucumber acceptance/cucumber` rescue
|
88
|
+
`ruby -Ilib -rubygems -rci/reporter/rake/test_unit_loader acceptance/test_unit_example_test.rb` rescue puts "Warning: #{$!}"
|
89
|
+
`ruby -Ilib -rubygems -S #{@spec_bin} --require ci/reporter/rake/rspec_loader --format CI::Reporter::RSpec acceptance/rspec_example_spec.rb` rescue puts "Warning: #{$!}"
|
90
|
+
`ruby -Ilib -rubygems -rci/reporter/rake/cucumber_loader -S cucumber --format CI::Reporter::Cucumber acceptance/cucumber` rescue puts "Warning: #{$!}"
|
72
91
|
ensure
|
73
92
|
ENV.delete 'CI_REPORTS'
|
74
93
|
end
|
75
94
|
end
|
76
95
|
task :acceptance => :generate_output
|
77
96
|
|
78
|
-
|
79
|
-
t.
|
97
|
+
RSpecTask.new(:acceptance_spec) do |t|
|
98
|
+
t.pattern = FileList['acceptance/verification_spec.rb']
|
80
99
|
end
|
81
100
|
task :acceptance => :acceptance_spec
|
82
101
|
|
data/lib/ci/reporter/cucumber.rb
CHANGED
@@ -3,17 +3,10 @@
|
|
3
3
|
# software license details.
|
4
4
|
|
5
5
|
require 'ci/reporter/core'
|
6
|
-
|
6
|
+
require 'cucumber'
|
7
7
|
begin
|
8
|
-
require 'cucumber'
|
9
8
|
require 'cucumber/ast/visitor'
|
10
9
|
rescue LoadError
|
11
|
-
unless tried_gem
|
12
|
-
tried_gem = true
|
13
|
-
require 'rubygems'
|
14
|
-
gem 'cucumber'
|
15
|
-
retry
|
16
|
-
end
|
17
10
|
end
|
18
11
|
|
19
12
|
module CI
|
@@ -46,53 +39,81 @@ module CI
|
|
46
39
|
end
|
47
40
|
end
|
48
41
|
|
49
|
-
class Cucumber
|
50
|
-
|
51
|
-
attr_accessor :test_suite, :report_manager, :feature_name
|
42
|
+
class Cucumber
|
43
|
+
attr_accessor :report_manager, :test_suite, :name
|
52
44
|
|
53
45
|
def initialize(step_mother, io, options)
|
54
|
-
|
55
|
-
super(step_mother)
|
46
|
+
@report_manager = ReportManager.new("features")
|
56
47
|
end
|
57
48
|
|
58
|
-
def
|
59
|
-
self.
|
60
|
-
|
49
|
+
def before_feature(feature)
|
50
|
+
self.test_suite = TestSuite.new(@name)
|
51
|
+
test_suite.start
|
61
52
|
end
|
62
53
|
|
63
|
-
def
|
64
|
-
|
65
|
-
test_suite.
|
54
|
+
def after_feature(feature)
|
55
|
+
test_suite.name = @name
|
56
|
+
test_suite.finish
|
57
|
+
report_manager.write_report(@test_suite)
|
58
|
+
@test_suite = nil
|
59
|
+
end
|
66
60
|
|
67
|
-
|
61
|
+
def before_background(*args)
|
62
|
+
end
|
68
63
|
|
69
|
-
|
70
|
-
|
71
|
-
self.test_suite = nil
|
64
|
+
def after_background(*args)
|
65
|
+
end
|
72
66
|
|
73
|
-
|
67
|
+
def feature_name(keyword, name)
|
68
|
+
@name = (name || "Unnamed feature").split("\n").first
|
74
69
|
end
|
75
70
|
|
76
|
-
def
|
77
|
-
|
78
|
-
|
71
|
+
def scenario_name(keyword, name, *args)
|
72
|
+
@scenario = (name || "Unnamed scenario").split("\n").first
|
73
|
+
end
|
79
74
|
|
80
|
-
|
75
|
+
def before_steps(steps)
|
76
|
+
@test_case = TestCase.new(@scenario)
|
77
|
+
@test_case.start
|
78
|
+
end
|
81
79
|
|
82
|
-
|
80
|
+
def after_steps(steps)
|
81
|
+
@test_case.finish
|
83
82
|
|
84
|
-
case
|
83
|
+
case steps.status
|
85
84
|
when :pending, :undefined
|
86
|
-
test_case.name = "#{test_case.name} (PENDING)"
|
85
|
+
@test_case.name = "#{@test_case.name} (PENDING)"
|
87
86
|
when :skipped
|
88
|
-
test_case.name = "#{test_case.name} (SKIPPED)"
|
87
|
+
@test_case.name = "#{@test_case.name} (SKIPPED)"
|
89
88
|
when :failed
|
90
|
-
test_case.failures << CucumberFailure.new(
|
89
|
+
@test_case.failures << CucumberFailure.new(steps)
|
91
90
|
end
|
92
91
|
|
93
|
-
test_suite.testcases << test_case
|
92
|
+
test_suite.testcases << @test_case
|
93
|
+
@test_case = nil
|
94
|
+
end
|
94
95
|
|
95
|
-
|
96
|
+
def before_examples(*args)
|
97
|
+
@header_row = true
|
98
|
+
end
|
99
|
+
|
100
|
+
def after_examples(*args)
|
101
|
+
end
|
102
|
+
|
103
|
+
def before_table_row(table_row)
|
104
|
+
@test_case = TestCase.new("#@scenario (outline: #{table_row.name})")
|
105
|
+
@test_case.start
|
106
|
+
end
|
107
|
+
|
108
|
+
def after_table_row(table_row)
|
109
|
+
if @header_row
|
110
|
+
@header_row = false
|
111
|
+
return
|
112
|
+
end
|
113
|
+
@test_case.finish
|
114
|
+
@test_case.failures << CucumberFailure.new(table_row) if table_row.failed?
|
115
|
+
test_suite.testcases << @test_case
|
116
|
+
@test_case = nil
|
96
117
|
end
|
97
118
|
end
|
98
119
|
end
|
@@ -2,6 +2,8 @@
|
|
2
2
|
# See the file LICENSE.txt included with the distribution for
|
3
3
|
# software license details.
|
4
4
|
|
5
|
+
require File.expand_path('../utils', __FILE__)
|
6
|
+
|
5
7
|
namespace :ci do
|
6
8
|
namespace :setup do
|
7
9
|
task :cucumber_report_cleanup do
|
@@ -9,9 +11,9 @@ namespace :ci do
|
|
9
11
|
end
|
10
12
|
|
11
13
|
task :cucumber => :cucumber_report_cleanup do
|
12
|
-
|
14
|
+
cuke_opts = ["--require", CI::Reporter.maybe_quote_filename("#{File.dirname(__FILE__)}/cucumber_loader.rb"),
|
13
15
|
"--format", "CI::Reporter::Cucumber"].join(" ")
|
14
|
-
ENV["CUCUMBER_OPTS"] = "#{ENV['CUCUMBER_OPTS']} #{
|
16
|
+
ENV["CUCUMBER_OPTS"] = "#{ENV['CUCUMBER_OPTS']} #{cuke_opts}"
|
15
17
|
end
|
16
18
|
end
|
17
19
|
end
|
@@ -2,6 +2,8 @@
|
|
2
2
|
# See the file LICENSE.txt included with the distribution for
|
3
3
|
# software license details.
|
4
4
|
|
5
|
+
require File.expand_path('../utils', __FILE__)
|
6
|
+
|
5
7
|
namespace :ci do
|
6
8
|
namespace :setup do
|
7
9
|
task :spec_report_cleanup do
|
@@ -9,13 +11,13 @@ namespace :ci do
|
|
9
11
|
end
|
10
12
|
|
11
13
|
task :rspec => :spec_report_cleanup do
|
12
|
-
spec_opts = ["--require", "#{File.dirname(__FILE__)}/rspec_loader.rb",
|
14
|
+
spec_opts = ["--require", CI::Reporter.maybe_quote_filename("#{File.dirname(__FILE__)}/rspec_loader.rb"),
|
13
15
|
"--format", "CI::Reporter::RSpec"].join(" ")
|
14
16
|
ENV["SPEC_OPTS"] = "#{ENV['SPEC_OPTS']} #{spec_opts}"
|
15
17
|
end
|
16
18
|
|
17
19
|
task :rspecdoc => :spec_report_cleanup do
|
18
|
-
spec_opts = ["--require", "#{File.dirname(__FILE__)}/rspec_loader.rb",
|
20
|
+
spec_opts = ["--require", CI::Reporter.maybe_quote_filename("#{File.dirname(__FILE__)}/rspec_loader.rb"),
|
19
21
|
"--format", "CI::Reporter::RSpecDoc"].join(" ")
|
20
22
|
ENV["SPEC_OPTS"] = "#{ENV['SPEC_OPTS']} #{spec_opts}"
|
21
23
|
end
|
@@ -2,11 +2,14 @@
|
|
2
2
|
# See the file LICENSE.txt included with the distribution for
|
3
3
|
# software license details.
|
4
4
|
|
5
|
+
require File.expand_path('../utils', __FILE__)
|
6
|
+
|
5
7
|
namespace :ci do
|
6
8
|
namespace :setup do
|
7
9
|
task :testunit do
|
8
10
|
rm_rf ENV["CI_REPORTS"] || "test/reports"
|
9
|
-
|
11
|
+
test_loader = CI::Reporter.maybe_quote_filename "#{File.dirname(__FILE__)}/test_unit_loader.rb"
|
12
|
+
ENV["TESTOPTS"] = "#{ENV["TESTOPTS"]} #{test_loader}"
|
10
13
|
end
|
11
14
|
end
|
12
15
|
end
|
@@ -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
|
+
module CI
|
6
|
+
module Reporter
|
7
|
+
def self.maybe_quote_filename(fn)
|
8
|
+
if fn =~ /\s/
|
9
|
+
fn = %{"#{fn}"}
|
10
|
+
end
|
11
|
+
fn
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
data/lib/ci/reporter/rspec.rb
CHANGED
@@ -3,26 +3,36 @@
|
|
3
3
|
# software license details.
|
4
4
|
|
5
5
|
require 'ci/reporter/core'
|
6
|
-
tried_gem = false
|
7
|
-
begin
|
8
|
-
require 'spec'
|
9
|
-
require 'spec/runner/formatter/progress_bar_formatter'
|
10
|
-
require 'spec/runner/formatter/specdoc_formatter'
|
11
|
-
rescue LoadError
|
12
|
-
unless tried_gem
|
13
|
-
tried_gem = true
|
14
|
-
require 'rubygems'
|
15
|
-
gem 'rspec'
|
16
|
-
retry
|
17
|
-
end
|
18
|
-
end
|
19
6
|
|
20
7
|
module CI
|
21
8
|
module Reporter
|
9
|
+
module RSpecFormatters
|
10
|
+
begin
|
11
|
+
require 'rspec/core/formatters/base_formatter'
|
12
|
+
require 'rspec/core/formatters/progress_formatter'
|
13
|
+
require 'rspec/core/formatters/documentation_formatter'
|
14
|
+
BaseFormatter = ::RSpec::Core::Formatters::BaseFormatter
|
15
|
+
ProgressFormatter = ::RSpec::Core::Formatters::ProgressFormatter
|
16
|
+
DocFormatter = ::RSpec::Core::Formatters::DocumentationFormatter
|
17
|
+
rescue LoadError => first_error
|
18
|
+
begin
|
19
|
+
require 'spec/runner/formatter/progress_bar_formatter'
|
20
|
+
require 'spec/runner/formatter/specdoc_formatter'
|
21
|
+
BaseFormatter = ::Spec::Runner::Formatter::BaseFormatter
|
22
|
+
ProgressFormatter = ::Spec::Runner::Formatter::ProgressBarFormatter
|
23
|
+
DocFormatter = ::Spec::Runner::Formatter::SpecdocFormatter
|
24
|
+
rescue LoadError
|
25
|
+
raise first_error
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
22
30
|
# Wrapper around a <code>RSpec</code> error or failure to be used by the test suite to interpret results.
|
23
31
|
class RSpecFailure
|
32
|
+
attr_reader :exception
|
24
33
|
def initialize(failure)
|
25
34
|
@failure = failure
|
35
|
+
@exception = failure.exception
|
26
36
|
end
|
27
37
|
|
28
38
|
def failure?
|
@@ -30,21 +40,32 @@ module CI
|
|
30
40
|
end
|
31
41
|
|
32
42
|
def error?
|
33
|
-
|
43
|
+
!failure?
|
44
|
+
end
|
45
|
+
|
46
|
+
def name() exception.class.name end
|
47
|
+
def message() exception.message end
|
48
|
+
def location() (exception.backtrace || ["No backtrace available"]).join("\n") end
|
49
|
+
end
|
50
|
+
|
51
|
+
class RSpec2Failure < RSpecFailure
|
52
|
+
def initialize(example)
|
53
|
+
@example = example
|
54
|
+
@exception = @example.execution_result[:exception_encountered]
|
34
55
|
end
|
35
56
|
|
36
|
-
def
|
37
|
-
|
38
|
-
|
57
|
+
def failure?
|
58
|
+
exception.is_a?(::RSpec::Expectations::ExpectationNotMetError)
|
59
|
+
end
|
39
60
|
end
|
40
61
|
|
41
62
|
# Custom +RSpec+ formatter used to hook into the spec runs and capture results.
|
42
|
-
class RSpec <
|
63
|
+
class RSpec < RSpecFormatters::BaseFormatter
|
43
64
|
attr_accessor :report_manager
|
44
65
|
attr_accessor :formatter
|
45
66
|
def initialize(*args)
|
46
67
|
super
|
47
|
-
@formatter ||=
|
68
|
+
@formatter ||= RSpecFormatters::ProgressFormatter.new(*args)
|
48
69
|
@report_manager = ReportManager.new("spec")
|
49
70
|
@suite = nil
|
50
71
|
end
|
@@ -62,45 +83,53 @@ module CI
|
|
62
83
|
# Compatibility with rspec < 1.2.4
|
63
84
|
def add_example_group(example_group)
|
64
85
|
@formatter.add_example_group(example_group)
|
65
|
-
new_suite(example_group
|
86
|
+
new_suite(description_for(example_group))
|
66
87
|
end
|
67
88
|
|
68
89
|
# rspec >= 1.2.4
|
69
90
|
def example_group_started(example_group)
|
70
91
|
@formatter.example_group_started(example_group)
|
71
|
-
new_suite(example_group
|
92
|
+
new_suite(description_for(example_group))
|
72
93
|
end
|
73
94
|
|
74
|
-
def example_started(
|
75
|
-
@formatter.example_started(
|
76
|
-
|
77
|
-
spec = TestCase.new name
|
95
|
+
def example_started(name_or_example)
|
96
|
+
@formatter.example_started(name_or_example)
|
97
|
+
spec = TestCase.new
|
78
98
|
@suite.testcases << spec
|
79
99
|
spec.start
|
80
100
|
end
|
81
101
|
|
82
|
-
def example_failed(
|
83
|
-
@formatter.example_failed(
|
102
|
+
def example_failed(name_or_example, *rest)
|
103
|
+
@formatter.example_failed(name_or_example, *rest)
|
104
|
+
|
84
105
|
# In case we fail in before(:all)
|
85
|
-
if @suite.testcases.empty?
|
86
|
-
|
106
|
+
example_started(name_or_example) if @suite.testcases.empty?
|
107
|
+
|
108
|
+
if name_or_example.respond_to?(:execution_result) # RSpec 2
|
109
|
+
failure = RSpec2Failure.new(name_or_example)
|
110
|
+
else
|
111
|
+
failure = RSpecFailure.new(rest[1]) # example_failed(name, counter, failure) in RSpec 1
|
87
112
|
end
|
113
|
+
|
88
114
|
spec = @suite.testcases.last
|
89
115
|
spec.finish
|
90
|
-
spec.
|
116
|
+
spec.name = description_for(name_or_example)
|
117
|
+
spec.failures << failure
|
91
118
|
end
|
92
119
|
|
93
|
-
def example_passed(
|
94
|
-
@formatter.example_passed(
|
120
|
+
def example_passed(name_or_example)
|
121
|
+
@formatter.example_passed(name_or_example)
|
95
122
|
spec = @suite.testcases.last
|
96
123
|
spec.finish
|
124
|
+
spec.name = description_for(name_or_example)
|
97
125
|
end
|
98
126
|
|
99
127
|
def example_pending(*args)
|
100
128
|
@formatter.example_pending(*args)
|
129
|
+
name = description_for(args[0])
|
101
130
|
spec = @suite.testcases.last
|
102
131
|
spec.finish
|
103
|
-
spec.name = "#{
|
132
|
+
spec.name = "#{name} (PENDING)"
|
104
133
|
spec.skipped = true
|
105
134
|
end
|
106
135
|
|
@@ -126,6 +155,18 @@ module CI
|
|
126
155
|
end
|
127
156
|
|
128
157
|
private
|
158
|
+
def description_for(name_or_example)
|
159
|
+
if name_or_example.respond_to?(:full_description)
|
160
|
+
name_or_example.full_description
|
161
|
+
elsif name_or_example.respond_to?(:metadata)
|
162
|
+
name_or_example.metadata[:example_group][:full_description]
|
163
|
+
elsif name_or_example.respond_to?(:description)
|
164
|
+
name_or_example.description
|
165
|
+
else
|
166
|
+
"UNKNOWN"
|
167
|
+
end
|
168
|
+
end
|
169
|
+
|
129
170
|
def write_report
|
130
171
|
@suite.finish
|
131
172
|
@report_manager.write_report(@suite)
|
@@ -140,7 +181,7 @@ module CI
|
|
140
181
|
|
141
182
|
class RSpecDoc < RSpec
|
142
183
|
def initialize(*args)
|
143
|
-
@formatter =
|
184
|
+
@formatter = RSpecFormatters::DocFormatter.new(*args)
|
144
185
|
super
|
145
186
|
end
|
146
187
|
end
|
@@ -66,12 +66,6 @@ module CI
|
|
66
66
|
|
67
67
|
# Creates the xml builder instance used to create the report xml document.
|
68
68
|
def create_builder
|
69
|
-
begin
|
70
|
-
require 'rubygems'
|
71
|
-
gem 'builder'
|
72
|
-
rescue LoadError
|
73
|
-
end
|
74
|
-
|
75
69
|
require 'builder'
|
76
70
|
# :escape_attrs is obsolete in a newer version, but should do no harm
|
77
71
|
Builder::XmlMarkup.new(:indent => 2, :escape_attrs => true)
|
data/lib/ci/reporter/version.rb
CHANGED
@@ -73,54 +73,69 @@ describe "The Cucumber reporter" do
|
|
73
73
|
|
74
74
|
it "should record the feature name when a new feature is visited" do
|
75
75
|
cucumber = new_instance
|
76
|
-
cucumber.
|
77
|
-
cucumber.
|
76
|
+
cucumber.feature_name(nil, "Some feature name")
|
77
|
+
cucumber.name.should == "Some feature name"
|
78
78
|
end
|
79
79
|
|
80
80
|
it "should record only the first line of a feature name" do
|
81
81
|
cucumber = new_instance
|
82
|
-
cucumber.
|
83
|
-
cucumber.
|
82
|
+
cucumber.feature_name(nil, "Some feature name\nLonger description")
|
83
|
+
cucumber.name.should == "Some feature name"
|
84
84
|
end
|
85
85
|
|
86
|
-
|
86
|
+
context "applied to a feature" do
|
87
87
|
before(:each) do
|
88
88
|
@cucumber = new_instance
|
89
|
-
@cucumber.
|
89
|
+
@cucumber.feature_name(nil, "Demo feature")
|
90
90
|
|
91
|
-
@test_suite = mock("test_suite", :start => nil, :finish => nil)
|
91
|
+
@test_suite = mock("test_suite", :start => nil, :finish => nil, :name= => nil)
|
92
92
|
CI::Reporter::TestSuite.stub!(:new).and_return(@test_suite)
|
93
93
|
|
94
|
-
@
|
94
|
+
@feature = mock("feature")
|
95
95
|
|
96
96
|
@report_manager.stub!(:write_report)
|
97
97
|
end
|
98
98
|
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
@cucumber.visit_feature_element(@feature_element)
|
105
|
-
end
|
99
|
+
context "before" do
|
100
|
+
it "should create a new test suite" do
|
101
|
+
CI::Reporter::TestSuite.should_receive(:new).with(/Demo feature/)
|
102
|
+
@cucumber.before_feature(@feature)
|
103
|
+
end
|
106
104
|
|
107
|
-
|
108
|
-
|
109
|
-
|
105
|
+
it "should indicate that the test suite has started" do
|
106
|
+
@test_suite.should_receive(:start)
|
107
|
+
@cucumber.before_feature(@feature)
|
108
|
+
end
|
110
109
|
end
|
111
110
|
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
111
|
+
context "after" do
|
112
|
+
before :each do
|
113
|
+
@cucumber = new_instance
|
114
|
+
@cucumber.feature_name(nil, "Demo feature")
|
115
|
+
|
116
|
+
@test_suite = mock("test_suite", :start => nil, :finish => nil, :name= => nil)
|
117
|
+
CI::Reporter::TestSuite.stub!(:new).and_return(@test_suite)
|
118
|
+
|
119
|
+
@feature = mock("feature")
|
120
|
+
|
121
|
+
@report_manager.stub!(:write_report)
|
116
122
|
|
117
|
-
|
118
|
-
|
119
|
-
|
123
|
+
@cucumber.before_feature(@feature)
|
124
|
+
end
|
125
|
+
|
126
|
+
it "should indicate that the test suite has finished" do
|
127
|
+
@test_suite.should_receive(:finish)
|
128
|
+
@cucumber.after_feature(@feature)
|
129
|
+
end
|
130
|
+
|
131
|
+
it "should ask the report manager to write a report" do
|
132
|
+
@report_manager.should_receive(:write_report).with(@test_suite)
|
133
|
+
@cucumber.after_feature(@feature)
|
134
|
+
end
|
120
135
|
end
|
121
136
|
end
|
122
137
|
|
123
|
-
|
138
|
+
context "inside a scenario" do
|
124
139
|
before(:each) do
|
125
140
|
@testcases = []
|
126
141
|
|
@@ -132,48 +147,57 @@ describe "The Cucumber reporter" do
|
|
132
147
|
@test_case = mock("test_case", :start => nil, :finish => nil, :name => "Step Name")
|
133
148
|
CI::Reporter::TestCase.stub!(:new).and_return(@test_case)
|
134
149
|
|
135
|
-
@step = mock("step", :
|
150
|
+
@step = mock("step", :status => :passed)
|
136
151
|
@step.stub!(:name).and_return("Step Name")
|
137
152
|
end
|
138
153
|
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
154
|
+
context "before steps" do
|
155
|
+
it "should create a new test case" do
|
156
|
+
CI::Reporter::TestCase.should_receive(:new).with("Step Name")
|
157
|
+
@cucumber.scenario_name(nil, "Step Name")
|
158
|
+
@cucumber.before_steps(@step)
|
159
|
+
end
|
143
160
|
|
144
|
-
|
145
|
-
|
146
|
-
|
161
|
+
it "should indicate that the test case has started" do
|
162
|
+
@test_case.should_receive(:start)
|
163
|
+
@cucumber.before_steps(@step)
|
164
|
+
end
|
147
165
|
end
|
148
166
|
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
167
|
+
context "after steps" do
|
168
|
+
before :each do
|
169
|
+
@cucumber.before_steps(@step)
|
170
|
+
end
|
153
171
|
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
@testcases.first.should == @test_case
|
159
|
-
end
|
172
|
+
it "should indicate that the test case has finished" do
|
173
|
+
@test_case.should_receive(:finish)
|
174
|
+
@cucumber.after_steps(@step)
|
175
|
+
end
|
160
176
|
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
177
|
+
it "should add the test case to the suite's list of cases" do
|
178
|
+
@testcases.should be_empty
|
179
|
+
@cucumber.after_steps(@step)
|
180
|
+
@testcases.should_not be_empty
|
181
|
+
@testcases.first.should == @test_case
|
182
|
+
end
|
166
183
|
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
184
|
+
it "should alter the name of a test case that is pending to include '(PENDING)'" do
|
185
|
+
@step.stub!(:status).and_return(:pending)
|
186
|
+
@test_case.should_receive(:name=).with("Step Name (PENDING)")
|
187
|
+
@cucumber.after_steps(@step)
|
188
|
+
end
|
189
|
+
|
190
|
+
it "should alter the name of a test case that is undefined to include '(PENDING)'" do
|
191
|
+
@step.stub!(:status).and_return(:undefined)
|
192
|
+
@test_case.should_receive(:name=).with("Step Name (PENDING)")
|
193
|
+
@cucumber.after_steps(@step)
|
194
|
+
end
|
172
195
|
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
196
|
+
it "should alter the name of a test case that was skipped to include '(SKIPPED)'" do
|
197
|
+
@step.stub!(:status).and_return(:skipped)
|
198
|
+
@test_case.should_receive(:name=).with("Step Name (SKIPPED)")
|
199
|
+
@cucumber.after_steps(@step)
|
200
|
+
end
|
177
201
|
end
|
178
202
|
|
179
203
|
describe "that fails" do
|
@@ -183,18 +207,20 @@ describe "The Cucumber reporter" do
|
|
183
207
|
@failures = []
|
184
208
|
@test_case.stub!(:failures).and_return(@failures)
|
185
209
|
|
210
|
+
@cucumber.before_steps(@step)
|
211
|
+
|
186
212
|
@cucumber_failure = mock("cucumber_failure")
|
187
213
|
CI::Reporter::CucumberFailure.stub!(:new).and_return(@cucumber_failure)
|
188
214
|
end
|
189
215
|
|
190
216
|
it "should create a new cucumber failure with that step" do
|
191
217
|
CI::Reporter::CucumberFailure.should_receive(:new).with(@step)
|
192
|
-
@cucumber.
|
218
|
+
@cucumber.after_steps(@step)
|
193
219
|
end
|
194
220
|
|
195
221
|
it "should add the failure to the suite's list of failures" do
|
196
222
|
@failures.should be_empty
|
197
|
-
@cucumber.
|
223
|
+
@cucumber.after_steps(@step)
|
198
224
|
@failures.should_not be_empty
|
199
225
|
@failures.first.should == @cucumber_failure
|
200
226
|
end
|
@@ -10,10 +10,11 @@ describe "The RSpec reporter" do
|
|
10
10
|
@error = mock("error")
|
11
11
|
@error.stub!(:expectation_not_met?).and_return(false)
|
12
12
|
@error.stub!(:pending_fixed?).and_return(false)
|
13
|
+
@error.stub!(:exception).and_return(StandardError.new)
|
13
14
|
@report_mgr = mock("report manager")
|
14
15
|
@options = mock("options")
|
15
16
|
@args = [@options, StringIO.new("")]
|
16
|
-
@args.shift
|
17
|
+
@args.shift unless defined?(::Spec) && ::Spec::VERSION::MAJOR == 1 && ::Spec::VERSION::MINOR >= 1
|
17
18
|
@fmt = CI::Reporter::RSpec.new *@args
|
18
19
|
@fmt.report_manager = @report_mgr
|
19
20
|
@formatter = mock("formatter")
|
@@ -22,12 +23,12 @@ describe "The RSpec reporter" do
|
|
22
23
|
|
23
24
|
it "should use a progress bar formatter by default" do
|
24
25
|
fmt = CI::Reporter::RSpec.new *@args
|
25
|
-
fmt.formatter.should be_instance_of(
|
26
|
+
fmt.formatter.should be_instance_of(CI::Reporter::RSpecFormatters::ProgressFormatter)
|
26
27
|
end
|
27
28
|
|
28
29
|
it "should use a specdoc formatter for RSpecDoc" do
|
29
30
|
fmt = CI::Reporter::RSpecDoc.new *@args
|
30
|
-
fmt.formatter.should be_instance_of(
|
31
|
+
fmt.formatter.should be_instance_of(CI::Reporter::RSpecFormatters::DocFormatter)
|
31
32
|
end
|
32
33
|
|
33
34
|
it "should create a test suite with one success, one failure, and one pending" do
|
data/spec/spec_helper.rb
CHANGED
@@ -3,8 +3,11 @@
|
|
3
3
|
# software license details.
|
4
4
|
|
5
5
|
require 'rubygems'
|
6
|
-
|
7
|
-
require '
|
6
|
+
begin
|
7
|
+
require 'rspec'
|
8
|
+
rescue LoadError
|
9
|
+
require 'spec'
|
10
|
+
end
|
8
11
|
|
9
12
|
unless defined?(CI_REPORTER_LIB)
|
10
13
|
CI_REPORTER_LIB = File.expand_path(File.dirname(__FILE__) + "/../lib")
|
metadata
CHANGED
@@ -3,34 +3,50 @@ name: ci_reporter
|
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
version: 1.6.
|
6
|
+
- 1
|
7
|
+
- 6
|
8
|
+
- 3
|
9
|
+
version: 1.6.3
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
|
-
- Nick Sieger
|
12
|
+
- Nick Sieger
|
13
13
|
autorequire:
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-
|
17
|
+
date: 2010-10-12 00:00:00 -05:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
|
-
- !ruby/object:Gem::Dependency
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: builder
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
25
|
+
requirements:
|
26
|
+
- - ">="
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
segments:
|
29
|
+
- 2
|
30
|
+
- 1
|
31
|
+
- 2
|
32
|
+
version: 2.1.2
|
33
|
+
type: :runtime
|
34
|
+
version_requirements: *id001
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
name: rubyforge
|
37
|
+
prerelease: false
|
38
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ">="
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
segments:
|
44
|
+
- 2
|
45
|
+
- 0
|
46
|
+
- 4
|
47
|
+
version: 2.0.4
|
48
|
+
type: :development
|
49
|
+
version_requirements: *id002
|
34
50
|
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.
|
35
51
|
email: nick@nicksieger.com
|
36
52
|
executables: []
|
@@ -38,75 +54,81 @@ executables: []
|
|
38
54
|
extensions: []
|
39
55
|
|
40
56
|
extra_rdoc_files:
|
41
|
-
- History.txt
|
42
|
-
- Manifest.txt
|
43
|
-
- README.txt
|
44
|
-
- LICENSE.txt
|
57
|
+
- History.txt
|
58
|
+
- Manifest.txt
|
59
|
+
- README.txt
|
60
|
+
- LICENSE.txt
|
45
61
|
files:
|
46
|
-
- History.txt
|
47
|
-
- Manifest.txt
|
48
|
-
- README.txt
|
49
|
-
- LICENSE.txt
|
50
|
-
- Rakefile
|
51
|
-
- stub.rake
|
52
|
-
- lib/ci/reporter/core.rb
|
53
|
-
- lib/ci/reporter/cucumber.rb
|
54
|
-
- lib/ci/reporter/
|
55
|
-
- lib/ci/reporter/
|
56
|
-
- lib/ci/reporter/
|
57
|
-
- lib/ci/reporter/
|
58
|
-
- lib/ci/reporter/
|
59
|
-
- lib/ci/reporter/rake/
|
60
|
-
- lib/ci/reporter/
|
61
|
-
- lib/ci/reporter/rspec.rb
|
62
|
-
- lib/ci/reporter/
|
63
|
-
- lib/ci/reporter/test_unit.rb
|
64
|
-
- lib/ci/reporter/
|
65
|
-
-
|
66
|
-
- spec/
|
67
|
-
- spec/ci/reporter/
|
68
|
-
- spec/ci/reporter/
|
69
|
-
- spec/ci/reporter/
|
70
|
-
- spec/ci/reporter/
|
71
|
-
- spec/ci/reporter/
|
72
|
-
- spec/
|
73
|
-
-
|
62
|
+
- History.txt
|
63
|
+
- Manifest.txt
|
64
|
+
- README.txt
|
65
|
+
- LICENSE.txt
|
66
|
+
- Rakefile
|
67
|
+
- stub.rake
|
68
|
+
- lib/ci/reporter/core.rb
|
69
|
+
- lib/ci/reporter/cucumber.rb
|
70
|
+
- lib/ci/reporter/report_manager.rb
|
71
|
+
- lib/ci/reporter/rspec.rb
|
72
|
+
- lib/ci/reporter/test_suite.rb
|
73
|
+
- lib/ci/reporter/test_unit.rb
|
74
|
+
- lib/ci/reporter/version.rb
|
75
|
+
- lib/ci/reporter/rake/cucumber.rb
|
76
|
+
- lib/ci/reporter/rake/cucumber_loader.rb
|
77
|
+
- lib/ci/reporter/rake/rspec.rb
|
78
|
+
- lib/ci/reporter/rake/rspec_loader.rb
|
79
|
+
- lib/ci/reporter/rake/test_unit.rb
|
80
|
+
- lib/ci/reporter/rake/test_unit_loader.rb
|
81
|
+
- lib/ci/reporter/rake/utils.rb
|
82
|
+
- spec/spec_helper.rb
|
83
|
+
- spec/ci/reporter/cucumber_spec.rb
|
84
|
+
- spec/ci/reporter/output_capture_spec.rb
|
85
|
+
- spec/ci/reporter/report_manager_spec.rb
|
86
|
+
- spec/ci/reporter/rspec_spec.rb
|
87
|
+
- spec/ci/reporter/test_suite_spec.rb
|
88
|
+
- spec/ci/reporter/test_unit_spec.rb
|
89
|
+
- spec/ci/reporter/rake/rake_tasks_spec.rb
|
90
|
+
- tasks/ci_reporter.rake
|
74
91
|
has_rdoc: true
|
75
92
|
homepage: http://caldersphere.rubyforge.org/ci_reporter
|
76
93
|
licenses: []
|
77
94
|
|
78
95
|
post_install_message:
|
79
96
|
rdoc_options:
|
80
|
-
- --main
|
81
|
-
- README.txt
|
97
|
+
- --main
|
98
|
+
- README.txt
|
99
|
+
- -SHN
|
100
|
+
- -f
|
101
|
+
- darkfish
|
82
102
|
require_paths:
|
83
|
-
- lib
|
103
|
+
- lib
|
84
104
|
required_ruby_version: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
85
106
|
requirements:
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
107
|
+
- - ">="
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
segments:
|
110
|
+
- 0
|
111
|
+
version: "0"
|
91
112
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
92
114
|
requirements:
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
segments:
|
118
|
+
- 0
|
119
|
+
version: "0"
|
98
120
|
requirements: []
|
99
121
|
|
100
122
|
rubyforge_project: caldersphere
|
101
|
-
rubygems_version: 1.3.
|
123
|
+
rubygems_version: 1.3.7
|
102
124
|
signing_key:
|
103
125
|
specification_version: 3
|
104
126
|
summary: CI::Reporter allows you to generate reams of XML for use with continuous integration systems.
|
105
127
|
test_files:
|
106
|
-
- spec/ci/reporter/cucumber_spec.rb
|
107
|
-
- spec/ci/reporter/output_capture_spec.rb
|
108
|
-
- spec/ci/reporter/
|
109
|
-
- spec/ci/reporter/
|
110
|
-
- spec/ci/reporter/
|
111
|
-
- spec/ci/reporter/
|
112
|
-
- spec/ci/reporter/
|
128
|
+
- spec/ci/reporter/cucumber_spec.rb
|
129
|
+
- spec/ci/reporter/output_capture_spec.rb
|
130
|
+
- spec/ci/reporter/report_manager_spec.rb
|
131
|
+
- spec/ci/reporter/rspec_spec.rb
|
132
|
+
- spec/ci/reporter/test_suite_spec.rb
|
133
|
+
- spec/ci/reporter/test_unit_spec.rb
|
134
|
+
- spec/ci/reporter/rake/rake_tasks_spec.rb
|