rspec-core 2.99.0.beta2 → 2.99.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.
- checksums.yaml +7 -0
- data/Changelog.md +122 -43
- data/features/command_line/line_number_option.feature +6 -11
- data/features/configuration/read_options_from_file.feature +2 -2
- data/features/expectation_framework_integration/configure_expectation_framework.feature +120 -25
- data/lib/autotest/discover.rb +10 -1
- data/lib/autotest/rspec2.rb +1 -1
- data/lib/rspec/core/command_line.rb +16 -5
- data/lib/rspec/core/configuration.rb +151 -119
- data/lib/rspec/core/deprecated_mutable_array_proxy.rb +32 -0
- data/lib/rspec/core/example.rb +3 -1
- data/lib/rspec/core/example_group.rb +174 -125
- data/lib/rspec/core/filter_manager.rb +48 -10
- data/lib/rspec/core/formatters.rb +137 -0
- data/lib/rspec/core/formatters/base_text_formatter.rb +25 -29
- data/lib/rspec/core/formatters/console_codes.rb +42 -0
- data/lib/rspec/core/formatters/deprecation_formatter.rb +14 -5
- data/lib/rspec/core/formatters/helpers.rb +1 -1
- data/lib/rspec/core/memoized_helpers.rb +2 -1
- data/lib/rspec/core/metadata.rb +63 -1
- data/lib/rspec/core/minitest_assertions_adapter.rb +28 -0
- data/lib/rspec/core/option_parser.rb +20 -1
- data/lib/rspec/core/pending.rb +26 -4
- data/lib/rspec/core/reporter.rb +1 -1
- data/lib/rspec/core/runner.rb +2 -2
- data/lib/rspec/core/shared_example_group.rb +11 -4
- data/lib/rspec/core/test_unit_assertions_adapter.rb +30 -0
- data/lib/rspec/core/version.rb +1 -1
- data/lib/rspec/core/world.rb +2 -2
- data/spec/autotest/discover_spec.rb +38 -8
- data/spec/rspec/core/command_line_spec.rb +47 -29
- data/spec/rspec/core/configuration_options_spec.rb +1 -1
- data/spec/rspec/core/configuration_spec.rb +223 -37
- data/spec/rspec/core/example_group_spec.rb +116 -6
- data/spec/rspec/core/formatters/base_text_formatter_spec.rb +24 -4
- data/spec/rspec/core/formatters/console_codes_spec.rb +50 -0
- data/spec/rspec/core/formatters/deprecation_formatter_spec.rb +20 -3
- data/spec/rspec/core/formatters/documentation_formatter_spec.rb +1 -0
- data/spec/rspec/core/formatters/html_formatted.html +3 -4
- data/spec/rspec/core/formatters/html_formatter_spec.rb +10 -4
- data/spec/rspec/core/formatters/text_mate_formatted.html +3 -4
- data/spec/rspec/core/formatters/text_mate_formatter_spec.rb +9 -3
- data/spec/rspec/core/hooks_filtering_spec.rb +5 -5
- data/spec/rspec/core/memoized_helpers_spec.rb +38 -0
- data/spec/rspec/core/metadata_spec.rb +24 -1
- data/spec/rspec/core/option_parser_spec.rb +39 -2
- data/spec/rspec/core/pending_example_spec.rb +14 -0
- data/spec/rspec/core/pending_spec.rb +27 -0
- data/spec/rspec/core/runner_spec.rb +3 -3
- data/spec/rspec/core/shared_context_spec.rb +1 -1
- data/spec/rspec/core/shared_example_group_spec.rb +18 -0
- data/spec/support/helper_methods.rb +4 -0
- metadata +105 -106
@@ -52,4 +52,141 @@
|
|
52
52
|
# @see RSpec::Core::Formatters::BaseTextFormatter
|
53
53
|
# @see RSpec::Core::Reporter
|
54
54
|
module RSpec::Core::Formatters
|
55
|
+
autoload :DocumentationFormatter, 'rspec/core/formatters/documentation_formatter'
|
56
|
+
autoload :HtmlFormatter, 'rspec/core/formatters/html_formatter'
|
57
|
+
autoload :ProgressFormatter, 'rspec/core/formatters/progress_formatter'
|
58
|
+
autoload :JsonFormatter, 'rspec/core/formatters/json_formatter'
|
59
|
+
autoload :TextMateFormatter, 'rspec/core/formatters/text_mate_formatter'
|
60
|
+
|
61
|
+
# @api private
|
62
|
+
#
|
63
|
+
# `RSpec::Core::Formatters::Loader` is an internal class for
|
64
|
+
# managing formatters used by a particular configuration. It is
|
65
|
+
# not expected to be used directly, but only through the configuration
|
66
|
+
# interface.
|
67
|
+
class Loader
|
68
|
+
|
69
|
+
# @api private
|
70
|
+
def initialize(reporter)
|
71
|
+
@formatters = []
|
72
|
+
@reporter = reporter
|
73
|
+
@setup = false
|
74
|
+
@default_formatter = 'progress'
|
75
|
+
end
|
76
|
+
|
77
|
+
# @return [Array] the loaded formatters
|
78
|
+
attr_reader :formatters
|
79
|
+
|
80
|
+
# @return [Reporter] the reporter
|
81
|
+
attr_reader :reporter
|
82
|
+
|
83
|
+
# @private
|
84
|
+
def setup_default(output_stream, deprecation_stream)
|
85
|
+
if @formatters.empty?
|
86
|
+
add @default_formatter, output_stream
|
87
|
+
end
|
88
|
+
unless @formatters.any? { |formatter| DeprecationFormatter === formatter }
|
89
|
+
add DeprecationFormatter, deprecation_stream, output_stream
|
90
|
+
end
|
91
|
+
@formatters.each do |formatter|
|
92
|
+
@reporter.register_listener formatter, *RSpec::Core::Reporter::NOTIFICATIONS
|
93
|
+
end
|
94
|
+
@setup = true
|
95
|
+
end
|
96
|
+
|
97
|
+
# @private
|
98
|
+
def add(formatter_to_use, *paths)
|
99
|
+
formatter_class = find_formatter(formatter_to_use)
|
100
|
+
|
101
|
+
args = paths.map { |p| p.respond_to?(:puts) ? p : file_at(p) }
|
102
|
+
|
103
|
+
formatter = formatter_class.new(*args)
|
104
|
+
if @setup
|
105
|
+
@reporter.register_listener formatter, *RSpec::Core::Reporter::NOTIFICATIONS
|
106
|
+
end
|
107
|
+
@formatters << formatter unless duplicate_formatter_exists?(formatter)
|
108
|
+
|
109
|
+
formatter
|
110
|
+
end
|
111
|
+
|
112
|
+
private
|
113
|
+
|
114
|
+
def find_formatter(formatter_to_use)
|
115
|
+
built_in_formatter(formatter_to_use) ||
|
116
|
+
custom_formatter(formatter_to_use) ||
|
117
|
+
(raise ArgumentError, "Formatter '#{formatter_to_use}' unknown - maybe you meant 'documentation' or 'progress'?.")
|
118
|
+
end
|
119
|
+
|
120
|
+
def duplicate_formatter_exists?(new_formatter)
|
121
|
+
@formatters.any? do |formatter|
|
122
|
+
formatter.class === new_formatter && formatter.output == new_formatter.output
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
def built_in_formatter(key)
|
127
|
+
case key.to_s
|
128
|
+
when 'd', 'doc', 'documentation'
|
129
|
+
DocumentationFormatter
|
130
|
+
when 's', 'n', 'spec', 'nested'
|
131
|
+
RSpec.deprecate "Using `#{key.to_s}` as a shortcut for the DocumentationFormatter",
|
132
|
+
:replacement => "`d`, `doc`, or `documentation`"
|
133
|
+
DocumentationFormatter
|
134
|
+
when 'h', 'html'
|
135
|
+
HtmlFormatter
|
136
|
+
when 'p', 'progress'
|
137
|
+
ProgressFormatter
|
138
|
+
when 'j', 'json'
|
139
|
+
JsonFormatter
|
140
|
+
when 't', 'textmate'
|
141
|
+
if defined?(::RSpec::Mate::Formatters::TextMateFormatter)
|
142
|
+
RSpec.deprecate "Using the text`#{key.to_s}` as a shortcut for the TextMateFormatter",
|
143
|
+
:replacement => "`::RSpec::Mate::Formatters::TextMateFormatter`"
|
144
|
+
else
|
145
|
+
RSpec.deprecate "Using rspec-core's `::RSpec::Core::TextMateFormatter`",
|
146
|
+
:replacement => "the `rspec-tmbundle` gem and it's `::RSpec::Mate::Formatters::TextMateFormatter`"
|
147
|
+
end
|
148
|
+
TextMateFormatter
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
def custom_formatter(formatter_ref)
|
153
|
+
if Class === formatter_ref
|
154
|
+
formatter_ref
|
155
|
+
elsif string_const?(formatter_ref)
|
156
|
+
begin
|
157
|
+
formatter_ref.gsub(/^::/,'').split('::').inject(Object) { |const,string| const.const_get string }
|
158
|
+
rescue NameError
|
159
|
+
require( path_for(formatter_ref) ) ? retry : raise
|
160
|
+
end
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
164
|
+
def string_const?(str)
|
165
|
+
str.is_a?(String) && /\A[A-Z][a-zA-Z0-9_:]*\z/ =~ str
|
166
|
+
end
|
167
|
+
|
168
|
+
def path_for(const_ref)
|
169
|
+
underscore_with_fix_for_non_standard_rspec_naming(const_ref)
|
170
|
+
end
|
171
|
+
|
172
|
+
def underscore_with_fix_for_non_standard_rspec_naming(string)
|
173
|
+
underscore(string).sub(%r{(^|/)r_spec($|/)}, '\\1rspec\\2')
|
174
|
+
end
|
175
|
+
|
176
|
+
# activesupport/lib/active_support/inflector/methods.rb, line 48
|
177
|
+
def underscore(camel_cased_word)
|
178
|
+
word = camel_cased_word.to_s.dup
|
179
|
+
word.gsub!(/::/, '/')
|
180
|
+
word.gsub!(/([A-Z]+)([A-Z][a-z])/,'\1_\2')
|
181
|
+
word.gsub!(/([a-z\d])([A-Z])/,'\1_\2')
|
182
|
+
word.tr!("-", "_")
|
183
|
+
word.downcase!
|
184
|
+
word
|
185
|
+
end
|
186
|
+
|
187
|
+
def file_at(path)
|
188
|
+
FileUtils.mkdir_p(File.dirname(path))
|
189
|
+
File.new(path, 'w')
|
190
|
+
end
|
191
|
+
end
|
55
192
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
require 'rspec/core/formatters/base_formatter'
|
2
|
-
require '
|
2
|
+
require 'rspec/core/formatters/console_codes'
|
3
3
|
|
4
4
|
module RSpec
|
5
5
|
module Core
|
@@ -68,12 +68,12 @@ module RSpec
|
|
68
68
|
# @api public
|
69
69
|
#
|
70
70
|
# Outputs the slowest examples and example groups in a report when using `--profile COUNT` (default 10).
|
71
|
-
#
|
71
|
+
#
|
72
72
|
def dump_profile
|
73
73
|
dump_profile_slowest_examples
|
74
74
|
dump_profile_slowest_example_groups
|
75
75
|
end
|
76
|
-
|
76
|
+
|
77
77
|
def dump_profile_slowest_examples
|
78
78
|
number_of_examples = RSpec.configuration.profile_examples
|
79
79
|
sorted_examples = examples.sort_by {|example|
|
@@ -95,7 +95,7 @@ module RSpec
|
|
95
95
|
|
96
96
|
def dump_profile_slowest_example_groups
|
97
97
|
number_of_examples = RSpec.configuration.profile_examples
|
98
|
-
example_groups = {}
|
98
|
+
example_groups = {}
|
99
99
|
|
100
100
|
examples.each do |example|
|
101
101
|
location = example.example_group.parent_groups.last.metadata[:example_group][:location]
|
@@ -108,15 +108,15 @@ module RSpec
|
|
108
108
|
|
109
109
|
# stop if we've only one example group
|
110
110
|
return if example_groups.keys.length <= 1
|
111
|
-
|
111
|
+
|
112
112
|
example_groups.each do |loc, hash|
|
113
113
|
hash[:average] = hash[:total_time].to_f / hash[:count]
|
114
114
|
end
|
115
|
-
|
115
|
+
|
116
116
|
sorted_groups = example_groups.sort_by {|_, hash| -hash[:average]}.first(number_of_examples)
|
117
117
|
|
118
118
|
output.puts "\nTop #{sorted_groups.size} slowest example groups:"
|
119
|
-
sorted_groups.each do |loc, hash|
|
119
|
+
sorted_groups.each do |loc, hash|
|
120
120
|
average = "#{failure_color(format_seconds(hash[:average]))} #{failure_color("seconds")} average"
|
121
121
|
total = "#{format_seconds(hash[:total_time])} seconds"
|
122
122
|
count = pluralize(hash[:count], "example")
|
@@ -165,41 +165,37 @@ module RSpec
|
|
165
165
|
output.close if IO === output && output != $stdout
|
166
166
|
end
|
167
167
|
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
VT100_COLOR_CODES = VT100_COLORS.values.to_set
|
180
|
-
|
181
|
-
def color_code_for(code_or_symbol)
|
182
|
-
if VT100_COLOR_CODES.include?(code_or_symbol)
|
183
|
-
code_or_symbol
|
168
|
+
def self.const_missing(name)
|
169
|
+
base = "RSpec::Core::Formatters::"
|
170
|
+
case name
|
171
|
+
when :VT100_COLORS then
|
172
|
+
RSpec.deprecate("#{base}#{name}", :replacement => "#{base}ConsoleCodes::VT100_CODES")
|
173
|
+
RSpec::Core::Formatters::ConsoleCodes::VT100_CODES
|
174
|
+
when :VT100_COLOR_CODES then
|
175
|
+
RSpec.deprecate("#{base}#{name}", :replacement => "#{base}ConsoleCodes::VT100_CODE_VALUES")
|
176
|
+
require 'set'
|
177
|
+
RSpec::Core::Formatters::ConsoleCodes::VT100_CODES.to_set
|
184
178
|
else
|
185
|
-
|
186
|
-
color_code_for(:white)
|
187
|
-
end
|
179
|
+
super
|
188
180
|
end
|
189
181
|
end
|
190
182
|
|
183
|
+
def color_code_for(code_or_symbol)
|
184
|
+
ConsoleCodes.console_code_for(code_or_symbol)
|
185
|
+
end
|
186
|
+
|
191
187
|
def colorize(text, code_or_symbol)
|
192
|
-
|
188
|
+
ConsoleCodes.wrap(text, code_or_symbol)
|
193
189
|
end
|
194
190
|
|
195
191
|
protected
|
196
192
|
|
197
193
|
def bold(text)
|
198
|
-
|
194
|
+
ConsoleCodes.wrap(text, :bold)
|
199
195
|
end
|
200
196
|
|
201
197
|
def color(text, color_code)
|
202
|
-
|
198
|
+
ConsoleCodes.wrap(text, color_code)
|
203
199
|
end
|
204
200
|
|
205
201
|
def failure_color(text)
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module RSpec
|
2
|
+
module Core
|
3
|
+
module Formatters
|
4
|
+
module ConsoleCodes
|
5
|
+
VT100_CODES =
|
6
|
+
{
|
7
|
+
:black => 30,
|
8
|
+
:red => 31,
|
9
|
+
:green => 32,
|
10
|
+
:yellow => 33,
|
11
|
+
:blue => 34,
|
12
|
+
:magenta => 35,
|
13
|
+
:cyan => 36,
|
14
|
+
:white => 37,
|
15
|
+
:bold => 1,
|
16
|
+
}
|
17
|
+
VT100_CODE_VALUES = VT100_CODES.invert
|
18
|
+
|
19
|
+
module_function
|
20
|
+
|
21
|
+
def console_code_for(code_or_symbol)
|
22
|
+
if VT100_CODE_VALUES.has_key?(code_or_symbol)
|
23
|
+
code_or_symbol
|
24
|
+
else
|
25
|
+
VT100_CODES.fetch(code_or_symbol) do
|
26
|
+
console_code_for(:white)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def wrap(text, code_or_symbol)
|
32
|
+
if RSpec.configuration.color_enabled?
|
33
|
+
"\e[#{console_code_for(code_or_symbol)}m#{text}\e[0m"
|
34
|
+
else
|
35
|
+
text
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -57,6 +57,9 @@ module RSpec
|
|
57
57
|
|deprecation warnings into errors, giving you the full backtrace.
|
58
58
|
EOS
|
59
59
|
|
60
|
+
DEPRECATION_STREAM_NOTICE = "Pass `--deprecation-out` or set " +
|
61
|
+
"`config.deprecation_stream` to a file for full output."
|
62
|
+
|
60
63
|
SpecifiedDeprecationMessage = Struct.new(:type) do
|
61
64
|
def initialize(data)
|
62
65
|
@message = data[:message]
|
@@ -64,17 +67,23 @@ module RSpec
|
|
64
67
|
end
|
65
68
|
|
66
69
|
def to_s
|
67
|
-
@message
|
70
|
+
output_formatted @message
|
68
71
|
end
|
69
72
|
|
70
73
|
def too_many_warnings_message
|
71
|
-
msg = "Too many similar deprecation messages reported, disregarding further reports."
|
72
|
-
msg <<
|
74
|
+
msg = "Too many similar deprecation messages reported, disregarding further reports. "
|
75
|
+
msg << DEPRECATION_STREAM_NOTICE
|
73
76
|
msg
|
74
77
|
end
|
75
78
|
|
76
79
|
private
|
77
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
|
+
|
78
87
|
def deprecation_type_for(data)
|
79
88
|
data[:message].gsub(/(\w+\/)+\w+\.rb:\d+/, '')
|
80
89
|
end
|
@@ -94,8 +103,8 @@ module RSpec
|
|
94
103
|
end
|
95
104
|
|
96
105
|
def too_many_warnings_message
|
97
|
-
msg = "Too many uses of deprecated '#{type}'."
|
98
|
-
msg <<
|
106
|
+
msg = "Too many uses of deprecated '#{type}'. "
|
107
|
+
msg << DEPRECATION_STREAM_NOTICE
|
99
108
|
msg
|
100
109
|
end
|
101
110
|
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_formatter.exclude?(line)
|
22
22
|
RSpec::Core::Metadata::relative_path(line)
|
23
23
|
rescue SecurityError
|
24
24
|
nil
|
@@ -490,7 +490,8 @@ EOS
|
|
490
490
|
# end
|
491
491
|
def its(attribute, &block)
|
492
492
|
RSpec.deprecate("Use of rspec-core's `its` method", :replacement => 'the rspec-its gem')
|
493
|
-
|
493
|
+
|
494
|
+
describe(attribute.to_s) do
|
494
495
|
if Array === attribute
|
495
496
|
let(:__its_subject) { subject[*attribute] }
|
496
497
|
else
|
data/lib/rspec/core/metadata.rb
CHANGED
@@ -25,6 +25,9 @@ module RSpec
|
|
25
25
|
# @see Configuration#filter_run_including
|
26
26
|
# @see Configuration#filter_run_excluding
|
27
27
|
class Metadata < Hash
|
28
|
+
class << self
|
29
|
+
attr_accessor :line_number_filter_deprecation_issued
|
30
|
+
end
|
28
31
|
|
29
32
|
def self.relative_path(line)
|
30
33
|
line = line.sub(File.expand_path("."), ".")
|
@@ -127,6 +130,30 @@ module RSpec
|
|
127
130
|
include MetadataHash
|
128
131
|
|
129
132
|
def described_class
|
133
|
+
warn_about_first_description_arg_behavioral_change_in_rspec_3
|
134
|
+
|
135
|
+
value_for_rspec_2 = described_class_for_rspec_2
|
136
|
+
value_for_rspec_3 = described_class_for_rspec_3
|
137
|
+
|
138
|
+
if value_for_rspec_2 != value_for_rspec_3
|
139
|
+
RSpec.warn_deprecation(<<-EOS.gsub(/^\s+\|/, ''))
|
140
|
+
|The semantics of `described_class` in a nested `describe <SomeClass>`
|
141
|
+
|example group are changing in RSpec 3. In RSpec 2.x, `described_class`
|
142
|
+
|would return the outermost described class (#{value_for_rspec_2.inspect}).
|
143
|
+
|In RSpec 3, it will return the innermost described class (#{value_for_rspec_3.inspect}).
|
144
|
+
|In general, we recommend not describing multiple classes or objects in a
|
145
|
+
|nested manner as it creates confusion.
|
146
|
+
|
|
147
|
+
|To make your code compatible with RSpec 3, change from `described_class` to a reference
|
148
|
+
|to `#{value_for_rspec_3.inspect}`, or change the arg of the inner `describe` to a string.
|
149
|
+
|(Called from #{CallerFilter.first_non_rspec_line})
|
150
|
+
EOS
|
151
|
+
end
|
152
|
+
|
153
|
+
value_for_rspec_2
|
154
|
+
end
|
155
|
+
|
156
|
+
def described_class_for_rspec_2
|
130
157
|
container_stack.each do |g|
|
131
158
|
[:described_class, :describes].each do |key|
|
132
159
|
if g.has_key?(key)
|
@@ -144,6 +171,31 @@ module RSpec
|
|
144
171
|
nil
|
145
172
|
end
|
146
173
|
|
174
|
+
def described_class_for_rspec_3
|
175
|
+
container_stack.each do |g|
|
176
|
+
[:described_class, :describes].each do |key|
|
177
|
+
if g.has_key?(key)
|
178
|
+
value = g[key]
|
179
|
+
return value unless value.nil?
|
180
|
+
end
|
181
|
+
end
|
182
|
+
|
183
|
+
candidate = g[:description_args].first
|
184
|
+
return candidate unless NilClass === candidate || String === candidate || Symbol === candidate
|
185
|
+
end
|
186
|
+
|
187
|
+
nil
|
188
|
+
end
|
189
|
+
|
190
|
+
def warn_about_first_description_arg_behavioral_change_in_rspec_3
|
191
|
+
return unless behavior_change = self[:description_arg_behavior_changing_in_rspec_3]
|
192
|
+
RSpec.warn_deprecation(behavior_change.warning)
|
193
|
+
end
|
194
|
+
|
195
|
+
def first_description_arg
|
196
|
+
self[:description_args].first
|
197
|
+
end
|
198
|
+
|
147
199
|
def full_description
|
148
200
|
build_description_from(*container_stack.reverse.map {|a| a[:description_args]}.flatten)
|
149
201
|
end
|
@@ -178,6 +230,7 @@ module RSpec
|
|
178
230
|
|
179
231
|
self[:example_group].store(:description_args, args)
|
180
232
|
self[:example_group].store(:caller, user_metadata.delete(:caller) || caller)
|
233
|
+
self[:example_group][:description_arg_behavior_changing_in_rspec_3] = user_metadata.delete(:description_arg_behavior_changing_in_rspec_3)
|
181
234
|
|
182
235
|
update(user_metadata)
|
183
236
|
end
|
@@ -200,7 +253,16 @@ module RSpec
|
|
200
253
|
# @private
|
201
254
|
def filter_applies?(key, value, metadata=self)
|
202
255
|
return metadata.filter_applies_to_any_value?(key, value) if Array === metadata[key] && !(Proc === value)
|
203
|
-
|
256
|
+
|
257
|
+
if key == :line_numbers
|
258
|
+
unless Metadata.line_number_filter_deprecation_issued
|
259
|
+
RSpec.deprecate("Filtering by `:line_numbers`",
|
260
|
+
:replacement => "filtering by `:locations`")
|
261
|
+
end
|
262
|
+
|
263
|
+
return metadata.line_number_filter_applies?(value)
|
264
|
+
end
|
265
|
+
|
204
266
|
return metadata.location_filter_applies?(value) if key == :locations
|
205
267
|
return metadata.filters_apply?(key, value) if Hash === value
|
206
268
|
|