stopdropandrew_ci_reporter 1.7.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +166 -0
- data/LICENSE.txt +21 -0
- data/Manifest.txt +32 -0
- data/README.rdoc +67 -0
- data/Rakefile +120 -0
- data/lib/ci/reporter/core.rb +6 -0
- data/lib/ci/reporter/cucumber.rb +125 -0
- data/lib/ci/reporter/minitest.rb +224 -0
- data/lib/ci/reporter/rake/cucumber.rb +19 -0
- data/lib/ci/reporter/rake/cucumber_loader.rb +6 -0
- data/lib/ci/reporter/rake/minitest.rb +15 -0
- data/lib/ci/reporter/rake/minitest_loader.rb +9 -0
- data/lib/ci/reporter/rake/rspec.rb +31 -0
- data/lib/ci/reporter/rake/rspec_loader.rb +6 -0
- data/lib/ci/reporter/rake/test_unit.rb +15 -0
- data/lib/ci/reporter/rake/test_unit_loader.rb +36 -0
- data/lib/ci/reporter/rake/utils.rb +14 -0
- data/lib/ci/reporter/report_manager.rb +63 -0
- data/lib/ci/reporter/rspec.rb +227 -0
- data/lib/ci/reporter/test_suite.rb +156 -0
- data/lib/ci/reporter/test_unit.rb +143 -0
- data/lib/ci/reporter/version.rb +11 -0
- data/spec/ci/reporter/cucumber_spec.rb +230 -0
- data/spec/ci/reporter/output_capture_spec.rb +57 -0
- data/spec/ci/reporter/rake/rake_tasks_spec.rb +105 -0
- data/spec/ci/reporter/report_manager_spec.rb +62 -0
- data/spec/ci/reporter/rspec_spec.rb +152 -0
- data/spec/ci/reporter/test_suite_spec.rb +160 -0
- data/spec/ci/reporter/test_unit_spec.rb +152 -0
- data/spec/spec_helper.rb +23 -0
- data/stub.rake +15 -0
- data/tasks/ci_reporter.rake +20 -0
- metadata +173 -0
data/History.txt
ADDED
@@ -0,0 +1,166 @@
|
|
1
|
+
== 1.7.0 (01/28/11)
|
2
|
+
|
3
|
+
- #39, #49: Minitest support (thanks Alexander Shcherbinin)!
|
4
|
+
- #14, #44: fix remaining 1.9 issues
|
5
|
+
|
6
|
+
== 1.6.9 (12/14/11)
|
7
|
+
|
8
|
+
- #49: fix nil to_xs with CI_CAPTURE=off (thanks Sean Walbran)
|
9
|
+
|
10
|
+
== 1.6.8 (12/13/11)
|
11
|
+
|
12
|
+
- #47: Fix regression - don't pull test/unit in unnecessarily
|
13
|
+
|
14
|
+
== 1.6.7 (12/13/11)
|
15
|
+
|
16
|
+
- Add support for JUnit skipped and error tags (thanks Jørgen Tjernø)
|
17
|
+
|
18
|
+
== 1.6.6 (12/06/11)
|
19
|
+
|
20
|
+
- added code and spec to shorten filenames that will cause
|
21
|
+
Errno::ENAMETOOLONG
|
22
|
+
- RSpec 2.2.1 compatability
|
23
|
+
|
24
|
+
== 1.6.5 (06/14/11)
|
25
|
+
|
26
|
+
- Works with RSpec up to 2.6.x
|
27
|
+
- GH #31: Better output formatting for RSpec 2 (Michael Giambalvo)
|
28
|
+
- Better ruby-test/TestUnit version support (amfranz)
|
29
|
+
- Prevent XML files from being overwritten (dpree)
|
30
|
+
|
31
|
+
== 1.6.4 (12/21/10)
|
32
|
+
|
33
|
+
- RSpec 2.2+ support (thanks emi)
|
34
|
+
|
35
|
+
== 1.6.3
|
36
|
+
|
37
|
+
- Thanks to yairgo and tylerkovacs for their assistance and prodding
|
38
|
+
for RSpec 2 support this release.
|
39
|
+
- GH #4: Updated for modern Cucumber (0.9.2 as of this writing)
|
40
|
+
- GH #6: Capture dynamically-named RSpec examples
|
41
|
+
- GH #7: RSpec 2.0.0 compatibility
|
42
|
+
|
43
|
+
== 1.6.2
|
44
|
+
|
45
|
+
- GH #1: Properly escape text in system-out and system-err tags (Matt Kanwisher)
|
46
|
+
- GH #2: Report rspec before(:all) failures (Edgars Beigarts)
|
47
|
+
- GH #3: Support for Omissions and Pending Tests from Test::Unit 2.0.x (Sam Hendley)
|
48
|
+
|
49
|
+
== 1.6.1
|
50
|
+
|
51
|
+
- Add 'skipped' flag for pending RSpec examples (Aaron Unger)
|
52
|
+
|
53
|
+
== 1.6.0
|
54
|
+
|
55
|
+
- Add support for Cucumber (tested against 0.3.0 - 0.3.2); (Graeme Mathieson)
|
56
|
+
|
57
|
+
== 1.5.3
|
58
|
+
|
59
|
+
- Compatibility with latest RSpec (1.2.4); (Paul Boone)
|
60
|
+
|
61
|
+
== 1.5.2
|
62
|
+
|
63
|
+
- Compatibility with latest RSpec (1.1.11 or so); use example
|
64
|
+
description method if available
|
65
|
+
- Remove dependency on rubygems when requiring builder (rescue
|
66
|
+
LoadError) (Jari Bakken)
|
67
|
+
- Source repository moved to github/git.caldersphere.net
|
68
|
+
|
69
|
+
== 1.5.1
|
70
|
+
|
71
|
+
- Fix silly load-path error that some had been seeing
|
72
|
+
|
73
|
+
== 1.5
|
74
|
+
|
75
|
+
- Support for RSpec 1.1.1 example groups (which broke ci_reporter 1.4)
|
76
|
+
- Change internal model to delegation instead of inheritance, allowing
|
77
|
+
ci_reporter to wrap different output formatters
|
78
|
+
- Add 'ci:setup:rspecdoc' task to output specdoc format instead of
|
79
|
+
progress
|
80
|
+
- Add support for pending examples; they will be listed in the report
|
81
|
+
XML as successful, but the name will have a '(PENDING)' tag appended
|
82
|
+
- Support for RSpec < 0.9 removed as promised; use 1.4 if you still
|
83
|
+
need to use an older version of RSpec
|
84
|
+
|
85
|
+
== 1.4
|
86
|
+
|
87
|
+
- Test::Unit tests that fail in multiple places (setup, test method,
|
88
|
+
and teardown) are now tracked (marcog)
|
89
|
+
- Explicit dependency requirement on Builder (>= 2.1.2)
|
90
|
+
- Use of RSpec < 0.9 is now deprecated; support will probably
|
91
|
+
disappear in the next version
|
92
|
+
|
93
|
+
== 1.3.5
|
94
|
+
|
95
|
+
- Change way we append to environment variables to appease windows
|
96
|
+
(Tracker #13998, Adam Anderson)
|
97
|
+
|
98
|
+
== 1.3.4
|
99
|
+
|
100
|
+
- Call #to_s on the object passed in as the test suite name;
|
101
|
+
compatibility fix for RSpec trunk which passes a
|
102
|
+
Spec::DSL::Description instead of a string
|
103
|
+
- Fix broken spec due to pending feature introduced in recent RSpec
|
104
|
+
- Fix compatibility for JRuby
|
105
|
+
- Add stub.rake file as another way to wrap existing Rakefile, with
|
106
|
+
note in README
|
107
|
+
|
108
|
+
== 1.3.3
|
109
|
+
|
110
|
+
- Use SPEC_OPTS instead of RSPECOPTS (Aslak Hellesøy)
|
111
|
+
- Add assertions attribute to individual test cases (Tracker #11563,
|
112
|
+
Andy Sipe)
|
113
|
+
|
114
|
+
== 1.3.2
|
115
|
+
|
116
|
+
- Fix bug trying to modify frozen environment strings
|
117
|
+
- Upgrade all specs to RSpec 1.0 style
|
118
|
+
- Add specs for rake tasks
|
119
|
+
|
120
|
+
== 1.3.1
|
121
|
+
|
122
|
+
- Fixed to be compatible with RSpec 1.0.x (added fourth parameter to
|
123
|
+
Formatter#dump_summary)
|
124
|
+
|
125
|
+
== 1.3
|
126
|
+
|
127
|
+
- Fixed to be compatible with RSpec 0.9
|
128
|
+
- Failure location text now contains both the exception message and
|
129
|
+
class name (in case the type and message attributes were truncated)
|
130
|
+
|
131
|
+
== 1.2.4
|
132
|
+
|
133
|
+
- Allow to report on RSpec specs when working with non-gem RSpec
|
134
|
+
- Note: CI::Reporter is only compatible with RSpec up to 0.8.2
|
135
|
+
|
136
|
+
== 1.2.3
|
137
|
+
|
138
|
+
- Append to TESTOPTS and RSPECOPTS environment variables (Bret
|
139
|
+
Pettichord) so that other apps can put values in them as well
|
140
|
+
|
141
|
+
== 1.2.2
|
142
|
+
|
143
|
+
- Responds to environment variable CI_CAPTURE: if set to "off",
|
144
|
+
stdout/stderr capture will be disabled.
|
145
|
+
|
146
|
+
== 1.2.1
|
147
|
+
|
148
|
+
- Add license and copyright information (finally)
|
149
|
+
|
150
|
+
== 1.2
|
151
|
+
|
152
|
+
- Capture standard output and standard error during each individual
|
153
|
+
test suite and include in the XML file in system-out and system-err
|
154
|
+
elements, respectively
|
155
|
+
(Tracker#9054[http://rubyforge.org/tracker/index.php?func=detail&aid=9054&group_id=2857&atid=11007])
|
156
|
+
|
157
|
+
== 1.1
|
158
|
+
|
159
|
+
- Add +assertions+ attribute to the +testsuite+ element that will
|
160
|
+
contain per-suite assertion counts when used with Test::Unit. Not
|
161
|
+
useful with applications that read Ant/JUnit XML, but custom
|
162
|
+
applications may wish to access it.
|
163
|
+
|
164
|
+
== 1.0
|
165
|
+
|
166
|
+
- Initial Release.
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
# Copyright (c) 2006-2012 Nick Sieger <nicksieger@gmail.com>
|
2
|
+
#
|
3
|
+
# Permission is hereby granted, free of charge, to any person
|
4
|
+
# obtaining a copy of this software and associated documentation files
|
5
|
+
# (the "Software"), to deal in the Software without restriction,
|
6
|
+
# including without limitation the rights to use, copy, modify, merge,
|
7
|
+
# publish, distribute, sublicense, and/or sell copies of the Software,
|
8
|
+
# and to permit persons to whom the Software is furnished to do so,
|
9
|
+
# subject to the following conditions:
|
10
|
+
#
|
11
|
+
# The above copyright notice and this permission notice shall be
|
12
|
+
# included in all copies or substantial portions of the Software.
|
13
|
+
#
|
14
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
|
18
|
+
# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
19
|
+
# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
20
|
+
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
|
+
# SOFTWARE.
|
data/Manifest.txt
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
History.txt
|
2
|
+
LICENSE.txt
|
3
|
+
Manifest.txt
|
4
|
+
README.rdoc
|
5
|
+
Rakefile
|
6
|
+
lib/ci/reporter/core.rb
|
7
|
+
lib/ci/reporter/cucumber.rb
|
8
|
+
lib/ci/reporter/minitest.rb
|
9
|
+
lib/ci/reporter/rake/cucumber.rb
|
10
|
+
lib/ci/reporter/rake/cucumber_loader.rb
|
11
|
+
lib/ci/reporter/rake/minitest.rb
|
12
|
+
lib/ci/reporter/rake/minitest_loader.rb
|
13
|
+
lib/ci/reporter/rake/rspec.rb
|
14
|
+
lib/ci/reporter/rake/rspec_loader.rb
|
15
|
+
lib/ci/reporter/rake/test_unit.rb
|
16
|
+
lib/ci/reporter/rake/test_unit_loader.rb
|
17
|
+
lib/ci/reporter/rake/utils.rb
|
18
|
+
lib/ci/reporter/report_manager.rb
|
19
|
+
lib/ci/reporter/rspec.rb
|
20
|
+
lib/ci/reporter/test_suite.rb
|
21
|
+
lib/ci/reporter/test_unit.rb
|
22
|
+
lib/ci/reporter/version.rb
|
23
|
+
spec/ci/reporter/cucumber_spec.rb
|
24
|
+
spec/ci/reporter/output_capture_spec.rb
|
25
|
+
spec/ci/reporter/rake/rake_tasks_spec.rb
|
26
|
+
spec/ci/reporter/report_manager_spec.rb
|
27
|
+
spec/ci/reporter/rspec_spec.rb
|
28
|
+
spec/ci/reporter/test_suite_spec.rb
|
29
|
+
spec/ci/reporter/test_unit_spec.rb
|
30
|
+
spec/spec_helper.rb
|
31
|
+
stub.rake
|
32
|
+
tasks/ci_reporter.rake
|
data/README.rdoc
ADDED
@@ -0,0 +1,67 @@
|
|
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
|
+
|
3
|
+
== Installation
|
4
|
+
|
5
|
+
CI::Reporter is available as a gem. To install the gem, use the usual gem command:
|
6
|
+
|
7
|
+
gem install ci_reporter
|
8
|
+
|
9
|
+
== Usage
|
10
|
+
|
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.
|
12
|
+
|
13
|
+
1. To use CI::Reporter, simply add the following lines to your Rakefile:
|
14
|
+
|
15
|
+
require 'rubygems'
|
16
|
+
require 'ci/reporter/rake/rspec' # use this if you're using RSpec
|
17
|
+
require 'ci/reporter/rake/cucumber' # use this if you're using Cucumber
|
18
|
+
require 'ci/reporter/rake/test_unit' # use this if you're using Test::Unit
|
19
|
+
require 'ci/reporter/rake/minitest' # use this if you're using MiniTest::Unit
|
20
|
+
|
21
|
+
2. Next, either modify your Rakefile to make the <code>ci:setup:rspec</code>, <code>ci:setup:cucumber</code> or <code>ci:setup:testunit</code> task a dependency of your test tasks, or include them on the Rake command-line before the name of the task that runs the tests or specs.
|
22
|
+
|
23
|
+
rake ci:setup:testunit test
|
24
|
+
|
25
|
+
Report files are written, by default, to the <code>test/reports</code>, <code>features/reports</code> or <code>spec/reports</code> subdirectory of your project. If you wish to customize the location, simply set the environment variable CI_REPORTS (either in the environment, on the Rake command line, or in your Rakefile) to the location where they should go.
|
26
|
+
|
27
|
+
== Advanced Usage
|
28
|
+
|
29
|
+
If you don't have control over the Rakefile or don't want to modify it, CI::Reporter has a substitute rake file that you can specify on the command-line. It assumes that the main project rake file is called +Rakefile+ and lives in the current directory. Run like so:
|
30
|
+
|
31
|
+
rake -f GEM_PATH/stub.rake ci:setup:testunit test
|
32
|
+
rake -f GEM_PATH/stub.rake ci:setup:minitest test
|
33
|
+
rake -f GEM_PATH/stub.rake ci:setup:rspec spec
|
34
|
+
rake -f GEM_PATH/stub.rake ci:setup:cucumber features
|
35
|
+
|
36
|
+
If for some reason you can't use the above technique to inject CI::Reporter (e.g., you're not using Rake), you'll have to do one of these:
|
37
|
+
|
38
|
+
1. If you're using <code>Test::Unit</code>, ensure the <code>ci/reporter/rake/test_unit_loader.rb</code> file is loaded or required at some point before the tests are run.
|
39
|
+
|
40
|
+
2. If you're using +RSpec+, you'll need to pass the following arguments to the +spec+ command:
|
41
|
+
|
42
|
+
--require GEM_PATH/lib/ci/reporter/rake/rspec_loader
|
43
|
+
--format CI::Reporter::RSpec
|
44
|
+
|
45
|
+
3. If you're using Cucumber, you'll need to cheat slightly so that Cucumber's step definition autoloading will still work. Instead of calling the +cucumber+ script directly, run:
|
46
|
+
|
47
|
+
ruby -r GEM_PATH/lib/ci/reporter/rake/cucumber_loader -S cucumber --format CI::Reporter::Cucumber
|
48
|
+
|
49
|
+
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.
|
50
|
+
|
51
|
+
== Environment Variables
|
52
|
+
|
53
|
+
* +CI_REPORTS+: if set, points to a directory where report files will be written.
|
54
|
+
* +CI_CAPTURE+: if set to value "off", stdout/stderr capture will be disabled.
|
55
|
+
|
56
|
+
== Source
|
57
|
+
|
58
|
+
You can get the CI::Reporter source using Git, in any of the following ways:
|
59
|
+
|
60
|
+
git clone git://git.caldersphere.net/ci_reporter.git
|
61
|
+
git clone git://github.com/nicksieger/ci_reporter.git
|
62
|
+
|
63
|
+
You can also download a tarball of the latest CI::Reporter source at http://github.com/nicksieger/ci_reporter/.
|
64
|
+
|
65
|
+
== License
|
66
|
+
|
67
|
+
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
ADDED
@@ -0,0 +1,120 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright (c) 2006-2012 Nick Sieger <nicksieger@gmail.com>
|
3
|
+
# See the file LICENSE.txt included with the distribution for
|
4
|
+
# software license details.
|
5
|
+
#++
|
6
|
+
|
7
|
+
require 'bundler/setup'
|
8
|
+
|
9
|
+
MANIFEST = FileList["History.txt", "Manifest.txt", "README.rdoc", "LICENSE.txt", "Rakefile",
|
10
|
+
"*.rake", "lib/**/*.rb", "spec/**/*.rb", "tasks/**/*.rake"]
|
11
|
+
|
12
|
+
begin
|
13
|
+
File.open("Manifest.txt", "w") {|f| MANIFEST.sort.each {|n| f << "#{n}\n"} }
|
14
|
+
require 'hoe'
|
15
|
+
Hoe.plugin :rubyforge
|
16
|
+
require File.dirname(__FILE__) + '/lib/ci/reporter/version'
|
17
|
+
hoe = Hoe.spec("ci_reporter") do |p|
|
18
|
+
p.version = CI::Reporter::VERSION
|
19
|
+
p.rubyforge_name = "caldersphere"
|
20
|
+
p.readme_file = "README.rdoc"
|
21
|
+
p.url = "http://caldersphere.rubyforge.org/ci_reporter"
|
22
|
+
p.author = "Nick Sieger"
|
23
|
+
p.email = "nick@nicksieger.com"
|
24
|
+
p.readme_file = 'README.rdoc'
|
25
|
+
p.summary = "CI::Reporter allows you to generate reams of XML for use with continuous integration systems."
|
26
|
+
p.changes = p.paragraphs_of('History.txt', 0..1).join("\n\n")
|
27
|
+
p.description = p.paragraphs_of('README.rdoc', 0...1).join("\n\n")
|
28
|
+
p.extra_rdoc_files += ["README.rdoc"]
|
29
|
+
p.test_globs = ["spec/**/*_spec.rb"]
|
30
|
+
p.extra_deps << ['builder', ">= 2.1.2"]
|
31
|
+
end
|
32
|
+
hoe.spec.files = MANIFEST
|
33
|
+
hoe.spec.rdoc_options += ["-SHN", "-f", "darkfish"]
|
34
|
+
|
35
|
+
task :gemspec do
|
36
|
+
File.open("#{hoe.name}.gemspec", "w") {|f| f << hoe.spec.to_ruby }
|
37
|
+
end
|
38
|
+
task :package => :gemspec
|
39
|
+
rescue LoadError
|
40
|
+
puts "You really need Hoe installed to be able to package this gem"
|
41
|
+
end
|
42
|
+
|
43
|
+
# Hoe insists on setting task :default => :test
|
44
|
+
# !@#$ no easy way to empty the default list of prerequisites
|
45
|
+
# Leave my tasks alone, Hoe
|
46
|
+
%w(default spec rcov).each do |task|
|
47
|
+
next unless Rake::Task.task_defined?(task)
|
48
|
+
Rake::Task[task].prerequisites.clear
|
49
|
+
Rake::Task[task].actions.clear
|
50
|
+
end
|
51
|
+
|
52
|
+
# RCov only on 1.8
|
53
|
+
if defined?(RUBY_ENGINE)
|
54
|
+
task :default => :spec
|
55
|
+
else
|
56
|
+
task :default => :rcov
|
57
|
+
end
|
58
|
+
|
59
|
+
RSpecTask = begin
|
60
|
+
require 'rspec/core/rake_task'
|
61
|
+
@spec_bin = 'rspec'
|
62
|
+
RSpec::Core::RakeTask
|
63
|
+
rescue LoadError
|
64
|
+
require 'spec/rake/spectask'
|
65
|
+
@spec_bin = 'spec'
|
66
|
+
Spec::Rake::SpecTask
|
67
|
+
end
|
68
|
+
|
69
|
+
RSpecTask.new do |t|
|
70
|
+
t.rspec_opts = "--color"
|
71
|
+
end
|
72
|
+
|
73
|
+
RSpecTask.new("spec:rcov") do |t|
|
74
|
+
t.rcov_opts = ['--exclude gems/*']
|
75
|
+
t.rcov = true
|
76
|
+
end
|
77
|
+
|
78
|
+
begin
|
79
|
+
require 'spec/rake/verify_rcov'
|
80
|
+
# so we don't confuse autotest
|
81
|
+
RCov::VerifyTask.new(:rcov) do |t|
|
82
|
+
# Can't get threshold up to 100 unless RSpec backwards compatibility
|
83
|
+
# code is dropped
|
84
|
+
t.threshold = 95
|
85
|
+
t.require_exact_threshold = false
|
86
|
+
end
|
87
|
+
rescue LoadError
|
88
|
+
end
|
89
|
+
|
90
|
+
task :rcov => "spec:rcov"
|
91
|
+
|
92
|
+
task :generate_output do
|
93
|
+
rm_rf "acceptance/reports"
|
94
|
+
ENV['CI_REPORTS'] = "acceptance/reports"
|
95
|
+
if ENV['RUBYOPT']
|
96
|
+
opts = ENV['RUBYOPT']
|
97
|
+
ENV['RUBYOPT'] = nil
|
98
|
+
else
|
99
|
+
opts = "-rubygems"
|
100
|
+
end
|
101
|
+
begin
|
102
|
+
result_proc = proc {|ok,*| puts "Failures above are expected." unless ok }
|
103
|
+
ruby "-Ilib #{opts} -rci/reporter/rake/test_unit_loader acceptance/test_unit_example_test.rb", &result_proc
|
104
|
+
ruby "-Ilib #{opts} -rci/reporter/rake/minitest_loader acceptance/minitest_example_test.rb", &result_proc
|
105
|
+
ruby "-Ilib #{opts} -S #{@spec_bin} --require ci/reporter/rake/rspec_loader --format CI::Reporter::RSpec acceptance/rspec_example_spec.rb", &result_proc
|
106
|
+
ruby "-Ilib #{opts} -rci/reporter/rake/cucumber_loader -S cucumber --format CI::Reporter::Cucumber acceptance/cucumber", &result_proc
|
107
|
+
ensure
|
108
|
+
ENV['RUBYOPT'] = opts if opts != "-rubygems"
|
109
|
+
ENV.delete 'CI_REPORTS'
|
110
|
+
end
|
111
|
+
end
|
112
|
+
task :acceptance => :generate_output
|
113
|
+
|
114
|
+
RSpecTask.new(:acceptance_spec) do |t|
|
115
|
+
t.pattern = FileList['acceptance/verification_spec.rb']
|
116
|
+
t.rspec_opts = "--color"
|
117
|
+
end
|
118
|
+
task :acceptance => :acceptance_spec
|
119
|
+
|
120
|
+
task :default => :acceptance
|
@@ -0,0 +1,125 @@
|
|
1
|
+
# Copyright (c) 2006-2012 Nick Sieger <nicksieger@gmail.com>
|
2
|
+
# See the file LICENSE.txt included with the distribution for
|
3
|
+
# software license details.
|
4
|
+
|
5
|
+
require 'ci/reporter/core'
|
6
|
+
require 'cucumber'
|
7
|
+
begin
|
8
|
+
require 'cucumber/ast/visitor'
|
9
|
+
rescue LoadError
|
10
|
+
end
|
11
|
+
|
12
|
+
module CI
|
13
|
+
module Reporter
|
14
|
+
class CucumberFailure
|
15
|
+
attr_reader :step
|
16
|
+
|
17
|
+
def initialize(step)
|
18
|
+
@step = step
|
19
|
+
end
|
20
|
+
|
21
|
+
def failure?
|
22
|
+
true
|
23
|
+
end
|
24
|
+
|
25
|
+
def error?
|
26
|
+
!failure?
|
27
|
+
end
|
28
|
+
|
29
|
+
def name
|
30
|
+
step.exception.class.name
|
31
|
+
end
|
32
|
+
|
33
|
+
def message
|
34
|
+
step.exception.message
|
35
|
+
end
|
36
|
+
|
37
|
+
def location
|
38
|
+
step.exception.backtrace.join("\n")
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
class Cucumber
|
43
|
+
attr_accessor :report_manager, :test_suite, :name
|
44
|
+
|
45
|
+
def initialize(step_mother, io, options)
|
46
|
+
@report_manager = ReportManager.new("features")
|
47
|
+
end
|
48
|
+
|
49
|
+
def before_feature(feature)
|
50
|
+
self.test_suite = TestSuite.new(@name)
|
51
|
+
test_suite.start
|
52
|
+
end
|
53
|
+
|
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
|
60
|
+
|
61
|
+
def before_background(*args)
|
62
|
+
end
|
63
|
+
|
64
|
+
def after_background(*args)
|
65
|
+
end
|
66
|
+
|
67
|
+
def feature_name(keyword, name)
|
68
|
+
@name = (name || "Unnamed feature").split("\n").first
|
69
|
+
end
|
70
|
+
|
71
|
+
def scenario_name(keyword, name, *args)
|
72
|
+
@scenario = (name || "Unnamed scenario").split("\n").first
|
73
|
+
end
|
74
|
+
|
75
|
+
def before_steps(steps)
|
76
|
+
@test_case = TestCase.new(@scenario)
|
77
|
+
@test_case.start
|
78
|
+
end
|
79
|
+
|
80
|
+
def after_steps(steps)
|
81
|
+
@test_case.finish
|
82
|
+
|
83
|
+
case steps.status
|
84
|
+
when :pending, :undefined
|
85
|
+
@test_case.name = "#{@test_case.name} (PENDING)"
|
86
|
+
when :skipped
|
87
|
+
@test_case.name = "#{@test_case.name} (SKIPPED)"
|
88
|
+
when :failed
|
89
|
+
@test_case.failures << CucumberFailure.new(steps)
|
90
|
+
end
|
91
|
+
|
92
|
+
test_suite.testcases << @test_case
|
93
|
+
@test_case = nil
|
94
|
+
end
|
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
|
+
row = table_row # shorthand for table_row
|
105
|
+
# check multiple versions of the row and try to find the best fit
|
106
|
+
outline = (row.respond_to? :name) ? row.name :
|
107
|
+
(row.respond_to? :scenario_outline) ? row.scenario_outline :
|
108
|
+
row.to_s
|
109
|
+
@test_case = TestCase.new("#@scenario (outline: #{outline})")
|
110
|
+
@test_case.start
|
111
|
+
end
|
112
|
+
|
113
|
+
def after_table_row(table_row)
|
114
|
+
if @header_row
|
115
|
+
@header_row = false
|
116
|
+
return
|
117
|
+
end
|
118
|
+
@test_case.finish
|
119
|
+
@test_case.failures << CucumberFailure.new(table_row) if table_row.failed?
|
120
|
+
test_suite.testcases << @test_case
|
121
|
+
@test_case = nil
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|