stopdropandrew_ci_reporter 1.7.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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.
@@ -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.
@@ -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
@@ -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>.
@@ -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,6 @@
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/test_suite'
6
+ require 'ci/reporter/report_manager'
@@ -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