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
@@ -0,0 +1,32 @@
|
|
1
|
+
module RSpec
|
2
|
+
module Core
|
3
|
+
class DeprecatedMutableArrayProxy
|
4
|
+
|
5
|
+
def initialize(array)
|
6
|
+
@array = array
|
7
|
+
end
|
8
|
+
|
9
|
+
mutated_methods =
|
10
|
+
[
|
11
|
+
:<<, :[]=, :clear, :collect!, :compact!, :concat, :delete,
|
12
|
+
:delete_at, :delete_if, :fill, :flatten!, :keep_if, :map!,
|
13
|
+
:pop, :push, :reject!, :replace, :reverse!, :rotate!,
|
14
|
+
:select!, :shift, :shuffle!, :slice!, :sort!, :sort_by!,
|
15
|
+
:uniq!, :unshift
|
16
|
+
]
|
17
|
+
array_methods = Array.instance_methods.map(&:to_sym)
|
18
|
+
|
19
|
+
(array_methods & mutated_methods).each do |name|
|
20
|
+
define_method(name) do |*args, &block|
|
21
|
+
RSpec.deprecate "Mutating the `RSpec.configuration.formatters` array"
|
22
|
+
@array.__send__ name, *args, &block
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
(array_methods - mutated_methods).each do |name|
|
27
|
+
define_method(name) { |*args, &block| @array.__send__ name, *args, &block }
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
data/lib/rspec/core/example.rb
CHANGED
@@ -85,6 +85,8 @@ module RSpec
|
|
85
85
|
|
86
86
|
# @deprecated access options via metadata instead
|
87
87
|
def options
|
88
|
+
RSpec.deprecate("`RSpec::Core::Example#options`",
|
89
|
+
:replacement => "`RSpec::Core::Example#metadata`")
|
88
90
|
@options
|
89
91
|
end
|
90
92
|
|
@@ -112,7 +114,7 @@ module RSpec
|
|
112
114
|
begin
|
113
115
|
run_before_each
|
114
116
|
@example_group_instance.instance_eval_with_args(self, &@example_block)
|
115
|
-
rescue Pending::
|
117
|
+
rescue Pending::SkipDeclaredInExample => e
|
116
118
|
@pending_declared_in_example = e.message
|
117
119
|
rescue Exception => e
|
118
120
|
set_exception(e)
|
@@ -49,139 +49,166 @@ module RSpec
|
|
49
49
|
end
|
50
50
|
|
51
51
|
delegate_to_metadata :described_class, :file_path
|
52
|
-
alias_method :display_name, :description
|
53
|
-
# @private
|
54
|
-
alias_method :describes, :described_class
|
55
52
|
|
56
53
|
# @private
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
# @yield [Example] the example object
|
62
|
-
def self.define_example_method(name, extra_options={})
|
63
|
-
module_eval(<<-END_RUBY, __FILE__, __LINE__)
|
64
|
-
def #{name}(desc=nil, *args, &block)
|
65
|
-
if #{name.inspect} == :pending
|
66
|
-
RSpec.warn_deprecation(<<-EOS.gsub(/^\s+\\|/, ''))
|
67
|
-
|The semantics of `RSpec::Core::ExampleGroup#pending` are changing in RSpec 3.
|
68
|
-
|In RSpec 2.x, it caused the example to be skipped. In RSpec 3, the example will
|
69
|
-
|still be run but is expected to fail, and will be marked as a failure (rather
|
70
|
-
|than as pending) if the example passes, just like how `pending` with a block
|
71
|
-
|from within an example already works.
|
72
|
-
|
|
73
|
-
|To keep the same skip semantics, change `pending` to `skip`. Otherwise, if you
|
74
|
-
|want the new RSpec 3 behavior, you can safely ignore this warning and continue
|
75
|
-
|to upgrade to RSpec 3 without addressing it.
|
76
|
-
|
|
77
|
-
|Called from \#{CallerFilter.first_non_rspec_line}.
|
78
|
-
|
|
79
|
-
EOS
|
80
|
-
end
|
81
|
-
options = build_metadata_hash_from(args)
|
82
|
-
options.update(:pending => RSpec::Core::Pending::NOT_YET_IMPLEMENTED) unless block
|
83
|
-
options.update(#{extra_options.inspect})
|
84
|
-
examples << RSpec::Core::Example.new(self, desc, options, block)
|
85
|
-
examples.last
|
86
|
-
end
|
87
|
-
END_RUBY
|
54
|
+
def display_name
|
55
|
+
RSpec.deprecate('`RSpec::Core::ExampleGroup.display_name`',
|
56
|
+
:replacement => "`RSpec::Core::ExampleGroup.description`")
|
57
|
+
description
|
88
58
|
end
|
89
59
|
|
90
|
-
#
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
# example "does something" do
|
96
|
-
# end
|
97
|
-
#
|
98
|
-
# example "does something", :with => 'additional metadata' do
|
99
|
-
# end
|
100
|
-
#
|
101
|
-
# example "does something" do |ex|
|
102
|
-
# # ex is the Example object that evals this block
|
103
|
-
# end
|
104
|
-
define_example_method :example
|
105
|
-
# Defines an example within a group.
|
106
|
-
# @example
|
107
|
-
define_example_method :it
|
108
|
-
# Defines an example within a group.
|
109
|
-
# This is here primarily for backward compatibility with early versions
|
110
|
-
# of RSpec which used `context` and `specify` instead of `describe` and
|
111
|
-
# `it`.
|
112
|
-
define_example_method :specify
|
113
|
-
|
114
|
-
# Shortcut to define an example with `:focus` => true
|
115
|
-
# @see example
|
116
|
-
define_example_method :focus, :focused => true, :focus => true
|
117
|
-
# Shortcut to define an example with `:focus` => true
|
118
|
-
# @see example
|
119
|
-
define_example_method :focused, :focused => true, :focus => true
|
120
|
-
# Shortcut to define an example with `:focus` => true
|
121
|
-
# @see example
|
122
|
-
define_example_method :fit, :focused => true, :focus => true
|
123
|
-
|
124
|
-
# Shortcut to define an example with :pending => true
|
125
|
-
# @see example
|
126
|
-
define_example_method :pending, :pending => true
|
127
|
-
# Shortcut to define an example with :pending => true
|
128
|
-
# Backported from RSpec 3 to aid migration.
|
129
|
-
# @see example
|
130
|
-
define_example_method :skip, :pending => true
|
131
|
-
# Shortcut to define an example with :pending => 'Temporarily disabled with xexample'
|
132
|
-
# @see example
|
133
|
-
define_example_method :xexample, :pending => 'Temporarily disabled with xexample'
|
134
|
-
# Shortcut to define an example with :pending => 'Temporarily disabled with xit'
|
135
|
-
# @see example
|
136
|
-
define_example_method :xit, :pending => 'Temporarily disabled with xit'
|
137
|
-
# Shortcut to define an example with :pending => 'Temporarily disabled with xspecify'
|
138
|
-
# @see example
|
139
|
-
define_example_method :xspecify, :pending => 'Temporarily disabled with xspecify'
|
140
|
-
|
141
|
-
# Works like `alias_method :name, :example` with the added benefit of
|
142
|
-
# assigning default metadata to the generated example.
|
143
|
-
#
|
144
|
-
# @note Use with caution. This extends the language used in your
|
145
|
-
# specs, but does not add any additional documentation. We use this
|
146
|
-
# in rspec to define methods like `focus` and `xit`, but we also add
|
147
|
-
# docs for those methods.
|
148
|
-
def alias_example_to name, extra={}
|
149
|
-
(class << self; self; end).define_example_method name, extra
|
60
|
+
# @private
|
61
|
+
def describes
|
62
|
+
RSpec.deprecate('`RSpec::Core::ExampleGroup.describes`',
|
63
|
+
:replacement => "`RSpec::Core::ExampleGroup.described_class`")
|
64
|
+
described_class
|
150
65
|
end
|
66
|
+
end
|
151
67
|
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
68
|
+
# @private
|
69
|
+
# @macro [attach] define_example_method
|
70
|
+
# @param [String] name
|
71
|
+
# @param [Hash] extra_options
|
72
|
+
# @param [Block] implementation
|
73
|
+
# @yield [Example] the example object
|
74
|
+
def self.define_example_method(name, extra_options={})
|
75
|
+
module_eval(<<-END_RUBY, __FILE__, __LINE__)
|
76
|
+
def self.#{name}(desc=nil, *args, &block)
|
77
|
+
if #{name.inspect} == :pending
|
78
|
+
RSpec.warn_deprecation(<<-EOS.gsub(/^\s+\\|/, ''))
|
79
|
+
|The semantics of `RSpec::Core::ExampleGroup.pending` are changing in RSpec 3.
|
80
|
+
|In RSpec 2.x, it caused the example to be skipped. In RSpec 3, the example will
|
81
|
+
|still be run but is expected to fail, and will be marked as a failure (rather
|
82
|
+
|than as pending) if the example passes, just like how `pending` with a block
|
83
|
+
|from within an example already works.
|
84
|
+
|
|
85
|
+
|To keep the same skip semantics, change `pending` to `skip`. Otherwise, if you
|
86
|
+
|want the new RSpec 3 behavior, you can safely ignore this warning and continue
|
87
|
+
|to upgrade to RSpec 3 without addressing it.
|
88
|
+
|
|
89
|
+
|Called from \#{CallerFilter.first_non_rspec_line}.
|
90
|
+
|
|
91
|
+
EOS
|
164
92
|
end
|
165
|
-
|
166
|
-
|
93
|
+
options = build_metadata_hash_from(args)
|
94
|
+
options.update(:pending => RSpec::Core::Pending::NOT_YET_IMPLEMENTED) unless block
|
95
|
+
# Backport from RSpec 3 to assist with upgrading
|
96
|
+
options.update(:pending => options[:skip]) if options[:skip]
|
97
|
+
options.update(#{extra_options.inspect})
|
98
|
+
examples << RSpec::Core::Example.new(self, desc, options, block)
|
99
|
+
examples.last
|
100
|
+
end
|
101
|
+
END_RUBY
|
102
|
+
end
|
103
|
+
|
104
|
+
# Defines an example within a group.
|
105
|
+
# @example
|
106
|
+
# example do
|
107
|
+
# end
|
108
|
+
#
|
109
|
+
# example "does something" do
|
110
|
+
# end
|
111
|
+
#
|
112
|
+
# example "does something", :with => 'additional metadata' do
|
113
|
+
# end
|
114
|
+
#
|
115
|
+
# example "does something" do |ex|
|
116
|
+
# # ex is the Example object that evals this block
|
117
|
+
# end
|
118
|
+
define_example_method :example
|
119
|
+
# Defines an example within a group.
|
120
|
+
# @example
|
121
|
+
define_example_method :it
|
122
|
+
# Defines an example within a group.
|
123
|
+
# This is here primarily for backward compatibility with early versions
|
124
|
+
# of RSpec which used `context` and `specify` instead of `describe` and
|
125
|
+
# `it`.
|
126
|
+
define_example_method :specify
|
127
|
+
|
128
|
+
# Shortcut to define an example with `:focus` => true
|
129
|
+
# @see example
|
130
|
+
define_example_method :focus, :focused => true, :focus => true
|
131
|
+
# Shortcut to define an example with `:focus` => true
|
132
|
+
# @see example
|
133
|
+
define_example_method :fit, :focused => true, :focus => true
|
134
|
+
|
135
|
+
# Shortcut to define an example with :pending => true
|
136
|
+
# @see example
|
137
|
+
define_example_method :pending, :pending => true
|
138
|
+
# Shortcut to define an example with :pending => true
|
139
|
+
# Backported from RSpec 3 to aid migration.
|
140
|
+
# @see example
|
141
|
+
define_example_method :skip, :pending => true
|
142
|
+
# Shortcut to define an example with :pending => 'Temporarily disabled with xexample'
|
143
|
+
# @see example
|
144
|
+
define_example_method :xexample, :pending => 'Temporarily disabled with xexample'
|
145
|
+
# Shortcut to define an example with :pending => 'Temporarily disabled with xit'
|
146
|
+
# @see example
|
147
|
+
define_example_method :xit, :pending => 'Temporarily disabled with xit'
|
148
|
+
# Shortcut to define an example with :pending => 'Temporarily disabled with xspecify'
|
149
|
+
# @see example
|
150
|
+
define_example_method :xspecify, :pending => 'Temporarily disabled with xspecify'
|
151
|
+
|
152
|
+
# Shortcut to define an example with `:focus` => true
|
153
|
+
# @see example
|
154
|
+
def self.focused(desc=nil, *args, &block)
|
155
|
+
RSpec.deprecate("`RSpec::Core::ExampleGroup.focused`",
|
156
|
+
:replacement => "`RSpec::Core::ExampleGroup.focus`")
|
157
|
+
|
158
|
+
metadata = Hash === args.last ? args.pop : {}
|
159
|
+
metadata.merge!(:focus => true, :focused => true)
|
160
|
+
args << metadata
|
161
|
+
|
162
|
+
example(desc, *args, &block)
|
163
|
+
end
|
164
|
+
|
165
|
+
# Works like `alias_method :name, :example` with the added benefit of
|
166
|
+
# assigning default metadata to the generated example.
|
167
|
+
#
|
168
|
+
# @note Use with caution. This extends the language used in your
|
169
|
+
# specs, but does not add any additional documentation. We use this
|
170
|
+
# in rspec to define methods like `focus` and `xit`, but we also add
|
171
|
+
# docs for those methods.
|
172
|
+
def self.alias_example_to name, extra={}
|
173
|
+
RSpec.deprecate("`RSpec::Core::ExampleGroup.alias_example_to`",
|
174
|
+
:replacement => "`RSpec::Core::Configuration#alias_example_to`")
|
175
|
+
define_example_method name, extra
|
176
|
+
end
|
167
177
|
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
178
|
+
# @private
|
179
|
+
# @macro [attach] define_nested_shared_group_method
|
180
|
+
#
|
181
|
+
# @see SharedExampleGroup
|
182
|
+
def self.define_nested_shared_group_method(new_name, report_label=nil)
|
183
|
+
module_eval(<<-END_RUBY, __FILE__, __LINE__)
|
184
|
+
def self.#{new_name}(name, *args, &customization_block)
|
185
|
+
group = describe("#{report_label || "it should behave like"} \#{name}") do
|
186
|
+
find_and_eval_shared("examples", name, *args, &customization_block)
|
187
|
+
end
|
188
|
+
group.metadata[:shared_group_name] = name
|
189
|
+
group
|
190
|
+
end
|
191
|
+
END_RUBY
|
192
|
+
end
|
174
193
|
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
194
|
+
# Generates a nested example group and includes the shared content
|
195
|
+
# mapped to `name` in the nested group.
|
196
|
+
define_nested_shared_group_method :it_behaves_like, "behaves like"
|
197
|
+
# Generates a nested example group and includes the shared content
|
198
|
+
# mapped to `name` in the nested group.
|
199
|
+
define_nested_shared_group_method :it_should_behave_like
|
200
|
+
|
201
|
+
# Works like `alias_method :name, :it_behaves_like` with the added
|
202
|
+
# benefit of assigning default metadata to the generated example.
|
203
|
+
#
|
204
|
+
# @note Use with caution. This extends the language used in your
|
205
|
+
# specs, but does not add any additional documentation. We use this
|
206
|
+
# in rspec to define `it_should_behave_like` (for backward
|
207
|
+
# compatibility), but we also add docs for that method.
|
208
|
+
def self.alias_it_behaves_like_to name, *args, &block
|
209
|
+
RSpec.deprecate("`RSpec::Core::ExampleGroup.alias_it_behaves_like_to`",
|
210
|
+
:replacement => "`RSpec::Core::Configuration#alias_it_behaves_like_to`")
|
211
|
+
define_nested_shared_group_method name, *args, &block
|
185
212
|
end
|
186
213
|
|
187
214
|
# Includes shared content mapped to `name` directly in the group in which
|
@@ -296,8 +323,18 @@ WARNING
|
|
296
323
|
def self.describe(*args, &example_group_block)
|
297
324
|
@_subclass_count ||= 0
|
298
325
|
@_subclass_count += 1
|
326
|
+
|
327
|
+
if Symbol === args.first || Hash === args.first
|
328
|
+
description_arg_behavior_changing_in_rspec_3 = DescriptionBehaviorChange.new(
|
329
|
+
args.first, CallerFilter.first_non_rspec_line
|
330
|
+
)
|
331
|
+
end
|
332
|
+
|
299
333
|
args << {} unless args.last.is_a?(Hash)
|
300
|
-
args.last.update(
|
334
|
+
args.last.update(
|
335
|
+
:example_group_block => example_group_block,
|
336
|
+
:description_arg_behavior_changing_in_rspec_3 => description_arg_behavior_changing_in_rspec_3
|
337
|
+
)
|
301
338
|
|
302
339
|
# TODO 2010-05-05: Because we don't know if const_set is thread-safe
|
303
340
|
child = const_set(
|
@@ -308,6 +345,18 @@ WARNING
|
|
308
345
|
child
|
309
346
|
end
|
310
347
|
|
348
|
+
DescriptionBehaviorChange = Struct.new(:arg, :call_site) do
|
349
|
+
def warning
|
350
|
+
<<-EOS.gsub(/^\s+\|/, '')
|
351
|
+
|The semantics of `describe <a #{arg.class.name}>` are changing in RSpec 3. In RSpec 2,
|
352
|
+
|this would be treated as metadata, but as the first `describe` argument,
|
353
|
+
|this will be treated as the described object in RSpec 3. If you want this
|
354
|
+
|to be treated as metadata, pass a description as the first argument.
|
355
|
+
|(Example group defined at #{call_site})
|
356
|
+
EOS
|
357
|
+
end
|
358
|
+
end
|
359
|
+
|
311
360
|
class << self
|
312
361
|
alias_method :context, :describe
|
313
362
|
end
|
@@ -66,23 +66,51 @@ module RSpec
|
|
66
66
|
# @see Configuration#filter_run_including
|
67
67
|
# @see Configuration#filter_run_excluding
|
68
68
|
class FilterManager
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
69
|
+
class << self
|
70
|
+
def const_missing(name)
|
71
|
+
case name
|
72
|
+
when :DEFAULT_EXCLUSIONS
|
73
|
+
RSpec.deprecate("RSpec::Core::FilterManager::DEFAULT_EXCLUSIONS is deprecated")
|
74
|
+
default_exclusions
|
75
|
+
when :STANDALONE_FILTERS
|
76
|
+
RSpec.deprecate("RSpec::Core::FilterManager::STANDALONE_FILTERS is deprecated")
|
77
|
+
standalone_filters
|
78
|
+
else
|
79
|
+
super
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
# @private
|
84
|
+
def default_exclusions
|
85
|
+
@default_exclusions ||= {
|
86
|
+
:if => lambda { |value| !value },
|
87
|
+
:unless => lambda { |value| value }
|
88
|
+
}
|
89
|
+
end
|
73
90
|
|
74
|
-
|
91
|
+
# @private
|
92
|
+
def standalone_filters
|
93
|
+
@standalone_filters ||= [:locations, :line_numbers, :full_description]
|
94
|
+
end
|
95
|
+
end
|
75
96
|
|
76
97
|
module Describable
|
77
98
|
PROC_HEX_NUMBER = /0x[0-9a-f]+\s?@/
|
78
99
|
PROJECT_DIR = File.expand_path('.')
|
79
100
|
|
80
101
|
def description
|
81
|
-
reject { |k, v| RSpec::Core::FilterManager
|
102
|
+
reject { |k, v| RSpec::Core::FilterManager.default_exclusions[k] == v }.inspect.
|
103
|
+
gsub(PROC_HEX_NUMBER, '').gsub(PROJECT_DIR, '.').gsub(' (lambda)','').gsub('__is_lambda__=true','')
|
82
104
|
end
|
83
105
|
|
84
106
|
def empty_without_conditional_filters?
|
85
|
-
|
107
|
+
RSpec.deprecate("(inclusion_filter | exclusion_filter)#empty_without_conditional_filters? is deprecated")
|
108
|
+
rules_empty?
|
109
|
+
end
|
110
|
+
|
111
|
+
# @private
|
112
|
+
def rules_empty?
|
113
|
+
reject { |k, v| RSpec::Core::FilterManager.default_exclusions[k] == v }.empty?
|
86
114
|
end
|
87
115
|
end
|
88
116
|
|
@@ -115,7 +143,7 @@ module RSpec
|
|
115
143
|
attr_reader :exclusions, :inclusions
|
116
144
|
|
117
145
|
def initialize
|
118
|
-
@exclusions =
|
146
|
+
@exclusions = self.class.default_exclusions.dup.extend(Describable)
|
119
147
|
@inclusions = {}.extend(Describable)
|
120
148
|
extend(BackwardCompatibility)
|
121
149
|
end
|
@@ -131,7 +159,7 @@ module RSpec
|
|
131
159
|
end
|
132
160
|
|
133
161
|
def empty?
|
134
|
-
inclusions.empty? && exclusions.
|
162
|
+
inclusions.empty? && exclusions.rules_empty?
|
135
163
|
end
|
136
164
|
|
137
165
|
def prune(examples)
|
@@ -143,6 +171,11 @@ module RSpec
|
|
143
171
|
end
|
144
172
|
|
145
173
|
def exclude!(*args)
|
174
|
+
RSpec.deprecate("FilterManager#exclude! is deprecated. Use FilterManager#exclude_only")
|
175
|
+
exclude_only(*args)
|
176
|
+
end
|
177
|
+
|
178
|
+
def exclude_only(*args)
|
146
179
|
replace(@exclusions, @inclusions, *args)
|
147
180
|
end
|
148
181
|
|
@@ -159,6 +192,11 @@ module RSpec
|
|
159
192
|
end
|
160
193
|
|
161
194
|
def include!(*args)
|
195
|
+
RSpec.deprecate("FilterManager#include! is deprecated. Use FilterManager#include_only")
|
196
|
+
include_only(*args)
|
197
|
+
end
|
198
|
+
|
199
|
+
def include_only(*args)
|
162
200
|
unless_standalone(*args) { replace(@inclusions, @exclusions, *args) }
|
163
201
|
end
|
164
202
|
|
@@ -196,7 +234,7 @@ module RSpec
|
|
196
234
|
end
|
197
235
|
|
198
236
|
def is_standalone_filter?(filter)
|
199
|
-
|
237
|
+
self.class.standalone_filters.any? {|key| filter.has_key?(key)}
|
200
238
|
end
|
201
239
|
end
|
202
240
|
end
|