ci_reporter 1.9.3 → 2.0.0.alpha1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (55) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +22 -0
  3. data/.travis.yml +2 -6
  4. data/Gemfile +0 -9
  5. data/History.txt +0 -4
  6. data/LICENSE.txt +23 -21
  7. data/README.md +90 -0
  8. data/Rakefile +5 -99
  9. data/ci_reporter.gemspec +23 -52
  10. data/gemfiles/.gitignore +1 -0
  11. data/lib/ci/reporter/core.rb +0 -4
  12. data/lib/ci/reporter/internal.rb +31 -0
  13. data/lib/ci/reporter/rake/utils.rb +0 -4
  14. data/lib/ci/reporter/report_manager.rb +7 -11
  15. data/lib/ci/reporter/test_suite.rb +1 -9
  16. data/lib/ci/reporter/version.rb +1 -7
  17. data/spec/ci/reporter/output_capture_spec.rb +3 -7
  18. data/spec/ci/reporter/report_manager_spec.rb +6 -10
  19. data/spec/ci/reporter/test_suite_spec.rb +0 -4
  20. data/spec/spec_helper.rb +0 -7
  21. metadata +29 -138
  22. data/.gemtest +0 -0
  23. data/.hoerc +0 -2
  24. data/.travis.before_install.sh +0 -13
  25. data/Manifest.txt +0 -50
  26. data/README.rdoc +0 -111
  27. data/acceptance/cucumber/cucumber_example.feature +0 -19
  28. data/acceptance/cucumber/step_definitions/development_steps.rb +0 -40
  29. data/acceptance/minitest_example_test.rb +0 -17
  30. data/acceptance/rspec_example_spec.rb +0 -24
  31. data/acceptance/spinach/features/spinach_example.feature +0 -24
  32. data/acceptance/spinach/features/steps/example_spinach_feature.rb +0 -34
  33. data/acceptance/test_unit_example_test.rb +0 -23
  34. data/acceptance/verification_spec.rb +0 -185
  35. data/lib/ci/reporter/cucumber.rb +0 -127
  36. data/lib/ci/reporter/minitest.rb +0 -226
  37. data/lib/ci/reporter/rake/cucumber.rb +0 -17
  38. data/lib/ci/reporter/rake/cucumber_loader.rb +0 -6
  39. data/lib/ci/reporter/rake/minitest.rb +0 -15
  40. data/lib/ci/reporter/rake/minitest_loader.rb +0 -9
  41. data/lib/ci/reporter/rake/rspec.rb +0 -31
  42. data/lib/ci/reporter/rake/rspec_loader.rb +0 -6
  43. data/lib/ci/reporter/rake/spinach.rb +0 -19
  44. data/lib/ci/reporter/rake/spinach_loader.rb +0 -5
  45. data/lib/ci/reporter/rake/test_unit.rb +0 -15
  46. data/lib/ci/reporter/rake/test_unit_loader.rb +0 -38
  47. data/lib/ci/reporter/rspec.rb +0 -220
  48. data/lib/ci/reporter/spinach.rb +0 -80
  49. data/lib/ci/reporter/test_unit.rb +0 -163
  50. data/spec/ci/reporter/cucumber_spec.rb +0 -230
  51. data/spec/ci/reporter/rake/rake_tasks_spec.rb +0 -110
  52. data/spec/ci/reporter/rspec_spec.rb +0 -156
  53. data/spec/ci/reporter/test_unit_spec.rb +0 -152
  54. data/stub.rake +0 -16
  55. data/tasks/ci_reporter.rake +0 -20
@@ -1,127 +0,0 @@
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
- if table_row.respond_to? :failed?
120
- @test_case.failures << CucumberFailure.new(table_row) if table_row.failed?
121
- test_suite.testcases << @test_case
122
- @test_case = nil
123
- end
124
- end
125
- end
126
- end
127
- end
@@ -1,226 +0,0 @@
1
- # Copyright (c) 2012 Alexander Shcherbinin <alexander.shcherbinin@gmail.com>
2
- # See the file LICENSE.txt included with the distribution for
3
- # software license details.
4
-
5
- require 'ci/reporter/core'
6
-
7
- require 'minitest/unit'
8
-
9
- module CI
10
- module Reporter
11
- class Failure
12
- def self.new(fault, type = nil, meth = nil)
13
- return MiniTestSkipped.new(fault) if type == :skip
14
- return MiniTestFailure.new(fault, meth) if type == :failure
15
- MiniTestError.new(fault)
16
- end
17
- end
18
-
19
- class FailureCore
20
- def location(e)
21
- last_before_assertion = ""
22
- e.backtrace.reverse_each do |s|
23
- break if s =~ /in .(assert|refute|flunk|pass|fail|raise|must|wont)/
24
- last_before_assertion = s
25
- end
26
- last_before_assertion.sub(/:in .*$/, '')
27
- end
28
- end
29
-
30
- class MiniTestSkipped < FailureCore
31
- def initialize(fault) @fault = fault end
32
- def failure?() false end
33
- def error?() false end
34
- def name() @fault.class.name end
35
- def message() @fault.message end
36
- def location() super @fault end
37
- end
38
-
39
- class MiniTestFailure < FailureCore
40
- def initialize(fault, meth) @fault = fault; @meth = meth end
41
- def failure?() true end
42
- def error?() false end
43
- def name() @meth end
44
- def message() @fault.message end
45
- def location() super @fault end
46
- end
47
-
48
- class MiniTestError < FailureCore
49
- def initialize(fault) @fault = fault end
50
- def failure?() false end
51
- def error?() true end
52
- def name() @fault.class.name end
53
- def message() @fault.message end
54
- def location() @fault.backtrace.join("\n") end
55
- end
56
-
57
- class Runner < MiniTest::Unit
58
-
59
- @@out = $stdout
60
-
61
- def initialize
62
- super
63
- @report_manager = ReportManager.new("test")
64
- end
65
-
66
- def _run_anything(type)
67
- suites = MiniTest::Unit::TestCase.send "#{type}_suites"
68
- return if suites.empty?
69
-
70
- started_anything type
71
-
72
- sync = output.respond_to? :"sync=" # stupid emacs
73
- old_sync, output.sync = output.sync, true if sync
74
-
75
- _run_suites(suites, type)
76
-
77
- output.sync = old_sync if sync
78
-
79
- finished_anything(type)
80
- end
81
-
82
- def _run_suites(suites, type)
83
- suites.map { |suite| _run_suite suite, type }
84
- end
85
-
86
- def _run_suite(suite, type)
87
- start_suite(suite)
88
-
89
- header = "#{type}_suite_header"
90
- puts send(header, suite) if respond_to? header
91
-
92
- filter_suite_methods(suite, type).each do |method|
93
- _run_test(suite, method)
94
- end
95
-
96
- finish_suite
97
- end
98
-
99
- def _run_test(suite, method)
100
- start_case(method)
101
-
102
- result = run_test(suite, method)
103
-
104
- @assertion_count += result._assertions
105
- @test_count += 1
106
-
107
- finish_case
108
- end
109
-
110
- def puke(klass, meth, e)
111
- e = case e
112
- when MiniTest::Skip then
113
- @skips += 1
114
- fault(e, :skip)
115
- return "S" unless @verbose
116
- "Skipped:\n#{meth}(#{klass}) [#{location e}]:\n#{e.message}\n"
117
- when MiniTest::Assertion then
118
- @failures += 1
119
- fault(e, :failure, meth)
120
- "Failure:\n#{meth}(#{klass}) [#{location e}]:\n#{e.message}\n"
121
- else
122
- @errors += 1
123
- fault(e, :error)
124
- bt = MiniTest::filter_backtrace(e.backtrace).join "\n "
125
- "Error:\n#{meth}(#{klass}):\n#{e.class}: #{e.message}\n #{bt}\n"
126
- end
127
- @report << e
128
- e[0, 1]
129
- end
130
-
131
- private
132
-
133
- def started_anything(type)
134
- @test_count = 0
135
- @assertion_count = 0
136
- @last_assertion_count = 0
137
- @result_assertion_count = 0
138
- @start = Time.now
139
-
140
- puts
141
- puts "# Running #{type}s:"
142
- puts
143
- end
144
-
145
- def finished_anything(type)
146
- t = Time.now - @start
147
- puts
148
- puts
149
- puts "Finished #{type}s in %.6fs, %.4f tests/s, %.4f assertions/s." %
150
- [t, @test_count / t, @assertion_count / t]
151
-
152
- report.each_with_index do |msg, i|
153
- puts "\n%3d) %s" % [i + 1, msg]
154
- end
155
-
156
- puts
157
-
158
- status
159
- end
160
-
161
- def filter_suite_methods(suite, type)
162
- filter = options[:filter] || '/./'
163
- filter = Regexp.new $1 if filter =~ /\/(.*)\//
164
-
165
- suite.send("#{type}_methods").find_all do |m|
166
- filter === m || filter === "#{suite}##{m}"
167
- end
168
- end
169
-
170
- def run_test(suite, method)
171
- inst = suite.new method
172
- inst._assertions = 0
173
-
174
- print "#{suite}##{method} = " if @verbose
175
-
176
- @start_time = Time.now
177
- result = inst.run self
178
- time = Time.now - @start_time
179
-
180
- print "%.2f s = " % time if @verbose
181
- print result
182
- puts if @verbose
183
-
184
- return inst
185
- end
186
-
187
- def start_suite(suite_name)
188
- @current_suite = CI::Reporter::TestSuite.new(suite_name)
189
- @current_suite.start
190
- end
191
-
192
- def finish_suite
193
- if @current_suite
194
- @current_suite.finish
195
- @current_suite.assertions = @assertion_count - @last_assertion_count
196
- @last_assertion_count = @assertion_count
197
- @report_manager.write_report(@current_suite)
198
- end
199
- end
200
-
201
- def start_case(test_name)
202
- tc = CI::Reporter::TestCase.new(test_name)
203
- tc.start
204
- @current_suite.testcases << tc
205
- end
206
-
207
- def finish_case
208
- tc = @current_suite.testcases.last
209
- tc.finish
210
- tc.assertions = @assertion_count - @result_assertion_count
211
- @result_assertion_count = @assertion_count
212
- end
213
-
214
- def fault(fault, type = nil, meth = nil)
215
- tc = @current_suite.testcases.last
216
- if :skip == type
217
- tc.skipped = true
218
- else
219
- tc.failures << Failure.new(fault, type, meth)
220
- end
221
- end
222
-
223
- end
224
-
225
- end
226
- end
@@ -1,17 +0,0 @@
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 File.expand_path('../utils', __FILE__)
6
-
7
- namespace :ci do
8
- namespace :setup do
9
- task :cucumber_report_cleanup do
10
- rm_rf ENV["CI_REPORTS"] || "features/reports"
11
- end
12
-
13
- task :cucumber => :cucumber_report_cleanup do
14
- ENV["CUCUMBER_OPTS"] = "#{ENV['CUCUMBER_OPTS']} --format CI::Reporter::Cucumber"
15
- end
16
- end
17
- end
@@ -1,6 +0,0 @@
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
- $: << File.dirname(__FILE__) + "/../../.."
6
- require 'ci/reporter/cucumber'
@@ -1,15 +0,0 @@
1
- # Copyright (c) 2012 Alexander Shcherbinin <alexander.shcherbinin@gmail.com>
2
- # See the file LICENSE.txt included with the distribution for
3
- # software license details.
4
-
5
- require File.expand_path('../utils', __FILE__)
6
-
7
- namespace :ci do
8
- namespace :setup do
9
- task :minitest do
10
- rm_rf ENV["CI_REPORTS"] || "test/reports"
11
- test_loader = CI::Reporter.maybe_quote_filename "#{File.dirname(__FILE__)}/minitest_loader.rb"
12
- ENV["TESTOPTS"] = "#{ENV["TESTOPTS"]} #{test_loader}"
13
- end
14
- end
15
- end
@@ -1,9 +0,0 @@
1
- # Copyright (c) 2012 Alexander Shcherbinin <alexander.shcherbinin@gmail.com>
2
- # See the file LICENSE.txt included with the distribution for
3
- # software license details.
4
-
5
- $: << File.dirname(__FILE__) + "/../../.."
6
- require 'ci/reporter/minitest'
7
-
8
- # set defaults
9
- MiniTest::Unit.runner = CI::Reporter::Runner.new
@@ -1,31 +0,0 @@
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 File.expand_path('../utils', __FILE__)
6
-
7
- namespace :ci do
8
- namespace :setup do
9
- task :spec_report_cleanup do
10
- rm_rf ENV["CI_REPORTS"] || "spec/reports"
11
- end
12
-
13
- task :rspec => :spec_report_cleanup do
14
- spec_opts = ["--require", CI::Reporter.maybe_quote_filename("#{File.dirname(__FILE__)}/rspec_loader.rb"),
15
- "--format", "CI::Reporter::RSpec"].join(" ")
16
- ENV["SPEC_OPTS"] = "#{ENV['SPEC_OPTS']} #{spec_opts}"
17
- end
18
-
19
- task :rspecdoc => :spec_report_cleanup do
20
- spec_opts = ["--require", CI::Reporter.maybe_quote_filename("#{File.dirname(__FILE__)}/rspec_loader.rb"),
21
- "--format", "CI::Reporter::RSpecDoc"].join(" ")
22
- ENV["SPEC_OPTS"] = "#{ENV['SPEC_OPTS']} #{spec_opts}"
23
- end
24
-
25
- task :rspecbase => :spec_report_cleanup do
26
- spec_opts = ["--require", CI::Reporter.maybe_quote_filename("#{File.dirname(__FILE__)}/rspec_loader.rb"),
27
- "--format", "CI::Reporter::RSpecBase"].join(" ")
28
- ENV["SPEC_OPTS"] = "#{ENV['SPEC_OPTS']} #{spec_opts}"
29
- end
30
- end
31
- end
@@ -1,6 +0,0 @@
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
- $: << File.dirname(__FILE__) + "/../../.."
6
- require 'ci/reporter/rspec'
@@ -1,19 +0,0 @@
1
- namespace :ci do
2
- namespace :setup do
3
- task :spinach_report_cleanup do
4
- rm_rf ENV["CI_REPORTS"] || "features/reports"
5
- end
6
-
7
- task :spinach => :spinach_report_cleanup do
8
- loader = File.expand_path('prepare_ci_reporter.rb', ENV["SPINACH_SUPPORT_PATH"] || 'features/support')
9
- if !File.exist? loader
10
- File.open(loader, 'w') do |f|
11
- f.puts "require 'ci/reporter/rake/spinach_loader'"
12
- end
13
- at_exit do
14
- File.unlink loader
15
- end
16
- end
17
- end
18
- end
19
- end