rspec-core 2.13.1 → 2.14.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.
- data/Changelog.md +80 -0
- data/exe/autospec +1 -1
- data/features/README.md +2 -2
- data/features/command_line/format_option.feature +8 -14
- data/features/command_line/line_number_appended_to_path.feature +4 -4
- data/features/command_line/line_number_option.feature +1 -1
- data/features/command_line/rake_task.feature +2 -2
- data/features/command_line/require_option.feature +43 -0
- data/features/command_line/ruby.feature +2 -2
- data/features/command_line/warnings_option.feature +27 -0
- data/features/configuration/backtrace_clean_patterns.feature +2 -2
- data/features/configuration/deprecation_stream.feature +58 -0
- data/features/configuration/pattern.feature +8 -0
- data/features/configuration/profile.feature +59 -2
- data/features/configuration/read_options_from_file.feature +8 -5
- data/features/configuration/run_all_when_everything_filtered.feature +20 -4
- data/features/example_groups/basic_structure.feature +1 -1
- data/features/example_groups/shared_context.feature +1 -1
- data/features/example_groups/shared_examples.feature +72 -0
- data/features/filtering/exclusion_filters.feature +10 -10
- data/features/formatters/custom_formatter.feature +1 -1
- data/features/hooks/before_and_after_hooks.feature +19 -19
- data/features/mock_framework_integration/use_any_framework.feature +6 -6
- data/features/mock_framework_integration/use_flexmock.feature +3 -3
- data/features/mock_framework_integration/use_mocha.feature +3 -3
- data/features/mock_framework_integration/use_rr.feature +3 -3
- data/features/mock_framework_integration/use_rspec.feature +3 -3
- data/features/subject/implicit_subject.feature +1 -1
- data/lib/rspec/core.rb +20 -3
- data/lib/rspec/core/backtrace_cleaner.rb +46 -0
- data/lib/rspec/core/backward_compatibility.rb +3 -13
- data/lib/rspec/core/configuration.rb +136 -49
- data/lib/rspec/core/configuration_options.rb +19 -8
- data/lib/rspec/core/deprecation.rb +18 -30
- data/lib/rspec/core/example.rb +3 -3
- data/lib/rspec/core/example_group.rb +4 -3
- data/lib/rspec/core/extensions/kernel.rb +1 -1
- data/lib/rspec/core/filter_manager.rb +1 -1
- data/lib/rspec/core/formatters.rb +1 -1
- data/lib/rspec/core/formatters/base_formatter.rb +10 -1
- data/lib/rspec/core/formatters/base_text_formatter.rb +47 -10
- data/lib/rspec/core/formatters/deprecation_formatter.rb +35 -0
- data/lib/rspec/core/formatters/helpers.rb +12 -5
- data/lib/rspec/core/formatters/html_formatter.rb +7 -6
- data/lib/rspec/core/formatters/html_printer.rb +13 -12
- data/lib/rspec/core/formatters/json_formatter.rb +1 -2
- data/lib/rspec/core/formatters/text_mate_formatter.rb +1 -1
- data/lib/rspec/core/hooks.rb +9 -0
- data/lib/rspec/core/memoized_helpers.rb +19 -8
- data/lib/rspec/core/metadata.rb +3 -1
- data/lib/rspec/core/mocking/with_flexmock.rb +1 -1
- data/lib/rspec/core/mocking/with_rr.rb +1 -1
- data/lib/rspec/core/option_parser.rb +6 -2
- data/lib/rspec/core/pending.rb +1 -0
- data/lib/rspec/core/rake_task.rb +11 -19
- data/lib/rspec/core/reporter.rb +33 -4
- data/lib/rspec/core/shared_example_group.rb +56 -16
- data/lib/rspec/core/shared_example_group/collection.rb +42 -0
- data/lib/rspec/core/version.rb +1 -1
- data/lib/rspec/core/world.rb +2 -3
- data/spec/autotest/rspec_spec.rb +2 -2
- data/spec/rspec/core/backtrace_cleaner_spec.rb +68 -0
- data/spec/rspec/core/configuration_options_spec.rb +15 -4
- data/spec/rspec/core/configuration_spec.rb +202 -19
- data/spec/rspec/core/deprecation_spec.rb +41 -0
- data/spec/rspec/core/deprecations_spec.rb +10 -12
- data/spec/rspec/core/drb_command_line_spec.rb +1 -1
- data/spec/rspec/core/example_group_spec.rb +37 -36
- data/spec/rspec/core/example_spec.rb +25 -4
- data/spec/rspec/core/filter_manager_spec.rb +6 -6
- data/spec/rspec/core/formatters/base_text_formatter_spec.rb +101 -36
- data/spec/rspec/core/formatters/deprecation_formatter_spec.rb +78 -0
- data/spec/rspec/core/formatters/documentation_formatter_spec.rb +2 -2
- data/spec/rspec/core/formatters/helpers_spec.rb +23 -7
- data/spec/rspec/core/formatters/html_formatted-1.8.7-jruby.html +20 -14
- data/spec/rspec/core/formatters/html_formatted-1.8.7-rbx.html +69 -169
- data/spec/rspec/core/formatters/html_formatted-1.8.7.html +28 -23
- data/spec/rspec/core/formatters/html_formatted-1.9.2.html +42 -33
- data/spec/rspec/core/formatters/html_formatted-1.9.3-jruby.html +17 -23
- data/spec/rspec/core/formatters/html_formatted-1.9.3-rbx.html +57 -157
- data/spec/rspec/core/formatters/html_formatted-1.9.3.html +42 -33
- data/spec/rspec/core/formatters/html_formatted-2.0.0.html +42 -33
- data/spec/rspec/core/formatters/html_formatter_spec.rb +1 -0
- data/spec/rspec/core/formatters/progress_formatter_spec.rb +3 -3
- data/spec/rspec/core/formatters/text_mate_formatted-1.8.7-jruby.html +11 -14
- data/spec/rspec/core/formatters/text_mate_formatted-1.8.7-rbx.html +103 -203
- data/spec/rspec/core/formatters/text_mate_formatted-1.8.7.html +30 -25
- data/spec/rspec/core/formatters/text_mate_formatted-1.9.2.html +42 -33
- data/spec/rspec/core/formatters/text_mate_formatted-1.9.3-jruby.html +20 -14
- data/spec/rspec/core/formatters/text_mate_formatted-1.9.3-rbx.html +103 -203
- data/spec/rspec/core/formatters/text_mate_formatted-1.9.3.html +42 -33
- data/spec/rspec/core/formatters/text_mate_formatted-2.0.0.html +42 -33
- data/spec/rspec/core/formatters/text_mate_formatter_spec.rb +1 -0
- data/spec/rspec/core/memoized_helpers_spec.rb +28 -0
- data/spec/rspec/core/metadata_spec.rb +8 -3
- data/spec/rspec/core/option_parser_spec.rb +8 -0
- data/spec/rspec/core/project_initializer_spec.rb +2 -2
- data/spec/rspec/core/rake_task_spec.rb +8 -8
- data/spec/rspec/core/reporter_spec.rb +26 -6
- data/spec/rspec/core/resources/formatter_specs.rb +3 -3
- data/spec/rspec/core/shared_context_spec.rb +20 -0
- data/spec/rspec/core/shared_example_group/collection_spec.rb +70 -0
- data/spec/rspec/core/shared_example_group_spec.rb +4 -4
- data/spec/rspec/core/world_spec.rb +1 -3
- data/spec/rspec/core_spec.rb +20 -0
- data/spec/spec_helper.rb +29 -29
- data/spec/support/helper_methods.rb +9 -1
- data/spec/support/isolate_load_path_mutation.rb +6 -0
- data/spec/support/sandboxed_mock_space.rb +100 -0
- metadata +28 -13
- data/features/filtering/run_all_when_everything_filtered.feature +0 -46
- data/lib/rspec/core/load_path.rb +0 -3
@@ -19,15 +19,12 @@ module RSpec
|
|
19
19
|
end
|
20
20
|
|
21
21
|
def configure(config)
|
22
|
-
formatters = options.delete(:formatters)
|
23
|
-
|
24
22
|
config.filter_manager = filter_manager
|
23
|
+
process_options_into config
|
25
24
|
|
26
|
-
|
27
|
-
force?(key) ? config.force(key => options[key]) : config.send("#{key}=", options[key])
|
28
|
-
end
|
25
|
+
config.setup_load_path_and_require(options[:requires] || [])
|
29
26
|
|
30
|
-
|
27
|
+
load_formatters_into config
|
31
28
|
end
|
32
29
|
|
33
30
|
def parse_options
|
@@ -55,6 +52,8 @@ module RSpec
|
|
55
52
|
|
56
53
|
MERGED_OPTIONS = [:requires, :libs].to_set
|
57
54
|
|
55
|
+
UNPROCESSABLE_OPTIONS = [:formatters, :requires].to_set
|
56
|
+
|
58
57
|
def force?(key)
|
59
58
|
!NON_FORCED_OPTIONS.include?(key)
|
60
59
|
end
|
@@ -66,6 +65,18 @@ module RSpec
|
|
66
65
|
keys
|
67
66
|
end
|
68
67
|
|
68
|
+
def process_options_into(config)
|
69
|
+
opts = options.reject { |k, _| UNPROCESSABLE_OPTIONS.include? k }
|
70
|
+
|
71
|
+
order(opts.keys, :libs, :default_path, :pattern).each do |key|
|
72
|
+
force?(key) ? config.force(key => opts[key]) : config.send("#{key}=", opts[key])
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def load_formatters_into(config)
|
77
|
+
options[:formatters].each { |pair| config.add_formatter(*pair) } if options[:formatters]
|
78
|
+
end
|
79
|
+
|
69
80
|
def extract_filters_from(*configs)
|
70
81
|
configs.compact.each do |config|
|
71
82
|
filter_manager.include config.delete(:inclusion_filter) if config.has_key?(:inclusion_filter)
|
@@ -112,11 +123,11 @@ module RSpec
|
|
112
123
|
def args_from_options_file(path)
|
113
124
|
return [] unless path && File.exist?(path)
|
114
125
|
config_string = options_file_as_erb_string(path)
|
115
|
-
config_string.split(/\n+/).map {|l| l
|
126
|
+
config_string.split(/\n+/).map {|l| Shellwords.shellwords(l) }.flatten
|
116
127
|
end
|
117
128
|
|
118
129
|
def options_file_as_erb_string(path)
|
119
|
-
ERB.new(File.read(path)).result(binding)
|
130
|
+
ERB.new(File.read(path), nil, '-').result(binding)
|
120
131
|
end
|
121
132
|
|
122
133
|
def custom_options_file
|
@@ -1,36 +1,24 @@
|
|
1
1
|
module RSpec
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
DEPRECATION WARNING: you are using deprecated behaviour that will
|
13
|
-
be removed from #{version_string}.
|
14
|
-
|
15
|
-
#{caller(0)[2]}
|
16
|
-
|
17
|
-
* #{method} is deprecated.
|
18
|
-
NOTICE
|
19
|
-
if alternate_method
|
20
|
-
message << <<-ADDITIONAL
|
21
|
-
* please use #{alternate_method} instead.
|
22
|
-
ADDITIONAL
|
2
|
+
module Core
|
3
|
+
module Deprecation
|
4
|
+
# @private
|
5
|
+
#
|
6
|
+
# Used internally to print deprecation warnings
|
7
|
+
def deprecate(deprecated, replacement_or_hash={}, ignore_version=nil)
|
8
|
+
# Temporarily support old and new APIs while we transition the other
|
9
|
+
# rspec libs to use a hash for the 2nd arg and no version arg
|
10
|
+
data = Hash === replacement_or_hash ? replacement_or_hash : { :replacement => replacement_or_hash }
|
11
|
+
RSpec.configuration.reporter.deprecation data.merge(:deprecated => deprecated, :call_site => caller(0)[2])
|
23
12
|
end
|
24
13
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
# Used internally to print deprecation warnings
|
32
|
-
def warn_deprecation(message)
|
33
|
-
warn message
|
14
|
+
# @private
|
15
|
+
#
|
16
|
+
# Used internally to print deprecation warnings
|
17
|
+
def warn_deprecation(message)
|
18
|
+
RSpec.configuration.reporter.deprecation :message => message
|
19
|
+
end
|
34
20
|
end
|
35
21
|
end
|
22
|
+
|
23
|
+
extend(Core::Deprecation)
|
36
24
|
end
|
data/lib/rspec/core/example.rb
CHANGED
@@ -79,7 +79,7 @@ module RSpec
|
|
79
79
|
def initialize(example_group_class, description, metadata, example_block=nil)
|
80
80
|
@example_group_class, @options, @example_block = example_group_class, metadata, example_block
|
81
81
|
@metadata = @example_group_class.metadata.for_example(description, metadata)
|
82
|
-
@exception = nil
|
82
|
+
@example_group_instance = @exception = nil
|
83
83
|
@pending_declared_in_example = false
|
84
84
|
end
|
85
85
|
|
@@ -317,8 +317,8 @@ An error occurred #{context}
|
|
317
317
|
|
318
318
|
def assign_generated_description
|
319
319
|
return unless RSpec.configuration.expecting_with_rspec?
|
320
|
-
if metadata[:
|
321
|
-
metadata[:
|
320
|
+
if metadata[:description_args].empty? and !pending?
|
321
|
+
metadata[:description_args] << RSpec::Matchers.generated_description
|
322
322
|
end
|
323
323
|
RSpec::Matchers.clear_generated_description
|
324
324
|
end
|
@@ -162,7 +162,7 @@ module RSpec
|
|
162
162
|
# @private
|
163
163
|
def self.find_and_eval_shared(label, name, *args, &customization_block)
|
164
164
|
raise ArgumentError, "Could not find shared #{label} #{name.inspect}" unless
|
165
|
-
shared_block =
|
165
|
+
shared_block = shared_example_groups[name]
|
166
166
|
|
167
167
|
module_eval_with_args(*args, &shared_block)
|
168
168
|
module_eval(&customization_block) if customization_block
|
@@ -287,8 +287,8 @@ module RSpec
|
|
287
287
|
args << build_metadata_hash_from(args)
|
288
288
|
args.unshift(symbol_description) if symbol_description
|
289
289
|
@metadata = RSpec::Core::Metadata.new(superclass_metadata).process(*args)
|
290
|
-
world.configure_group(self)
|
291
290
|
hooks.register_globals(self, RSpec.configuration.hooks)
|
291
|
+
world.configure_group(self)
|
292
292
|
end
|
293
293
|
|
294
294
|
# @private
|
@@ -444,7 +444,8 @@ An error occurred in an after(:all) hook.
|
|
444
444
|
|
445
445
|
# @deprecated use {ExampleGroup#example}
|
446
446
|
def running_example
|
447
|
-
RSpec.deprecate("running_example",
|
447
|
+
RSpec.deprecate("running_example",
|
448
|
+
:replacement => "example")
|
448
449
|
example
|
449
450
|
end
|
450
451
|
|
@@ -107,7 +107,7 @@ module RSpec
|
|
107
107
|
# Emits a deprecation warning for keys that will not be supported in
|
108
108
|
# the future.
|
109
109
|
def _warn_deprecated_key(key, updates)
|
110
|
-
RSpec.
|
110
|
+
RSpec.deprecate("FilterManager#exclude(#{key.inspect} => #{updates[key].inspect})")
|
111
111
|
@exclusions[key] = updates.delete(key)
|
112
112
|
end
|
113
113
|
end
|
@@ -16,7 +16,7 @@
|
|
16
16
|
#
|
17
17
|
# rspec --format documentation --format html --out results.html
|
18
18
|
#
|
19
|
-
# This example sends the output of the documentation formatter to
|
19
|
+
# This example sends the output of the documentation formatter to `$stdout`, and
|
20
20
|
# the output of the html formatter to results.html.
|
21
21
|
#
|
22
22
|
# ## Custom Formatters
|
@@ -105,7 +105,7 @@ module RSpec
|
|
105
105
|
# @api public
|
106
106
|
#
|
107
107
|
# Used by the reporter to send messages to the output stream.
|
108
|
-
#
|
108
|
+
#
|
109
109
|
# @param [String] message
|
110
110
|
def message(message)
|
111
111
|
end
|
@@ -228,9 +228,18 @@ module RSpec
|
|
228
228
|
configuration.profile_examples
|
229
229
|
end
|
230
230
|
|
231
|
+
def fail_fast?
|
232
|
+
configuration.fail_fast
|
233
|
+
end
|
234
|
+
|
231
235
|
def color_enabled?
|
232
236
|
configuration.color_enabled?(output)
|
233
237
|
end
|
238
|
+
|
239
|
+
def mute_profile_output?(failure_count)
|
240
|
+
# Don't print out profiled info if there are failures and `--fail-fast` is used, it just clutters the output
|
241
|
+
!profile_examples? || (fail_fast? && failure_count != 0)
|
242
|
+
end
|
234
243
|
end
|
235
244
|
end
|
236
245
|
end
|
@@ -44,7 +44,7 @@ module RSpec
|
|
44
44
|
|
45
45
|
def dump_summary(duration, example_count, failure_count, pending_count)
|
46
46
|
super(duration, example_count, failure_count, pending_count)
|
47
|
-
dump_profile
|
47
|
+
dump_profile unless mute_profile_output?(failure_count)
|
48
48
|
output.puts "\nFinished in #{format_duration(duration)}\n"
|
49
49
|
output.puts colorise_summary(summary_line(example_count, failure_count, pending_count))
|
50
50
|
dump_commands_to_rerun_failed_examples
|
@@ -67,9 +67,14 @@ module RSpec
|
|
67
67
|
|
68
68
|
# @api public
|
69
69
|
#
|
70
|
-
# Outputs the slowest examples in a report when using `--profile COUNT` (default 10).
|
71
|
-
#
|
70
|
+
# Outputs the slowest examples and example groups in a report when using `--profile COUNT` (default 10).
|
71
|
+
#
|
72
72
|
def dump_profile
|
73
|
+
dump_profile_slowest_examples
|
74
|
+
dump_profile_slowest_example_groups
|
75
|
+
end
|
76
|
+
|
77
|
+
def dump_profile_slowest_examples
|
73
78
|
number_of_examples = RSpec.configuration.profile_examples
|
74
79
|
sorted_examples = examples.sort_by {|example|
|
75
80
|
example.execution_result[:run_time] }.reverse.first(number_of_examples)
|
@@ -88,6 +93,38 @@ module RSpec
|
|
88
93
|
end
|
89
94
|
end
|
90
95
|
|
96
|
+
def dump_profile_slowest_example_groups
|
97
|
+
number_of_examples = RSpec.configuration.profile_examples
|
98
|
+
example_groups = {}
|
99
|
+
|
100
|
+
examples.each do |example|
|
101
|
+
location = example.example_group.parent_groups.last.metadata[:example_group][:location]
|
102
|
+
|
103
|
+
example_groups[location] ||= Hash.new(0)
|
104
|
+
example_groups[location][:total_time] += example.execution_result[:run_time]
|
105
|
+
example_groups[location][:count] += 1
|
106
|
+
example_groups[location][:description] = example.example_group.top_level_description unless example_groups[location].has_key?(:description)
|
107
|
+
end
|
108
|
+
|
109
|
+
# stop if we've only one example group
|
110
|
+
return if example_groups.keys.length <= 1
|
111
|
+
|
112
|
+
example_groups.each do |loc, hash|
|
113
|
+
hash[:average] = hash[:total_time].to_f / hash[:count]
|
114
|
+
end
|
115
|
+
|
116
|
+
sorted_groups = example_groups.sort_by {|_, hash| -hash[:average]}.first(number_of_examples)
|
117
|
+
|
118
|
+
output.puts "\nTop #{sorted_groups.size} slowest example groups:"
|
119
|
+
sorted_groups.each do |loc, hash|
|
120
|
+
average = "#{failure_color(format_seconds(hash[:average]))} #{failure_color("seconds")} average"
|
121
|
+
total = "#{format_seconds(hash[:total_time])} seconds"
|
122
|
+
count = pluralize(hash[:count], "example")
|
123
|
+
output.puts " #{hash[:description]}"
|
124
|
+
output.puts detail_color(" #{average} (#{total} / #{count}) #{loc}")
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
91
128
|
# @api public
|
92
129
|
#
|
93
130
|
# Outputs summary with number of examples, failures and pending.
|
@@ -188,37 +225,37 @@ module RSpec
|
|
188
225
|
end
|
189
226
|
|
190
227
|
def red(text)
|
191
|
-
RSpec.deprecate("RSpec::Core::Formatters::BaseTextFormatter#red", "#failure_color"
|
228
|
+
RSpec.deprecate("RSpec::Core::Formatters::BaseTextFormatter#red", :replacement => "#failure_color")
|
192
229
|
color(text, :red)
|
193
230
|
end
|
194
231
|
|
195
232
|
def green(text)
|
196
|
-
RSpec.deprecate("RSpec::Core::Formatters::BaseTextFormatter#green", "#success_color"
|
233
|
+
RSpec.deprecate("RSpec::Core::Formatters::BaseTextFormatter#green", :replacement => "#success_color")
|
197
234
|
color(text, :green)
|
198
235
|
end
|
199
236
|
|
200
237
|
def yellow(text)
|
201
|
-
RSpec.deprecate("RSpec::Core::Formatters::BaseTextFormatter#yellow", "#pending_color"
|
238
|
+
RSpec.deprecate("RSpec::Core::Formatters::BaseTextFormatter#yellow", :replacement => "#pending_color")
|
202
239
|
color(text, :yellow)
|
203
240
|
end
|
204
241
|
|
205
242
|
def blue(text)
|
206
|
-
RSpec.deprecate("RSpec::Core::Formatters::BaseTextFormatter#blue", "#fixed_color"
|
243
|
+
RSpec.deprecate("RSpec::Core::Formatters::BaseTextFormatter#blue", :replacement => "#fixed_color")
|
207
244
|
color(text, :blue)
|
208
245
|
end
|
209
246
|
|
210
247
|
def magenta(text)
|
211
|
-
RSpec.deprecate("RSpec::Core::Formatters::BaseTextFormatter#magenta"
|
248
|
+
RSpec.deprecate("RSpec::Core::Formatters::BaseTextFormatter#magenta")
|
212
249
|
color(text, :magenta)
|
213
250
|
end
|
214
251
|
|
215
252
|
def cyan(text)
|
216
|
-
RSpec.deprecate("RSpec::Core::Formatters::BaseTextFormatter#cyan", "#detail_color"
|
253
|
+
RSpec.deprecate("RSpec::Core::Formatters::BaseTextFormatter#cyan", :replacement => "#detail_color")
|
217
254
|
color(text, :cyan)
|
218
255
|
end
|
219
256
|
|
220
257
|
def white(text)
|
221
|
-
RSpec.deprecate("RSpec::Core::Formatters::BaseTextFormatter#white", "#default_color"
|
258
|
+
RSpec.deprecate("RSpec::Core::Formatters::BaseTextFormatter#white", :replacement => "#default_color")
|
222
259
|
color(text, :white)
|
223
260
|
end
|
224
261
|
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module RSpec
|
2
|
+
module Core
|
3
|
+
module Formatters
|
4
|
+
class DeprecationFormatter
|
5
|
+
def initialize(deprecation_stream=$stderr, summary_stream=$stdout)
|
6
|
+
@deprecation_stream = deprecation_stream
|
7
|
+
@summary_stream = summary_stream
|
8
|
+
@count = 0
|
9
|
+
end
|
10
|
+
|
11
|
+
def deprecation(data)
|
12
|
+
@count += 1
|
13
|
+
if data[:message]
|
14
|
+
@deprecation_stream.print data[:message]
|
15
|
+
else
|
16
|
+
@deprecation_stream.print "DEPRECATION: " unless File === @deprecation_stream
|
17
|
+
@deprecation_stream.print "#{data[:deprecated]} is deprecated."
|
18
|
+
@deprecation_stream.print " Use #{data[:replacement]} instead." if data[:replacement]
|
19
|
+
@deprecation_stream.print " Called from #{data[:call_site]}." if data[:call_site]
|
20
|
+
@deprecation_stream.puts
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def deprecation_summary
|
25
|
+
if @count > 0 && File === @deprecation_stream
|
26
|
+
@summary_stream.print "\n#{@count} deprecation"
|
27
|
+
@summary_stream.print "s" if @count > 1
|
28
|
+
@summary_stream.print " logged to "
|
29
|
+
@summary_stream.puts @deprecation_stream.path
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -18,7 +18,7 @@ module RSpec
|
|
18
18
|
protected
|
19
19
|
|
20
20
|
def backtrace_line(line)
|
21
|
-
return nil if RSpec.configuration.
|
21
|
+
return nil if RSpec.configuration.backtrace_cleaner.exclude?(line)
|
22
22
|
RSpec::Core::Metadata::relative_path(line)
|
23
23
|
rescue SecurityError
|
24
24
|
nil
|
@@ -43,20 +43,27 @@ module RSpec
|
|
43
43
|
# format_duration(1) #=> "1 minute 1 second"
|
44
44
|
# format_duration(135.14) #=> "2 minutes 15.14 seconds"
|
45
45
|
def format_duration(duration)
|
46
|
+
precision = case
|
47
|
+
when duration < 1; SUB_SECOND_PRECISION
|
48
|
+
when duration < 120; DEFAULT_PRECISION
|
49
|
+
when duration < 300; 1
|
50
|
+
else 0
|
51
|
+
end
|
52
|
+
|
46
53
|
if duration > 60
|
47
54
|
minutes = duration.to_i / 60
|
48
55
|
seconds = duration - minutes * 60
|
49
56
|
|
50
|
-
"#{pluralize(minutes, 'minute')} #{pluralize(format_seconds(seconds), 'second')}"
|
57
|
+
"#{pluralize(minutes, 'minute')} #{pluralize(format_seconds(seconds, precision), 'second')}"
|
51
58
|
else
|
52
|
-
pluralize(format_seconds(duration), 'second')
|
59
|
+
pluralize(format_seconds(duration, precision), 'second')
|
53
60
|
end
|
54
61
|
end
|
55
62
|
|
56
63
|
# @api private
|
57
64
|
#
|
58
65
|
# Formats seconds to have 5 digits of precision with trailing zeros removed if the number
|
59
|
-
#
|
66
|
+
# is less than 1 or with 2 digits of precision if the number is greater than zero.
|
60
67
|
#
|
61
68
|
# @param [Float] float
|
62
69
|
# @return [String] formatted float
|
@@ -69,7 +76,7 @@ module RSpec
|
|
69
76
|
# The precision used is set in {Helpers::SUB_SECOND_PRECISION} and {Helpers::DEFAULT_PRECISION}.
|
70
77
|
#
|
71
78
|
# @see #strip_trailing_zeroes
|
72
|
-
def format_seconds(float)
|
79
|
+
def format_seconds(float, precision = nil)
|
73
80
|
precision ||= (float < 1) ? SUB_SECOND_PRECISION : DEFAULT_PRECISION
|
74
81
|
formatted = sprintf("%.#{precision}f", float)
|
75
82
|
strip_trailing_zeroes(formatted)
|
@@ -72,7 +72,7 @@ module RSpec
|
|
72
72
|
|
73
73
|
unless @header_red
|
74
74
|
@header_red = true
|
75
|
-
@printer.make_header_red
|
75
|
+
@printer.make_header_red
|
76
76
|
end
|
77
77
|
|
78
78
|
unless @example_group_red
|
@@ -84,22 +84,23 @@ module RSpec
|
|
84
84
|
|
85
85
|
exception = example.metadata[:execution_result][:exception]
|
86
86
|
exception_details = if exception
|
87
|
-
{
|
88
|
-
:message => exception.message,
|
87
|
+
{
|
88
|
+
:message => exception.message,
|
89
89
|
:backtrace => format_backtrace(exception.backtrace, example).join("\n")
|
90
90
|
}
|
91
91
|
else
|
92
|
-
false
|
92
|
+
false
|
93
93
|
end
|
94
94
|
extra = extra_failure_content(exception)
|
95
95
|
|
96
|
-
@printer.print_example_failed(
|
96
|
+
@printer.print_example_failed(
|
97
97
|
exception.pending_fixed?,
|
98
98
|
example.description,
|
99
99
|
example.execution_result[:run_time],
|
100
100
|
@failed_examples.size,
|
101
101
|
exception_details,
|
102
|
-
(extra == "") ? false : extra
|
102
|
+
(extra == "") ? false : extra,
|
103
|
+
true
|
103
104
|
)
|
104
105
|
@printer.flush
|
105
106
|
end
|