rspec-core 3.1.7 → 3.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/.yardopts +1 -0
  5. data/Changelog.md +84 -0
  6. data/README.md +10 -1
  7. data/lib/rspec/core.rb +28 -8
  8. data/lib/rspec/core/backport_random.rb +12 -9
  9. data/lib/rspec/core/configuration.rb +350 -112
  10. data/lib/rspec/core/configuration_options.rb +14 -7
  11. data/lib/rspec/core/dsl.rb +7 -4
  12. data/lib/rspec/core/example.rb +86 -50
  13. data/lib/rspec/core/example_group.rb +247 -86
  14. data/lib/rspec/core/filter_manager.rb +38 -93
  15. data/lib/rspec/core/flat_map.rb +4 -4
  16. data/lib/rspec/core/formatters.rb +10 -6
  17. data/lib/rspec/core/formatters/base_formatter.rb +7 -4
  18. data/lib/rspec/core/formatters/base_text_formatter.rb +12 -12
  19. data/lib/rspec/core/formatters/console_codes.rb +8 -7
  20. data/lib/rspec/core/formatters/deprecation_formatter.rb +5 -3
  21. data/lib/rspec/core/formatters/documentation_formatter.rb +10 -4
  22. data/lib/rspec/core/formatters/helpers.rb +6 -4
  23. data/lib/rspec/core/formatters/html_formatter.rb +13 -8
  24. data/lib/rspec/core/formatters/html_printer.rb +26 -10
  25. data/lib/rspec/core/formatters/profile_formatter.rb +10 -7
  26. data/lib/rspec/core/formatters/protocol.rb +27 -18
  27. data/lib/rspec/core/formatters/snippet_extractor.rb +14 -7
  28. data/lib/rspec/core/hooks.rb +252 -211
  29. data/lib/rspec/core/memoized_helpers.rb +16 -16
  30. data/lib/rspec/core/metadata.rb +67 -28
  31. data/lib/rspec/core/metadata_filter.rb +151 -24
  32. data/lib/rspec/core/minitest_assertions_adapter.rb +5 -2
  33. data/lib/rspec/core/mocking_adapters/flexmock.rb +1 -1
  34. data/lib/rspec/core/mocking_adapters/mocha.rb +8 -8
  35. data/lib/rspec/core/notifications.rb +155 -94
  36. data/lib/rspec/core/option_parser.rb +16 -10
  37. data/lib/rspec/core/pending.rb +11 -9
  38. data/lib/rspec/core/project_initializer.rb +1 -1
  39. data/lib/rspec/core/project_initializer/spec/spec_helper.rb +10 -8
  40. data/lib/rspec/core/rake_task.rb +37 -52
  41. data/lib/rspec/core/reporter.rb +30 -7
  42. data/lib/rspec/core/ruby_project.rb +12 -4
  43. data/lib/rspec/core/runner.rb +5 -8
  44. data/lib/rspec/core/sandbox.rb +37 -0
  45. data/lib/rspec/core/shared_example_group.rb +41 -15
  46. data/lib/rspec/core/test_unit_assertions_adapter.rb +3 -3
  47. data/lib/rspec/core/version.rb +1 -1
  48. data/lib/rspec/core/warnings.rb +2 -2
  49. data/lib/rspec/core/world.rb +12 -28
  50. metadata +44 -31
  51. metadata.gz.sig +0 -0
@@ -1,9 +1,9 @@
1
1
  begin
2
- # Only the minitest 5.x gem includes the minitest.rb and assertions.rb files
2
+ # Only the minitest 5.x gem includes the minitest.rb and assertions.rb files.
3
3
  require 'minitest'
4
4
  require 'minitest/assertions'
5
5
  rescue LoadError
6
- # We must be using Ruby Core's MiniTest or the Minitest gem 4.x
6
+ # We must be using Ruby Core's MiniTest or the Minitest gem 4.x.
7
7
  require 'minitest/unit'
8
8
  Minitest = MiniTest
9
9
  end
@@ -13,6 +13,9 @@ module RSpec
13
13
  # @private
14
14
  module MinitestAssertionsAdapter
15
15
  include ::Minitest::Assertions
16
+ # Need to forcefully include Pending after Minitest::Assertions
17
+ # to make sure our own #skip method beats Minitest's.
18
+ include ::RSpec::Core::Pending
16
19
 
17
20
  # Minitest 5.x requires this accessor to be available. See
18
21
  # https://github.com/seattlerb/minitest/blob/38f0a5fcbd9c37c3f80a3eaad4ba84d3fc9947a0/lib/minitest/assertions.rb#L8
@@ -15,7 +15,7 @@ module RSpec
15
15
  end
16
16
 
17
17
  def setup_mocks_for_rspec
18
- # No setup required
18
+ # No setup required.
19
19
  end
20
20
 
21
21
  def verify_mocks_for_rspec
@@ -2,22 +2,22 @@
2
2
  # hoops here.
3
3
  #
4
4
  # mocha >= '0.13.0':
5
- # require 'mocha/api' is required
6
- # require 'mocha/object' raises a LoadError b/c the file no longer exists
5
+ # require 'mocha/api' is required.
6
+ # require 'mocha/object' raises a LoadError b/c the file no longer exists.
7
7
  # mocha < '0.13.0', >= '0.9.7'
8
- # require 'mocha/api' is required
9
- # require 'mocha/object' is required
8
+ # require 'mocha/api' is required.
9
+ # require 'mocha/object' is required.
10
10
  # mocha < '0.9.7':
11
- # require 'mocha/api' raises a LoadError b/c the file does not yet exist
12
- # require 'mocha/standalone' is required
13
- # require 'mocha/object' is required
11
+ # require 'mocha/api' raises a LoadError b/c the file does not yet exist.
12
+ # require 'mocha/standalone' is required.
13
+ # require 'mocha/object' is required.
14
14
  begin
15
15
  require 'mocha/api'
16
16
 
17
17
  begin
18
18
  require 'mocha/object'
19
19
  rescue LoadError
20
- # Mocha >= 0.13.0 no longer contains this file nor needs it to be loaded
20
+ # Mocha >= 0.13.0 no longer contains this file nor needs it to be loaded.
21
21
  end
22
22
  rescue LoadError
23
23
  require 'mocha/standalone'
@@ -32,17 +32,25 @@ module RSpec::Core
32
32
  # end
33
33
  #
34
34
  # @attr example [RSpec::Core::Example] the current example
35
- ExampleNotification = Struct.new(:example) do
35
+ ExampleNotification = Struct.new(:example)
36
+ class ExampleNotification
36
37
  # @private
37
38
  def self.for(example)
38
- if example.execution_result.pending_fixed?
39
+ execution_result = example.execution_result
40
+
41
+ if execution_result.pending_fixed?
39
42
  PendingExampleFixedNotification.new(example)
40
- elsif example.execution_result.status == :failed
43
+ elsif execution_result.example_skipped?
44
+ SkippedExampleNotification.new(example)
45
+ elsif execution_result.status == :pending
46
+ PendingExampleFailedAsExpectedNotification.new(example)
47
+ elsif execution_result.status == :failed
41
48
  FailedExampleNotification.new(example)
42
49
  else
43
50
  new(example)
44
51
  end
45
52
  end
53
+
46
54
  private_class_method :new
47
55
  end
48
56
 
@@ -59,35 +67,42 @@ module RSpec::Core
59
67
  @reporter = reporter
60
68
  end
61
69
 
62
- # @return [Array(RSpec::Core::Example)] list of examples
70
+ # @return [Array<RSpec::Core::Example>] list of examples
63
71
  def examples
64
72
  @reporter.examples
65
73
  end
66
74
 
67
- # @return [Array(RSpec::Core::Example)] list of failed examples
75
+ # @return [Array<RSpec::Core::Example>] list of failed examples
68
76
  def failed_examples
69
77
  @reporter.failed_examples
70
78
  end
71
79
 
72
- # @return [Array(RSpec::Core::Example)] list of pending examples
80
+ # @return [Array<RSpec::Core::Example>] list of pending examples
73
81
  def pending_examples
74
82
  @reporter.pending_examples
75
83
  end
76
84
 
77
- # @return [Array(Rspec::Core::Notifications::ExampleNotification]
85
+ # @return [Array<RSpec::Core::Notifications::ExampleNotification>]
78
86
  # returns examples as notifications
79
87
  def notifications
80
88
  @notifications ||= format_examples(examples)
81
89
  end
82
90
 
83
- # @return [Array(Rspec::Core::Notifications::FailedExampleNotification]
91
+ # @return [Array<RSpec::Core::Notifications::FailedExampleNotification>]
84
92
  # returns failed examples as notifications
85
93
  def failure_notifications
86
94
  @failed_notifications ||= format_examples(failed_examples)
87
95
  end
88
96
 
89
- # @return [String] The list of failed examples, fully formatted in the way that
90
- # RSpec's built-in formatters emit.
97
+ # @return [Array<RSpec::Core::Notifications::SkippedExampleNotification,
98
+ # RSpec::Core::Notifications::PendingExampleFailedAsExpectedNotification>]
99
+ # returns pending examples as notifications
100
+ def pending_notifications
101
+ @pending_notifications ||= format_examples(pending_examples)
102
+ end
103
+
104
+ # @return [String] The list of failed examples, fully formatted in the way
105
+ # that RSpec's built-in formatters emit.
91
106
  def fully_formatted_failed_examples(colorizer=::RSpec::Core::Formatters::ConsoleCodes)
92
107
  formatted = "\nFailures:\n"
93
108
 
@@ -98,18 +113,13 @@ module RSpec::Core
98
113
  formatted
99
114
  end
100
115
 
101
- # @return [String] The list of pending examples, fully formatted in the way that
102
- # RSpec's built-in formatters emit.
116
+ # @return [String] The list of pending examples, fully formatted in the
117
+ # way that RSpec's built-in formatters emit.
103
118
  def fully_formatted_pending_examples(colorizer=::RSpec::Core::Formatters::ConsoleCodes)
104
- formatted = "\nPending:\n"
105
-
106
- pending_examples.each do |example|
107
- formatted_caller = RSpec.configuration.backtrace_formatter.backtrace_line(example.location)
119
+ formatted = "\nPending: (Failures listed here are expected and do not affect your suite's status)\n"
108
120
 
109
- formatted <<
110
- " #{colorizer.wrap(example.full_description, :pending)}\n" \
111
- " # #{colorizer.wrap(example.execution_result.pending_message, :detail)}\n" \
112
- " # #{colorizer.wrap(formatted_caller, :detail)}\n"
121
+ pending_notifications.each_with_index do |notification, index|
122
+ formatted << notification.fully_formatted(index.next, colorizer)
113
123
  end
114
124
 
115
125
  formatted
@@ -151,24 +161,24 @@ module RSpec::Core
151
161
 
152
162
  # Returns the message generated for this failure line by line.
153
163
  #
154
- # @return [Array(String)] The example failure message
164
+ # @return [Array<String>] The example failure message
155
165
  def message_lines
156
- add_shared_group_line(failure_lines, NullColorizer)
166
+ add_shared_group_lines(failure_lines, NullColorizer)
157
167
  end
158
168
 
159
169
  # Returns the message generated for this failure colorized line by line.
160
170
  #
161
171
  # @param colorizer [#wrap] An object to colorize the message_lines by
162
- # @return [Array(String)] The example failure message colorized
172
+ # @return [Array<String>] The example failure message colorized
163
173
  def colorized_message_lines(colorizer=::RSpec::Core::Formatters::ConsoleCodes)
164
- add_shared_group_line(failure_lines, colorizer).map do |line|
165
- colorizer.wrap line, RSpec.configuration.failure_color
174
+ add_shared_group_lines(failure_lines, colorizer).map do |line|
175
+ colorizer.wrap line, message_color
166
176
  end
167
177
  end
168
178
 
169
179
  # Returns the failures formatted backtrace.
170
180
  #
171
- # @return [Array(String)] the examples backtrace lines
181
+ # @return [Array<String>] the examples backtrace lines
172
182
  def formatted_backtrace
173
183
  backtrace_formatter.format_backtrace(exception.backtrace, example.metadata)
174
184
  end
@@ -176,7 +186,7 @@ module RSpec::Core
176
186
  # Returns the failures colorized formatted backtrace.
177
187
  #
178
188
  # @param colorizer [#wrap] An object to colorize the message_lines by
179
- # @return [Array(String)] the examples colorized backtrace lines
189
+ # @return [Array<String>] the examples colorized backtrace lines
180
190
  def colorized_formatted_backtrace(colorizer=::RSpec::Core::Formatters::ConsoleCodes)
181
191
  formatted_backtrace.map do |backtrace_info|
182
192
  colorizer.wrap "# #{backtrace_info}", RSpec.configuration.detail_color
@@ -186,17 +196,7 @@ module RSpec::Core
186
196
  # @return [String] The failure information fully formatted in the way that
187
197
  # RSpec's built-in formatters emit.
188
198
  def fully_formatted(failure_number, colorizer=::RSpec::Core::Formatters::ConsoleCodes)
189
- formatted = "\n #{failure_number}) #{description}\n"
190
-
191
- colorized_message_lines(colorizer).each do |line|
192
- formatted << RSpec::Support::EncodedString.new(" #{line}\n", encoding_of(formatted))
193
- end
194
-
195
- colorized_formatted_backtrace(colorizer).each do |line|
196
- formatted << RSpec::Support::EncodedString.new(" #{line}\n", encoding_of(formatted))
197
- end
198
-
199
- formatted
199
+ "\n #{failure_number}) #{description}\n#{formatted_message_and_backtrace(colorizer)}"
200
200
  end
201
201
 
202
202
  private
@@ -232,29 +232,12 @@ module RSpec::Core
232
232
  end
233
233
  end
234
234
 
235
- def add_shared_group_line(lines, colorizer)
236
- unless shared_group_line == ""
237
- lines << colorizer.wrap(shared_group_line, RSpec.configuration.default_color)
235
+ def add_shared_group_lines(lines, colorizer)
236
+ example.metadata[:shared_group_inclusion_backtrace].each do |frame|
237
+ lines << colorizer.wrap(frame.description, RSpec.configuration.default_color)
238
238
  end
239
- lines
240
- end
241
-
242
- def shared_group
243
- @shared_group ||= group_and_parent_groups.find { |group| group.metadata[:shared_group_name] }
244
- end
245
239
 
246
- def shared_group_line
247
- @shared_group_line ||=
248
- if shared_group
249
- "Shared Example Group: \"#{shared_group.metadata[:shared_group_name]}\"" \
250
- " called from #{backtrace_formatter.backtrace_line(shared_group.location)}"
251
- else
252
- ""
253
- end
254
- end
255
-
256
- def group_and_parent_groups
257
- example.example_group.parent_groups + [example.example_group]
240
+ lines
258
241
  end
259
242
 
260
243
  def read_failed_line
@@ -276,11 +259,29 @@ module RSpec::Core
276
259
  end
277
260
 
278
261
  def find_failed_line
279
- path = File.expand_path(example.file_path)
262
+ example_path = example.metadata[:absolute_file_path].downcase
280
263
  exception.backtrace.find do |line|
281
- match = line.match(/(.+?):(\d+)(|:\d+)/)
282
- match && match[1].downcase == path.downcase
264
+ next unless (line_path = line[/(.+?):(\d+)(|:\d+)/, 1])
265
+ File.expand_path(line_path).downcase == example_path
266
+ end
267
+ end
268
+
269
+ def formatted_message_and_backtrace(colorizer)
270
+ formatted = ""
271
+
272
+ colorized_message_lines(colorizer).each do |line|
273
+ formatted << RSpec::Support::EncodedString.new(" #{line}\n", encoding_of(formatted))
283
274
  end
275
+
276
+ colorized_formatted_backtrace(colorizer).each do |line|
277
+ formatted << RSpec::Support::EncodedString.new(" #{line}\n", encoding_of(formatted))
278
+ end
279
+
280
+ formatted
281
+ end
282
+
283
+ def message_color
284
+ RSpec.configuration.failure_color
284
285
  end
285
286
  end
286
287
 
@@ -292,7 +293,7 @@ module RSpec::Core
292
293
  class PendingExampleFixedNotification < FailedExampleNotification
293
294
  public_class_method :new
294
295
 
295
- # Returns the examples description
296
+ # Returns the examples description.
296
297
  #
297
298
  # @return [String] The example description
298
299
  def description
@@ -301,7 +302,7 @@ module RSpec::Core
301
302
 
302
303
  # Returns the message generated for this failure line by line.
303
304
  #
304
- # @return [Array(String)] The example failure message
305
+ # @return [Array<String>] The example failure message
305
306
  def message_lines
306
307
  ["Expected pending '#{example.execution_result.pending_message}' to fail. No Error was raised."]
307
308
  end
@@ -309,15 +310,70 @@ module RSpec::Core
309
310
  # Returns the message generated for this failure colorized line by line.
310
311
  #
311
312
  # @param colorizer [#wrap] An object to colorize the message_lines by
312
- # @return [Array(String)] The example failure message colorized
313
+ # @return [Array<String>] The example failure message colorized
313
314
  def colorized_message_lines(colorizer=::RSpec::Core::Formatters::ConsoleCodes)
314
315
  message_lines.map { |line| colorizer.wrap(line, RSpec.configuration.fixed_color) }
315
316
  end
316
317
  end
317
318
 
318
- # The `GroupNotification` represents notifications sent by the reporter which
319
- # contain information about the currently running (or soon to be) example group
320
- # It is used by formatters to access information about that group.
319
+ # @private
320
+ module PendingExampleNotificationMethods
321
+ private
322
+
323
+ def fully_formatted_header(pending_number, colorizer=::RSpec::Core::Formatters::ConsoleCodes)
324
+ colorizer.wrap("\n #{pending_number}) #{example.full_description}\n", :pending) <<
325
+ colorizer.wrap(" # #{example.execution_result.pending_message}\n", :detail)
326
+ end
327
+ end
328
+
329
+ # The `PendingExampleFailedAsExpectedNotification` extends `FailedExampleNotification` with
330
+ # things useful for pending specs that fail as expected.
331
+ #
332
+ # @attr [RSpec::Core::Example] example the current example
333
+ # @see ExampleNotification
334
+ class PendingExampleFailedAsExpectedNotification < FailedExampleNotification
335
+ include PendingExampleNotificationMethods
336
+ public_class_method :new
337
+
338
+ # @return [Exception] The exception that occurred while the pending example was executed
339
+ def exception
340
+ example.execution_result.pending_exception
341
+ end
342
+
343
+ # @return [String] The pending detail fully formatted in the way that
344
+ # RSpec's built-in formatters emit.
345
+ def fully_formatted(pending_number, colorizer=::RSpec::Core::Formatters::ConsoleCodes)
346
+ fully_formatted_header(pending_number, colorizer) << formatted_message_and_backtrace(colorizer)
347
+ end
348
+
349
+ private
350
+
351
+ def message_color
352
+ RSpec.configuration.pending_color
353
+ end
354
+ end
355
+
356
+ # The `SkippedExampleNotification` extends `ExampleNotification` with
357
+ # things useful for specs that are skipped.
358
+ #
359
+ # @attr [RSpec::Core::Example] example the current example
360
+ # @see ExampleNotification
361
+ class SkippedExampleNotification < ExampleNotification
362
+ include PendingExampleNotificationMethods
363
+ public_class_method :new
364
+
365
+ # @return [String] The pending detail fully formatted in the way that
366
+ # RSpec's built-in formatters emit.
367
+ def fully_formatted(pending_number, colorizer=::RSpec::Core::Formatters::ConsoleCodes)
368
+ formatted_caller = RSpec.configuration.backtrace_formatter.backtrace_line(example.location)
369
+ fully_formatted_header(pending_number, colorizer) << colorizer.wrap(" # #{formatted_caller}\n", :detail)
370
+ end
371
+ end
372
+
373
+ # The `GroupNotification` represents notifications sent by the reporter
374
+ # which contain information about the currently running (or soon to be)
375
+ # example group. It is used by formatters to access information about that
376
+ # group.
321
377
  #
322
378
  # @example
323
379
  # def example_group_started(notification)
@@ -333,11 +389,12 @@ module RSpec::Core
333
389
  MessageNotification = Struct.new(:message)
334
390
 
335
391
  # The `SeedNotification` holds the seed used to randomize examples and
336
- # wether that seed has been used or not.
392
+ # whether that seed has been used or not.
337
393
  #
338
394
  # @attr seed [Fixnum] the seed used to randomize ordering
339
- # @attr used [Boolean] wether the seed has been used or not
340
- SeedNotification = Struct.new(:seed, :used) do
395
+ # @attr used [Boolean] whether the seed has been used or not
396
+ SeedNotification = Struct.new(:seed, :used)
397
+ class SeedNotification
341
398
  # @api
342
399
  # @return [Boolean] has the seed been used?
343
400
  def seed_used?
@@ -348,7 +405,7 @@ module RSpec::Core
348
405
  # @return [String] The seed information fully formatted in the way that
349
406
  # RSpec's built-in formatters emit.
350
407
  def fully_formatted
351
- "\nRandomized with seed #{seed}\n\n"
408
+ "\nRandomized with seed #{seed}\n"
352
409
  end
353
410
  end
354
411
 
@@ -357,13 +414,13 @@ module RSpec::Core
357
414
  # of the test run.
358
415
  #
359
416
  # @attr duration [Float] the time taken (in seconds) to run the suite
360
- # @attr examples [Array(RSpec::Core::Example)] the examples run
361
- # @attr failed_examples [Array(RSpec::Core::Example)] the failed examples
362
- # @attr pending_examples [Array(RSpec::Core::Example)] the pending examples
417
+ # @attr examples [Array<RSpec::Core::Example>] the examples run
418
+ # @attr failed_examples [Array<RSpec::Core::Example>] the failed examples
419
+ # @attr pending_examples [Array<RSpec::Core::Example>] the pending examples
363
420
  # @attr load_time [Float] the number of seconds taken to boot RSpec
364
421
  # and load the spec files
365
- SummaryNotification = Struct.new(:duration, :examples, :failed_examples, :pending_examples, :load_time) do
366
-
422
+ SummaryNotification = Struct.new(:duration, :examples, :failed_examples, :pending_examples, :load_time)
423
+ class SummaryNotification
367
424
  # @api
368
425
  # @return [Fixnum] the number of examples run
369
426
  def example_count
@@ -420,18 +477,19 @@ module RSpec::Core
420
477
  def colorized_rerun_commands(colorizer=::RSpec::Core::Formatters::ConsoleCodes)
421
478
  "\nFailed examples:\n\n" +
422
479
  failed_examples.map do |example|
423
- colorizer.wrap("rspec #{example.location}", RSpec.configuration.failure_color) + " " +
424
- colorizer.wrap("# #{example.full_description}", RSpec.configuration.detail_color)
480
+ colorizer.wrap("rspec #{example.rerun_argument}", RSpec.configuration.failure_color) + " " +
481
+ colorizer.wrap("# #{example.full_description}", RSpec.configuration.detail_color)
425
482
  end.join("\n")
426
483
  end
427
484
 
428
- # @return [String] a formatted version of the time it took to run the suite
485
+ # @return [String] a formatted version of the time it took to run the
486
+ # suite
429
487
  def formatted_duration
430
488
  Formatters::Helpers.format_duration(duration)
431
489
  end
432
490
 
433
- # @return [String] a formatted version of the time it took to boot RSpec and
434
- # load the spec files
491
+ # @return [String] a formatted version of the time it took to boot RSpec
492
+ # and load the spec files
435
493
  def formatted_load_time
436
494
  Formatters::Helpers.format_duration(load_time)
437
495
  end
@@ -451,16 +509,16 @@ module RSpec::Core
451
509
  end
452
510
  end
453
511
 
454
- # The `ProfileNotification` holds information about the results of running
455
- # a test suite when profiling is enabled. It is used by formatters to provide
512
+ # The `ProfileNotification` holds information about the results of running a
513
+ # test suite when profiling is enabled. It is used by formatters to provide
456
514
  # information at the end of the test run for profiling information.
457
515
  #
458
516
  # @attr duration [Float] the time taken (in seconds) to run the suite
459
- # @attr examples [Array(RSpec::Core::Example)] the examples run
517
+ # @attr examples [Array<RSpec::Core::Example>] the examples run
460
518
  # @attr number_of_examples [Fixnum] the number of examples to profile
461
- ProfileNotification = Struct.new(:duration, :examples, :number_of_examples) do
462
-
463
- # @return [Array(RSpec::Core::Example)] the slowest examples
519
+ ProfileNotification = Struct.new(:duration, :examples, :number_of_examples)
520
+ class ProfileNotification
521
+ # @return [Array<RSpec::Core::Example>] the slowest examples
464
522
  def slowest_examples
465
523
  @slowest_examples ||=
466
524
  examples.sort_by do |example|
@@ -485,7 +543,7 @@ module RSpec::Core
485
543
  end
486
544
  end
487
545
 
488
- # @return [Array(RSpec::Core::Example)] the slowest example groups
546
+ # @return [Array<RSpec::Core::Example>] the slowest example groups
489
547
  def slowest_groups
490
548
  @slowest_groups ||= calculate_slowest_groups
491
549
  end
@@ -517,14 +575,17 @@ module RSpec::Core
517
575
  end
518
576
 
519
577
  # The `DeprecationNotification` is issued by the reporter when a deprecated
520
- # part of RSpec is encountered. It represents information about the deprecated
521
- # call site.
578
+ # part of RSpec is encountered. It represents information about the
579
+ # deprecated call site.
522
580
  #
523
581
  # @attr message [String] A custom message about the deprecation
524
- # @attr deprecated [String] A custom message about the deprecation (alias of message)
582
+ # @attr deprecated [String] A custom message about the deprecation (alias of
583
+ # message)
525
584
  # @attr replacement [String] An optional replacement for the deprecation
526
- # @attr call_site [String] An optional call site from which the deprecation was issued
527
- DeprecationNotification = Struct.new(:deprecated, :message, :replacement, :call_site) do
585
+ # @attr call_site [String] An optional call site from which the deprecation
586
+ # was issued
587
+ DeprecationNotification = Struct.new(:deprecated, :message, :replacement, :call_site)
588
+ class DeprecationNotification
528
589
  private_class_method :new
529
590
 
530
591
  # @api