rspec-core 3.1.7 → 3.2.0

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 (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