stopdropandrew_ci_reporter 1.7.0.1
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 +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
|