ci_reporter 1.2.4 → 1.3
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.
- data/History.txt +5 -0
- data/Rakefile +3 -2
- data/lib/ci/reporter/rake/rspec.rb +1 -1
- data/lib/ci/reporter/rake/test_unit.rb +1 -1
- data/lib/ci/reporter/rspec.rb +64 -14
- data/lib/ci/reporter/test_suite.rb +1 -0
- data/spec/ci/reporter/test_suite_spec.rb +23 -1
- metadata +2 -2
data/History.txt
CHANGED
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
== 1.3
|
|
2
|
+
|
|
3
|
+
- Fixed to be compatible with RSpec 0.9
|
|
4
|
+
- Failure location text now contains both the exception message and class name (in case the type and message attributes were truncated)
|
|
5
|
+
|
|
1
6
|
== 1.2.4
|
|
2
7
|
|
|
3
8
|
- Allow to report on RSpec specs when working with non-gem RSpec
|
data/Rakefile
CHANGED
|
@@ -4,7 +4,7 @@ require 'hoe'
|
|
|
4
4
|
MANIFEST = FileList["History.txt", "Manifest.txt", "README.txt", "LICENSE.txt", "Rakefile",
|
|
5
5
|
"lib/**/*.rb", "spec/**/*.rb", "tasks/**/*.rake"]
|
|
6
6
|
|
|
7
|
-
Hoe.new("ci_reporter", "1.
|
|
7
|
+
Hoe.new("ci_reporter", "1.3") do |p|
|
|
8
8
|
p.rubyforge_name = "caldersphere"
|
|
9
9
|
p.url = "http://caldersphere.rubyforge.org/ci_reporter"
|
|
10
10
|
p.author = "Nick Sieger"
|
|
@@ -23,7 +23,8 @@ Rake::Task['default'].send :instance_variable_set, "@prerequisites", FileList[]
|
|
|
23
23
|
task :default => :spec
|
|
24
24
|
|
|
25
25
|
Spec::Rake::SpecTask.new do |t|
|
|
26
|
-
t.spec_opts
|
|
26
|
+
t.spec_opts ||= []
|
|
27
|
+
t.spec_opts << "--diff" << "unified"
|
|
27
28
|
end
|
|
28
29
|
|
|
29
30
|
# Automated manifest
|
|
@@ -7,7 +7,7 @@ namespace :ci do
|
|
|
7
7
|
task :rspec do
|
|
8
8
|
rm_rf ENV["CI_REPORTS"] || "spec/reports"
|
|
9
9
|
ENV["RSPECOPTS"] ||= ""
|
|
10
|
-
ENV["RSPECOPTS"]
|
|
10
|
+
ENV["RSPECOPTS"] << [" --require", "#{File.dirname(__FILE__)}/rspec_loader.rb",
|
|
11
11
|
"--format", "CI::Reporter::RSpec"].join(" ")
|
|
12
12
|
end
|
|
13
13
|
end
|
|
@@ -7,7 +7,7 @@ namespace :ci do
|
|
|
7
7
|
task :testunit do
|
|
8
8
|
rm_rf ENV["CI_REPORTS"] || "test/reports"
|
|
9
9
|
ENV["TESTOPTS"] ||= ""
|
|
10
|
-
ENV["TESTOPTS"]
|
|
10
|
+
ENV["TESTOPTS"] << " #{File.dirname(__FILE__)}/test_unit_loader.rb"
|
|
11
11
|
end
|
|
12
12
|
end
|
|
13
13
|
end
|
data/lib/ci/reporter/rspec.rb
CHANGED
|
@@ -6,7 +6,7 @@ require 'ci/reporter/core'
|
|
|
6
6
|
begin
|
|
7
7
|
gem 'rspec'
|
|
8
8
|
rescue Gem::LoadError
|
|
9
|
-
# Needed for non-gem RSpec (e.g., reporting on RSpec's own specs);
|
|
9
|
+
# Needed for non-gem RSpec (e.g., reporting on RSpec's own specs);
|
|
10
10
|
# if spec isn't found, the next require will blow up
|
|
11
11
|
end
|
|
12
12
|
require 'spec'
|
|
@@ -35,7 +35,13 @@ module CI
|
|
|
35
35
|
# Custom +RSpec+ formatter used to hook into the spec runs and capture results.
|
|
36
36
|
class RSpec < Spec::Runner::Formatter::ProgressBarFormatter
|
|
37
37
|
def initialize(output, dry_run=false, colour=false, report_mgr=nil)
|
|
38
|
-
|
|
38
|
+
if respond_to? :dry_run=
|
|
39
|
+
super(output)
|
|
40
|
+
self.dry_run=dry_run
|
|
41
|
+
self.colour=colour
|
|
42
|
+
else
|
|
43
|
+
super(output, dry_run, colour)
|
|
44
|
+
end
|
|
39
45
|
@report_manager = report_mgr || ReportManager.new("spec")
|
|
40
46
|
@suite = nil
|
|
41
47
|
end
|
|
@@ -44,31 +50,52 @@ module CI
|
|
|
44
50
|
super
|
|
45
51
|
end
|
|
46
52
|
|
|
53
|
+
# Pre-0.9 hook
|
|
47
54
|
def add_context(name, first)
|
|
48
55
|
super
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
56
|
+
new_suite(name)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# Post-0.9 hook
|
|
60
|
+
def add_behaviour(name)
|
|
61
|
+
super
|
|
62
|
+
new_suite(name)
|
|
52
63
|
end
|
|
53
64
|
|
|
65
|
+
# Pre-0.9 hook
|
|
54
66
|
def spec_started(name)
|
|
55
67
|
super
|
|
56
|
-
|
|
57
|
-
@suite.testcases << spec
|
|
58
|
-
spec.start
|
|
68
|
+
case_started(name)
|
|
59
69
|
end
|
|
60
70
|
|
|
71
|
+
# Post-0.9 hook
|
|
72
|
+
def example_started(name)
|
|
73
|
+
super
|
|
74
|
+
case_started(name)
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
# Pre-0.9 hook
|
|
61
78
|
def spec_failed(name, counter, failure)
|
|
62
79
|
super
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
80
|
+
case_failed(name, counter, failure)
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
# Post-0.9 hook
|
|
84
|
+
def example_failed(name, counter, failure)
|
|
85
|
+
super
|
|
86
|
+
case_failed(name, counter, failure)
|
|
66
87
|
end
|
|
67
88
|
|
|
89
|
+
# Pre-0.9 hook
|
|
68
90
|
def spec_passed(name)
|
|
69
91
|
super
|
|
70
|
-
|
|
71
|
-
|
|
92
|
+
case_passed(name)
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
# Post-0.9 hook
|
|
96
|
+
def example_passed(name)
|
|
97
|
+
super
|
|
98
|
+
case_passed(name)
|
|
72
99
|
end
|
|
73
100
|
|
|
74
101
|
def start_dump
|
|
@@ -79,7 +106,7 @@ module CI
|
|
|
79
106
|
super
|
|
80
107
|
end
|
|
81
108
|
|
|
82
|
-
def dump_summary(duration,
|
|
109
|
+
def dump_summary(duration, example_count, failure_count)
|
|
83
110
|
super
|
|
84
111
|
write_report
|
|
85
112
|
end
|
|
@@ -89,6 +116,29 @@ module CI
|
|
|
89
116
|
@suite.finish
|
|
90
117
|
@report_manager.write_report(@suite)
|
|
91
118
|
end
|
|
119
|
+
|
|
120
|
+
def new_suite(name)
|
|
121
|
+
write_report if @suite
|
|
122
|
+
@suite = TestSuite.new name
|
|
123
|
+
@suite.start
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
def case_started(name)
|
|
127
|
+
spec = TestCase.new name
|
|
128
|
+
@suite.testcases << spec
|
|
129
|
+
spec.start
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
def case_failed(name, counter, failure)
|
|
133
|
+
spec = @suite.testcases.last
|
|
134
|
+
spec.finish
|
|
135
|
+
spec.failure = RSpecFailure.new(failure)
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
def case_passed(name)
|
|
139
|
+
spec = @suite.testcases.last
|
|
140
|
+
spec.finish
|
|
141
|
+
end
|
|
92
142
|
end
|
|
93
143
|
end
|
|
94
144
|
end
|
|
@@ -141,6 +141,7 @@ module CI
|
|
|
141
141
|
builder.testcase(attrs) do
|
|
142
142
|
if failure
|
|
143
143
|
builder.failure(:type => builder.trunc!(failure.name), :message => builder.trunc!(failure.message)) do
|
|
144
|
+
builder.text!(failure.message + " (#{failure.name})\n")
|
|
144
145
|
builder.text!(failure.location)
|
|
145
146
|
end
|
|
146
147
|
end
|
|
@@ -91,7 +91,29 @@ context "TestSuite xml" do
|
|
|
91
91
|
testcases = testsuite.elements.to_a("testcase")
|
|
92
92
|
testcases.length.should == 3
|
|
93
93
|
end
|
|
94
|
-
|
|
94
|
+
|
|
95
|
+
specify "should contain full exception type and message in location element" do
|
|
96
|
+
failure = mock("failure")
|
|
97
|
+
failure.stub!(:failure?).and_return true
|
|
98
|
+
failure.stub!(:error?).and_return false
|
|
99
|
+
failure.stub!(:name).and_return "failure"
|
|
100
|
+
failure.stub!(:message).and_return "There was a failure"
|
|
101
|
+
failure.stub!(:location).and_return @exception.backtrace.join("\n")
|
|
102
|
+
|
|
103
|
+
@suite.start
|
|
104
|
+
@suite.testcases << CI::Reporter::TestCase.new("example test")
|
|
105
|
+
@suite.testcases << CI::Reporter::TestCase.new("failure test")
|
|
106
|
+
@suite.testcases.last.failure = failure
|
|
107
|
+
@suite.finish
|
|
108
|
+
|
|
109
|
+
xml = @suite.to_xml
|
|
110
|
+
doc = REXML::Document.new(xml)
|
|
111
|
+
elem = doc.root.elements.to_a("/testsuite/testcase[@name='failure test']/failure").first
|
|
112
|
+
location = elem.texts.join
|
|
113
|
+
location.should =~ Regexp.new(failure.message)
|
|
114
|
+
location.should =~ Regexp.new(failure.name)
|
|
115
|
+
end
|
|
116
|
+
|
|
95
117
|
specify "should filter attributes properly for invalid characters" do
|
|
96
118
|
failure = mock("failure")
|
|
97
119
|
failure.stub!(:failure?).and_return true
|
metadata
CHANGED
|
@@ -3,8 +3,8 @@ rubygems_version: 0.9.2
|
|
|
3
3
|
specification_version: 1
|
|
4
4
|
name: ci_reporter
|
|
5
5
|
version: !ruby/object:Gem::Version
|
|
6
|
-
version: 1.
|
|
7
|
-
date: 2007-
|
|
6
|
+
version: "1.3"
|
|
7
|
+
date: 2007-05-17 00:00:00 -07:00
|
|
8
8
|
summary: CI::Reporter allows you to generate reams of XML for use with continuous integration systems.
|
|
9
9
|
require_paths:
|
|
10
10
|
- lib
|