rspec-core 3.0.0.beta2 → 3.0.0.rc1

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.
Files changed (201) hide show
  1. checksums.yaml +7 -0
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/.yardopts +1 -0
  5. data/Changelog.md +297 -57
  6. data/README.md +16 -13
  7. data/lib/rspec/core.rb +55 -84
  8. data/lib/rspec/core/backport_random.rb +35 -3
  9. data/lib/rspec/core/backtrace_formatter.rb +4 -13
  10. data/lib/rspec/core/configuration.rb +330 -114
  11. data/lib/rspec/core/configuration_options.rb +38 -22
  12. data/lib/rspec/core/drb.rb +111 -0
  13. data/lib/rspec/core/dsl.rb +8 -2
  14. data/lib/rspec/core/example.rb +203 -94
  15. data/lib/rspec/core/example_group.rb +344 -316
  16. data/lib/rspec/core/filter_manager.rb +135 -90
  17. data/lib/rspec/core/flat_map.rb +1 -0
  18. data/lib/rspec/core/formatters.rb +50 -14
  19. data/lib/rspec/core/formatters/base_formatter.rb +32 -138
  20. data/lib/rspec/core/formatters/base_text_formatter.rb +32 -253
  21. data/lib/rspec/core/formatters/console_codes.rb +65 -0
  22. data/lib/rspec/core/formatters/deprecation_formatter.rb +24 -15
  23. data/lib/rspec/core/formatters/documentation_formatter.rb +7 -10
  24. data/lib/rspec/core/formatters/helpers.rb +15 -9
  25. data/lib/rspec/core/formatters/html_formatter.rb +17 -16
  26. data/lib/rspec/core/formatters/html_printer.rb +1 -0
  27. data/lib/rspec/core/formatters/json_formatter.rb +18 -20
  28. data/lib/rspec/core/formatters/profile_formatter.rb +67 -0
  29. data/lib/rspec/core/formatters/progress_formatter.rb +6 -7
  30. data/lib/rspec/core/formatters/snippet_extractor.rb +8 -6
  31. data/lib/rspec/core/hooks.rb +131 -125
  32. data/lib/rspec/core/memoized_helpers.rb +31 -26
  33. data/lib/rspec/core/metadata.rb +277 -184
  34. data/lib/rspec/core/metadata_filter.rb +86 -0
  35. data/lib/rspec/core/minitest_assertions_adapter.rb +28 -0
  36. data/lib/rspec/core/mocking_adapters/flexmock.rb +1 -1
  37. data/lib/rspec/core/mocking_adapters/mocha.rb +1 -1
  38. data/lib/rspec/core/mocking_adapters/null.rb +1 -1
  39. data/lib/rspec/core/mocking_adapters/rr.rb +2 -1
  40. data/lib/rspec/core/mocking_adapters/rspec.rb +1 -1
  41. data/lib/rspec/core/notifications.rb +435 -24
  42. data/lib/rspec/core/option_parser.rb +16 -25
  43. data/lib/rspec/core/ordering.rb +3 -1
  44. data/lib/rspec/core/pending.rb +57 -33
  45. data/lib/rspec/core/project_initializer.rb +2 -0
  46. data/lib/rspec/core/project_initializer/spec_helper.rb +5 -4
  47. data/lib/rspec/core/rake_task.rb +45 -20
  48. data/lib/rspec/core/reporter.rb +50 -22
  49. data/lib/rspec/core/ruby_project.rb +1 -0
  50. data/lib/rspec/core/runner.rb +93 -39
  51. data/lib/rspec/core/shared_context.rb +7 -5
  52. data/lib/rspec/core/shared_example_group.rb +85 -77
  53. data/lib/rspec/core/test_unit_assertions_adapter.rb +30 -0
  54. data/lib/rspec/core/version.rb +3 -1
  55. data/lib/rspec/core/warnings.rb +35 -17
  56. data/lib/rspec/core/world.rb +57 -5
  57. metadata +56 -369
  58. metadata.gz.sig +3 -3
  59. data/features/README.md +0 -13
  60. data/features/Upgrade.md +0 -352
  61. data/features/command_line/README.md +0 -25
  62. data/features/command_line/dry_run.feature +0 -29
  63. data/features/command_line/example_name_option.feature +0 -97
  64. data/features/command_line/exit_status.feature +0 -82
  65. data/features/command_line/fail_fast.feature +0 -26
  66. data/features/command_line/format_option.feature +0 -75
  67. data/features/command_line/init.feature +0 -57
  68. data/features/command_line/line_number_appended_to_path.feature +0 -140
  69. data/features/command_line/line_number_option.feature +0 -58
  70. data/features/command_line/order.feature +0 -25
  71. data/features/command_line/pattern_option.feature +0 -49
  72. data/features/command_line/rake_task.feature +0 -122
  73. data/features/command_line/randomization.feature +0 -63
  74. data/features/command_line/require_option.feature +0 -43
  75. data/features/command_line/ruby.feature +0 -23
  76. data/features/command_line/tag.feature +0 -98
  77. data/features/command_line/warnings_option.feature +0 -29
  78. data/features/configuration/alias_example_to.feature +0 -39
  79. data/features/configuration/backtrace_exclusion_patterns.feature +0 -105
  80. data/features/configuration/custom_settings.feature +0 -84
  81. data/features/configuration/default_path.feature +0 -38
  82. data/features/configuration/deprecation_stream.feature +0 -58
  83. data/features/configuration/enable_global_dsl.feature +0 -54
  84. data/features/configuration/fail_fast.feature +0 -77
  85. data/features/configuration/failure_exit_code.feature +0 -36
  86. data/features/configuration/order_and_seed.feature +0 -3
  87. data/features/configuration/output_stream.feature +0 -24
  88. data/features/configuration/overriding_global_ordering.feature +0 -93
  89. data/features/configuration/pattern.feature +0 -38
  90. data/features/configuration/profile.feature +0 -220
  91. data/features/configuration/read_options_from_file.feature +0 -90
  92. data/features/configuration/run_all_when_everything_filtered.feature +0 -76
  93. data/features/example_groups/aliasing.feature +0 -48
  94. data/features/example_groups/basic_structure.feature +0 -55
  95. data/features/example_groups/shared_context.feature +0 -74
  96. data/features/example_groups/shared_examples.feature +0 -286
  97. data/features/expectation_framework_integration/configure_expectation_framework.feature +0 -102
  98. data/features/filtering/exclusion_filters.feature +0 -135
  99. data/features/filtering/if_and_unless.feature +0 -138
  100. data/features/filtering/inclusion_filters.feature +0 -101
  101. data/features/formatters/configurable_colors.feature +0 -31
  102. data/features/formatters/custom_formatter.feature +0 -68
  103. data/features/formatters/json_formatter.feature +0 -30
  104. data/features/formatters/regression_tests.feature +0 -95
  105. data/features/formatters/text_formatter.feature +0 -46
  106. data/features/helper_methods/arbitrary_methods.feature +0 -40
  107. data/features/helper_methods/let.feature +0 -50
  108. data/features/helper_methods/modules.feature +0 -146
  109. data/features/hooks/around_hooks.feature +0 -344
  110. data/features/hooks/before_and_after_hooks.feature +0 -427
  111. data/features/hooks/filtering.feature +0 -232
  112. data/features/metadata/current_example.feature +0 -56
  113. data/features/metadata/described_class.feature +0 -17
  114. data/features/metadata/user_defined.feature +0 -100
  115. data/features/mock_framework_integration/use_any_framework.feature +0 -106
  116. data/features/mock_framework_integration/use_flexmock.feature +0 -94
  117. data/features/mock_framework_integration/use_mocha.feature +0 -95
  118. data/features/mock_framework_integration/use_rr.feature +0 -96
  119. data/features/mock_framework_integration/use_rspec.feature +0 -95
  120. data/features/pending_and_skipped_examples/README.md +0 -3
  121. data/features/pending_and_skipped_examples/pending_examples.feature +0 -118
  122. data/features/pending_and_skipped_examples/skipped_examples.feature +0 -106
  123. data/features/spec_files/arbitrary_file_suffix.feature +0 -13
  124. data/features/step_definitions/additional_cli_steps.rb +0 -83
  125. data/features/subject/explicit_subject.feature +0 -101
  126. data/features/subject/implicit_subject.feature +0 -63
  127. data/features/subject/one_liner_syntax.feature +0 -71
  128. data/features/support/env.rb +0 -21
  129. data/features/support/require_expect_syntax_in_aruba_specs.rb +0 -16
  130. data/features/support/rubinius.rb +0 -6
  131. data/lib/rspec/core/command_line.rb +0 -35
  132. data/lib/rspec/core/drb_command_line.rb +0 -26
  133. data/lib/rspec/core/drb_options.rb +0 -87
  134. data/lib/rspec/core/formatters/legacy_formatter.rb +0 -227
  135. data/lib/rspec/core/shared_example_group/collection.rb +0 -27
  136. data/spec/command_line/order_spec.rb +0 -211
  137. data/spec/rspec/core/backtrace_formatter_spec.rb +0 -230
  138. data/spec/rspec/core/command_line_spec.rb +0 -112
  139. data/spec/rspec/core/command_line_spec_output.txt +0 -0
  140. data/spec/rspec/core/configuration_options_spec.rb +0 -409
  141. data/spec/rspec/core/configuration_spec.rb +0 -1479
  142. data/spec/rspec/core/drb_command_line_spec.rb +0 -102
  143. data/spec/rspec/core/drb_options_spec.rb +0 -193
  144. data/spec/rspec/core/dsl_spec.rb +0 -88
  145. data/spec/rspec/core/example_group_spec.rb +0 -1533
  146. data/spec/rspec/core/example_spec.rb +0 -642
  147. data/spec/rspec/core/filter_manager_spec.rb +0 -229
  148. data/spec/rspec/core/formatters/base_formatter_spec.rb +0 -64
  149. data/spec/rspec/core/formatters/base_text_formatter_spec.rb +0 -303
  150. data/spec/rspec/core/formatters/deprecation_formatter_spec.rb +0 -208
  151. data/spec/rspec/core/formatters/documentation_formatter_spec.rb +0 -75
  152. data/spec/rspec/core/formatters/helpers_spec.rb +0 -104
  153. data/spec/rspec/core/formatters/html_formatted-2.1.0.html +0 -392
  154. data/spec/rspec/core/formatters/html_formatted.html +0 -397
  155. data/spec/rspec/core/formatters/html_formatter_spec.rb +0 -122
  156. data/spec/rspec/core/formatters/json_formatter_spec.rb +0 -206
  157. data/spec/rspec/core/formatters/legacy_formatter_spec.rb +0 -137
  158. data/spec/rspec/core/formatters/progress_formatter_spec.rb +0 -43
  159. data/spec/rspec/core/formatters/snippet_extractor_spec.rb +0 -26
  160. data/spec/rspec/core/formatters_spec.rb +0 -120
  161. data/spec/rspec/core/hooks_filtering_spec.rb +0 -227
  162. data/spec/rspec/core/hooks_spec.rb +0 -294
  163. data/spec/rspec/core/memoized_helpers_spec.rb +0 -495
  164. data/spec/rspec/core/metadata_spec.rb +0 -491
  165. data/spec/rspec/core/option_parser_spec.rb +0 -262
  166. data/spec/rspec/core/ordering_spec.rb +0 -102
  167. data/spec/rspec/core/pending_example_spec.rb +0 -117
  168. data/spec/rspec/core/pending_spec.rb +0 -8
  169. data/spec/rspec/core/project_initializer_spec.rb +0 -73
  170. data/spec/rspec/core/rake_task_spec.rb +0 -146
  171. data/spec/rspec/core/random_spec.rb +0 -47
  172. data/spec/rspec/core/reporter_spec.rb +0 -155
  173. data/spec/rspec/core/resources/a_bar.rb +0 -0
  174. data/spec/rspec/core/resources/a_foo.rb +0 -0
  175. data/spec/rspec/core/resources/a_spec.rb +0 -1
  176. data/spec/rspec/core/resources/custom_example_group_runner.rb +0 -14
  177. data/spec/rspec/core/resources/formatter_specs.rb +0 -58
  178. data/spec/rspec/core/resources/utf8_encoded.rb +0 -8
  179. data/spec/rspec/core/rspec_matchers_spec.rb +0 -45
  180. data/spec/rspec/core/ruby_project_spec.rb +0 -26
  181. data/spec/rspec/core/runner_spec.rb +0 -151
  182. data/spec/rspec/core/shared_context_spec.rb +0 -102
  183. data/spec/rspec/core/shared_example_group/collection_spec.rb +0 -57
  184. data/spec/rspec/core/shared_example_group_spec.rb +0 -114
  185. data/spec/rspec/core/warnings_spec.rb +0 -29
  186. data/spec/rspec/core/world_spec.rb +0 -142
  187. data/spec/rspec/core_spec.rb +0 -91
  188. data/spec/spec_helper.rb +0 -160
  189. data/spec/support/config_options_helper.rb +0 -13
  190. data/spec/support/formatter_support.rb +0 -83
  191. data/spec/support/helper_methods.rb +0 -26
  192. data/spec/support/isolate_load_path_mutation.rb +0 -5
  193. data/spec/support/isolated_directory.rb +0 -10
  194. data/spec/support/isolated_home_directory.rb +0 -16
  195. data/spec/support/legacy_formatter_using_sub_classing_example.rb +0 -87
  196. data/spec/support/matchers.rb +0 -85
  197. data/spec/support/mathn_integration_support.rb +0 -12
  198. data/spec/support/old_style_formatter_example.rb +0 -69
  199. data/spec/support/shared_example_groups.rb +0 -13
  200. data/spec/support/spec_files.rb +0 -44
  201. data/spec/support/stderr_splitter.rb +0 -36
@@ -1,5 +1,5 @@
1
- require 'rspec/core/formatters/base_formatter'
2
- require 'set'
1
+ RSpec::Support.require_rspec_core "formatters/base_formatter"
2
+ RSpec::Support.require_rspec_core "formatters/console_codes"
3
3
 
4
4
  module RSpec
5
5
  module Core
@@ -12,284 +12,63 @@ module RSpec
12
12
  # @see RSpec::Core::Reporter
13
13
  class BaseTextFormatter < BaseFormatter
14
14
  Formatters.register self, :message, :dump_summary, :dump_failures,
15
- :dump_profile, :dump_pending, :seed
16
-
17
- def message(notification)
18
- output.puts notification.message
19
- end
20
-
21
- def dump_failures(notification)
22
- return if failed_examples.empty?
23
- output.puts
24
- output.puts "Failures:"
25
- failed_examples.each_with_index do |example, index|
26
- output.puts
27
- pending_fixed?(example) ? dump_pending_fixed(example, index) : dump_failure(example, index)
28
- dump_backtrace(example)
29
- end
30
- end
15
+ :dump_pending, :seed
31
16
 
17
+ # @method message
32
18
  # @api public
33
19
  #
34
- # Colorizes the output red for failure, yellow for
35
- # pending, and green otherwise.
20
+ # Used by the reporter to send messages to the output stream.
36
21
  #
37
- # @param [String] string
38
- def colorise_summary(summary)
39
- if summary.failure_count > 0
40
- color(summary.summary_line, RSpec.configuration.failure_color)
41
- elsif summary.pending_count > 0
42
- color(summary.summary_line, RSpec.configuration.pending_color)
43
- else
44
- color(summary.summary_line, RSpec.configuration.success_color)
45
- end
46
- end
47
-
48
- def dump_summary(summary)
49
- dump_profile unless mute_profile_output?(summary.failure_count)
50
- output.puts "\nFinished in #{format_duration(summary.duration)}\n"
51
- output.puts colorise_summary(summary)
52
- dump_commands_to_rerun_failed_examples
22
+ # @param notification [MessageNotification] containing message
23
+ def message(notification)
24
+ output.puts notification.message
53
25
  end
54
26
 
27
+ # @method dump_failures
55
28
  # @api public
56
29
  #
57
- # Outputs commands which can be used to re-run failed examples.
30
+ # Dumps detailed information about each example failure.
58
31
  #
59
- def dump_commands_to_rerun_failed_examples
60
- return if failed_examples.empty?
61
- output.puts
62
- output.puts("Failed examples:")
63
- output.puts
64
-
65
- failed_examples.each do |example|
66
- output.puts(failure_color("rspec #{RSpec::Core::Metadata::relative_path(example.location)}") + " " + detail_color("# #{example.full_description}"))
67
- end
32
+ # @param notification [NullNotification]
33
+ def dump_failures(notification)
34
+ return if notification.failure_notifications.empty?
35
+ output.puts notification.fully_formatted_failed_examples
68
36
  end
69
37
 
38
+ # @method dump_summary
70
39
  # @api public
71
40
  #
72
- # Outputs the slowest examples and example groups in a report when using `--profile COUNT` (default 10).
41
+ # This method is invoked after the dumping of examples and failures. Each parameter
42
+ # is assigned to a corresponding attribute.
73
43
  #
74
- def dump_profile
75
- dump_profile_slowest_examples
76
- dump_profile_slowest_example_groups
77
- end
78
-
79
- # @api private
80
- def dump_profile_slowest_examples
81
- sorted_examples = slowest_examples
82
-
83
- time_taken = sorted_examples[:slows] / sorted_examples[:total]
84
- percentage = '%.1f' % ((time_taken.nan? ? 0.0 : time_taken) * 100)
85
-
86
- output.puts "\nTop #{sorted_examples[:examples].size} slowest examples (#{format_seconds(sorted_examples[:slows])} seconds, #{percentage}% of total time):\n"
87
-
88
- sorted_examples[:examples].each do |example|
89
- output.puts " #{example.full_description}"
90
- output.puts " #{bold(format_seconds(example.execution_result[:run_time]))} #{bold("seconds")} #{format_caller(example.location)}"
91
- end
92
- end
93
-
94
- # @api private
95
- def dump_profile_slowest_example_groups
96
-
97
- sorted_groups = slowest_groups
98
- return if sorted_groups.empty?
99
-
100
- output.puts "\nTop #{sorted_groups.size} slowest example groups:"
101
- slowest_groups.each do |loc, hash|
102
- average = "#{bold(format_seconds(hash[:average]))} #{bold("seconds")} average"
103
- total = "#{format_seconds(hash[:total_time])} seconds"
104
- count = pluralize(hash[:count], "example")
105
- output.puts " #{hash[:description]}"
106
- output.puts " #{average} (#{total} / #{count}) #{loc}"
107
- end
44
+ # @param summary [SummaryNotification] containing duration, example_count,
45
+ # failure_count and pending_count
46
+ def dump_summary(summary)
47
+ output.puts summary.fully_formatted
108
48
  end
109
49
 
50
+ # @private
110
51
  def dump_pending(notification)
111
- unless pending_examples.empty?
112
- output.puts
113
- output.puts "Pending:"
114
- pending_examples.each do |pending_example|
115
- output.puts pending_color(" #{pending_example.full_description}")
116
- output.puts detail_color(" # #{pending_example.execution_result[:pending_message]}")
117
- output.puts detail_color(" # #{format_caller(pending_example.location)}")
118
- end
119
- end
52
+ return if notification.pending_examples.empty?
53
+ output.puts notification.fully_formatted_pending_examples
120
54
  end
121
55
 
56
+ # @private
122
57
  def seed(notification)
123
58
  return unless notification.seed_used?
124
- output.puts
125
- output.puts "Randomized with seed #{notification.seed}"
126
- output.puts
59
+ output.puts notification.fully_formatted
127
60
  end
128
61
 
62
+ # @api public
63
+ #
64
+ # Invoked at the very end, `close` allows the formatter to clean
65
+ # up resources, e.g. open streams, etc.
66
+ #
67
+ # @param notification [NullNotification]
129
68
  def close(notification)
130
69
  output.close if IO === output && output != $stdout
131
70
  end
132
71
 
133
- VT100_COLORS = {
134
- :black => 30,
135
- :red => 31,
136
- :green => 32,
137
- :yellow => 33,
138
- :blue => 34,
139
- :magenta => 35,
140
- :cyan => 36,
141
- :white => 37
142
- }
143
-
144
- VT100_COLOR_CODES = VT100_COLORS.values.to_set
145
-
146
- def color_code_for(code_or_symbol)
147
- if VT100_COLOR_CODES.include?(code_or_symbol)
148
- code_or_symbol
149
- else
150
- VT100_COLORS.fetch(code_or_symbol) do
151
- color_code_for(:white)
152
- end
153
- end
154
- end
155
-
156
- def colorize(text, code_or_symbol)
157
- "\e[#{color_code_for(code_or_symbol)}m#{text}\e[0m"
158
- end
159
-
160
- protected
161
-
162
- def bold(text)
163
- color_enabled? ? "\e[1m#{text}\e[0m" : text
164
- end
165
-
166
- def color(text, color_code)
167
- color_enabled? ? colorize(text, color_code) : text
168
- end
169
-
170
- def failure_color(text)
171
- color(text, RSpec.configuration.failure_color)
172
- end
173
-
174
- def success_color(text)
175
- color(text, RSpec.configuration.success_color)
176
- end
177
-
178
- def pending_color(text)
179
- color(text, RSpec.configuration.pending_color)
180
- end
181
-
182
- def fixed_color(text)
183
- color(text, RSpec.configuration.fixed_color)
184
- end
185
-
186
- def detail_color(text)
187
- color(text, RSpec.configuration.detail_color)
188
- end
189
-
190
- def default_color(text)
191
- color(text, RSpec.configuration.default_color)
192
- end
193
-
194
- def red(text)
195
- RSpec.deprecate("RSpec::Core::Formatters::BaseTextFormatter#red", :replacement => "#failure_color")
196
- color(text, :red)
197
- end
198
-
199
- def green(text)
200
- RSpec.deprecate("RSpec::Core::Formatters::BaseTextFormatter#green", :replacement => "#success_color")
201
- color(text, :green)
202
- end
203
-
204
- def yellow(text)
205
- RSpec.deprecate("RSpec::Core::Formatters::BaseTextFormatter#yellow", :replacement => "#pending_color")
206
- color(text, :yellow)
207
- end
208
-
209
- def blue(text)
210
- RSpec.deprecate("RSpec::Core::Formatters::BaseTextFormatter#blue", :replacement => "#fixed_color")
211
- color(text, :blue)
212
- end
213
-
214
- def magenta(text)
215
- RSpec.deprecate("RSpec::Core::Formatters::BaseTextFormatter#magenta")
216
- color(text, :magenta)
217
- end
218
-
219
- def cyan(text)
220
- RSpec.deprecate("RSpec::Core::Formatters::BaseTextFormatter#cyan", :replacement => "#detail_color")
221
- color(text, :cyan)
222
- end
223
-
224
- def white(text)
225
- RSpec.deprecate("RSpec::Core::Formatters::BaseTextFormatter#white", :replacement => "#default_color")
226
- color(text, :white)
227
- end
228
-
229
- def short_padding
230
- ' '
231
- end
232
-
233
- def long_padding
234
- ' '
235
- end
236
-
237
- private
238
-
239
- def format_caller(caller_info)
240
- configuration.backtrace_formatter.backtrace_line(caller_info.to_s.split(':in `block').first)
241
- end
242
-
243
- def dump_backtrace(example, key = :exception)
244
- format_backtrace(example.execution_result[key].backtrace, example).each do |backtrace_info|
245
- output.puts detail_color("#{long_padding}# #{backtrace_info}")
246
- end
247
- end
248
-
249
- def dump_pending_fixed(example, index)
250
- output.puts "#{short_padding}#{index.next}) #{example.full_description} FIXED"
251
- output.puts fixed_color("#{long_padding}Expected pending '#{example.metadata[:execution_result][:pending_message]}' to fail. No Error was raised.")
252
- end
253
-
254
- def pending_fixed?(example)
255
- example.execution_result[:pending_fixed]
256
- end
257
-
258
- def dump_failure(example, index)
259
- output.puts "#{short_padding}#{index.next}) #{example.full_description}"
260
- dump_failure_info(example)
261
- end
262
-
263
- def dump_failure_info(example, key = :exception)
264
- exception = example.execution_result[key]
265
- exception_class_name = exception_class_name_for(exception)
266
- output.puts "#{long_padding}#{failure_color("Failure/Error:")} #{failure_color(read_failed_line(exception, example).strip)}"
267
- output.puts "#{long_padding}#{failure_color(exception_class_name)}:" unless exception_class_name =~ /RSpec/
268
- exception.message.to_s.split("\n").each { |line| output.puts "#{long_padding} #{failure_color(line)}" } if exception.message
269
-
270
- if shared_group = find_shared_group(example)
271
- dump_shared_failure_info(shared_group)
272
- end
273
- end
274
-
275
- def exception_class_name_for(exception)
276
- name = exception.class.name.to_s
277
- name ="(anonymous error class)" if name == ''
278
- name
279
- end
280
-
281
- def dump_shared_failure_info(group)
282
- output.puts "#{long_padding}Shared Example Group: \"#{group.metadata[:shared_group_name]}\" called from " +
283
- "#{configuration.backtrace_formatter.backtrace_line(group.metadata[:example_group][:location])}"
284
- end
285
-
286
- def find_shared_group(example)
287
- group_and_parent_groups(example).find {|group| group.metadata[:shared_group_name]}
288
- end
289
-
290
- def group_and_parent_groups(example)
291
- example.example_group.parent_groups + [example.example_group]
292
- end
293
72
  end
294
73
  end
295
74
  end
@@ -0,0 +1,65 @@
1
+ module RSpec
2
+ module Core
3
+ module Formatters
4
+ # ConsoleCodes provides helpers for formatting console output
5
+ # with ANSI codes, e.g. color's and bold.
6
+ module ConsoleCodes
7
+ # @private
8
+ VT100_CODES =
9
+ {
10
+ :black => 30,
11
+ :red => 31,
12
+ :green => 32,
13
+ :yellow => 33,
14
+ :blue => 34,
15
+ :magenta => 35,
16
+ :cyan => 36,
17
+ :white => 37,
18
+ :bold => 1,
19
+ }
20
+ # @private
21
+ VT100_CODE_VALUES = VT100_CODES.invert
22
+
23
+ module_function
24
+
25
+ # Fetches the correct code for the supplied symbol, or checks
26
+ # that a code is valid. Defaults to white (37).
27
+ #
28
+ # @param code_or_symbol [Symbol, Fixnum] Symbol or code to check
29
+ # @return [Fixnum] a console code
30
+ def console_code_for(code_or_symbol)
31
+ if RSpec.configuration.respond_to?(:"#{code_or_symbol}_color")
32
+ console_code_for configuration_color(code_or_symbol)
33
+ elsif VT100_CODE_VALUES.has_key?(code_or_symbol)
34
+ code_or_symbol
35
+ else
36
+ VT100_CODES.fetch(code_or_symbol) do
37
+ console_code_for(:white)
38
+ end
39
+ end
40
+ end
41
+
42
+ # Wraps a piece of text in ANSI codes with the supplied code. Will
43
+ # only apply the control code if `RSpec.configuration.color_enabled?`
44
+ # returns true.
45
+ #
46
+ # @param text [String] the text to wrap
47
+ # @param code_or_symbol [Symbol, Fixnum] the desired control code
48
+ # @return [String] the wrapped text
49
+ def wrap(text, code_or_symbol)
50
+ if RSpec.configuration.color_enabled?
51
+ "\e[#{console_code_for(code_or_symbol)}m#{text}\e[0m"
52
+ else
53
+ text
54
+ end
55
+ end
56
+
57
+ # @private
58
+ def configuration_color(code)
59
+ RSpec.configuration.__send__(:"#{code}_color")
60
+ end
61
+
62
+ end
63
+ end
64
+ end
65
+ end
@@ -1,9 +1,10 @@
1
- require 'rspec/core/formatters/helpers'
1
+ RSpec::Support.require_rspec_core "formatters/helpers"
2
2
  require 'set'
3
3
 
4
4
  module RSpec
5
5
  module Core
6
6
  module Formatters
7
+ # @private
7
8
  class DeprecationFormatter
8
9
  Formatters.register self, :deprecation, :deprecation_summary
9
10
 
@@ -56,6 +57,9 @@ module RSpec
56
57
  |deprecation warnings into errors, giving you the full backtrace.
57
58
  EOS
58
59
 
60
+ DEPRECATION_STREAM_NOTICE = "Pass `--deprecation-out` or set " +
61
+ "`config.deprecation_stream` to a file for full output."
62
+
59
63
  SpecifiedDeprecationMessage = Struct.new(:type) do
60
64
  def initialize(data)
61
65
  @message = data.message
@@ -63,17 +67,23 @@ module RSpec
63
67
  end
64
68
 
65
69
  def to_s
66
- @message
70
+ output_formatted @message
67
71
  end
68
72
 
69
73
  def too_many_warnings_message
70
- msg = "Too many similar deprecation messages reported, disregarding further reports."
71
- msg << " Set config.deprecation_stream to a File for full output."
74
+ msg = "Too many similar deprecation messages reported, disregarding further reports. "
75
+ msg << DEPRECATION_STREAM_NOTICE
72
76
  msg
73
77
  end
74
78
 
75
79
  private
76
80
 
81
+ def output_formatted(str)
82
+ return str unless str.lines.count > 1
83
+ separator = "#{'-' * 80}"
84
+ "#{separator}\n#{str.chomp}\n#{separator}"
85
+ end
86
+
77
87
  def deprecation_type_for(data)
78
88
  data.message.gsub(/(\w+\/)+\w+\.rb:\d+/, '')
79
89
  end
@@ -93,12 +103,13 @@ module RSpec
93
103
  end
94
104
 
95
105
  def too_many_warnings_message
96
- msg = "Too many uses of deprecated '#{type}'."
97
- msg << " Set config.deprecation_stream to a File for full output."
106
+ msg = "Too many uses of deprecated '#{type}'. "
107
+ msg << DEPRECATION_STREAM_NOTICE
98
108
  msg
99
109
  end
100
110
  end
101
111
 
112
+ # @private
102
113
  class ImmediatePrinter
103
114
  attr_reader :deprecation_stream, :summary_stream, :deprecation_formatter
104
115
 
@@ -120,11 +131,10 @@ module RSpec
120
131
  end
121
132
  end
122
133
 
134
+ # @private
123
135
  class DelayedPrinter
124
136
  TOO_MANY_USES_LIMIT = 4
125
137
 
126
- include ::RSpec::Core::Formatters::Helpers
127
-
128
138
  attr_reader :deprecation_stream, :summary_stream, :deprecation_formatter
129
139
 
130
140
  def initialize(deprecation_stream, summary_stream, deprecation_formatter)
@@ -156,7 +166,7 @@ module RSpec
156
166
  print_deferred_deprecation_warnings
157
167
  deprecation_stream.puts RAISE_ERROR_CONFIG_NOTICE
158
168
 
159
- summary_stream.puts "\n#{pluralize(deprecation_formatter.count, 'deprecation warning')} total"
169
+ summary_stream.puts "\n#{Helpers.pluralize(deprecation_formatter.count, 'deprecation warning')} total"
160
170
  end
161
171
 
162
172
  def print_deferred_deprecation_warnings
@@ -169,23 +179,21 @@ module RSpec
169
179
  end
170
180
  end
171
181
 
182
+ # @private
172
183
  # Not really a stream, but is usable in place of one.
173
184
  class RaiseErrorStream
174
- include ::RSpec::Core::Formatters::Helpers
175
-
176
185
  def puts(message)
177
186
  raise DeprecationError, message
178
187
  end
179
188
 
180
189
  def summarize(summary_stream, deprecation_count)
181
- summary_stream.puts "\n#{pluralize(deprecation_count, 'deprecation')} found."
190
+ summary_stream.puts "\n#{Helpers.pluralize(deprecation_count, 'deprecation')} found."
182
191
  end
183
192
  end
184
193
 
194
+ # @private
185
195
  # Wraps a File object and provides file-specific operations.
186
196
  class FileStream
187
- include ::RSpec::Core::Formatters::Helpers
188
-
189
197
  def initialize(file)
190
198
  @file = file
191
199
 
@@ -201,7 +209,7 @@ module RSpec
201
209
  end
202
210
 
203
211
  def summarize(summary_stream, deprecation_count)
204
- summary_stream.puts "\n#{pluralize(deprecation_count, 'deprecation')} logged to #{@file.path}"
212
+ summary_stream.puts "\n#{Helpers.pluralize(deprecation_count, 'deprecation')} logged to #{@file.path}"
205
213
  puts RAISE_ERROR_CONFIG_NOTICE
206
214
  end
207
215
  end
@@ -209,6 +217,7 @@ module RSpec
209
217
  end
210
218
  end
211
219
 
220
+ # Deprecation Error
212
221
  DeprecationError = Class.new(StandardError)
213
222
  end
214
223
  end