Class: RSpec::Core::FilterManager
- Inherits:
-
Object
- Object
- RSpec::Core::FilterManager
- Defined in:
- lib/rspec/core/filter_manager.rb
Overview
Manages the filtering of examples and groups by matching tags declared on
the command line or options files, or filters declared via
RSpec.configure
, with hash key/values submitted within example group
and/or example declarations. For example, given this declaration:
describe Thing, :awesome => true do
it "does something" do
# ...
end
end
That group (or any other with :awesome => true
) would be filtered in
with any of the following commands:
rspec --tag awesome:true
rspec --tag awesome
rspec -t awesome:true
rspec -t awesome
Prefixing the tag names with ~
negates the tags, thus excluding this group with
any of:
rspec --tag ~awesome:true
rspec --tag ~awesome
rspec -t ~awesome:true
rspec -t ~awesome
Options files and command line overrides
Tag declarations can be stored in .rspec
, ~/.rspec
, or a custom
options file. This is useful for storing defaults. For example, let's
say you've got some slow specs that you want to suppress most of the
time. You can tag them like this:
describe Something, :slow => true do
And then store this in .rspec
:
--tag ~slow:true
Now when you run rspec
, that group will be excluded.
Overriding
Of course, you probably want to run them sometimes, so you can override this tag on the command line like this:
rspec --tag slow:true
RSpec.configure
You can also store default tags with RSpec.configure
. We use tag
on
the command line (and in options files like .rspec
), but for historical
reasons we use the term filter
in `RSpec.configure:
RSpec.configure do |c|
c.filter_run_including :foo => :bar
c.filter_run_excluding :foo => :bar
end
These declarations can also be overridden from the command line.
Defined Under Namespace
Modules: BackwardCompatibility, Describable
Constant Summary collapse
- DEFAULT_EXCLUSIONS =
{ :if => lambda { |value| !value }, :unless => lambda { |value| value } }
- STANDALONE_FILTERS =
[:locations, :line_numbers, :full_description]
Instance Attribute Summary collapse
-
#exclusions ⇒ Object
readonly
Returns the value of attribute exclusions.
-
#inclusions ⇒ Object
readonly
Returns the value of attribute inclusions.
Instance Method Summary collapse
- #add_location(file_path, line_numbers) ⇒ Object
- #empty? ⇒ Boolean
- #exclude(*args) ⇒ Object
- #exclude!(*args) ⇒ Object
- #exclude?(example) ⇒ Boolean
- #exclude_with_low_priority(*args) ⇒ Object
- #include(*args) ⇒ Object
- #include!(*args) ⇒ Object
- #include?(example) ⇒ Boolean
- #include_with_low_priority(*args) ⇒ Object
-
#initialize ⇒ FilterManager
constructor
A new instance of FilterManager.
- #prune(examples) ⇒ Object
Constructor Details
#initialize ⇒ FilterManager
Returns a new instance of FilterManager.
117 118 119 120 121 |
# File 'lib/rspec/core/filter_manager.rb', line 117 def initialize @exclusions = DEFAULT_EXCLUSIONS.dup.extend(Describable) @inclusions = {}.extend(Describable) extend(BackwardCompatibility) end |
Instance Attribute Details
#exclusions ⇒ Object (readonly)
Returns the value of attribute exclusions.
115 116 117 |
# File 'lib/rspec/core/filter_manager.rb', line 115 def exclusions @exclusions end |
#inclusions ⇒ Object (readonly)
Returns the value of attribute inclusions.
115 116 117 |
# File 'lib/rspec/core/filter_manager.rb', line 115 def inclusions @inclusions end |
Instance Method Details
#add_location(file_path, line_numbers) ⇒ Object
123 124 125 126 127 128 129 130 131 |
# File 'lib/rspec/core/filter_manager.rb', line 123 def add_location(file_path, line_numbers) # locations is a hash of expanded paths to arrays of line # numbers to match against. e.g. # { "path/to/file.rb" => [37, 42] } locations = @inclusions.delete(:locations) || Hash.new {|h,k| h[k] = []} locations[File.(file_path)].push(*line_numbers) @inclusions.replace(:locations => locations) @exclusions.clear end |
#empty? ⇒ Boolean
133 134 135 |
# File 'lib/rspec/core/filter_manager.rb', line 133 def empty? inclusions.empty? && exclusions.empty_without_conditional_filters? end |
#exclude(*args) ⇒ Object
141 142 143 |
# File 'lib/rspec/core/filter_manager.rb', line 141 def exclude(*args) merge(@exclusions, @inclusions, *args) end |
#exclude!(*args) ⇒ Object
145 146 147 |
# File 'lib/rspec/core/filter_manager.rb', line 145 def exclude!(*args) replace(@exclusions, @inclusions, *args) end |
#exclude?(example) ⇒ Boolean
153 154 155 |
# File 'lib/rspec/core/filter_manager.rb', line 153 def exclude?(example) @exclusions.empty? ? false : example.any_apply?(@exclusions) end |
#exclude_with_low_priority(*args) ⇒ Object
149 150 151 |
# File 'lib/rspec/core/filter_manager.rb', line 149 def exclude_with_low_priority(*args) reverse_merge(@exclusions, @inclusions, *args) end |
#include(*args) ⇒ Object
157 158 159 |
# File 'lib/rspec/core/filter_manager.rb', line 157 def include(*args) unless_standalone(*args) { merge(@inclusions, @exclusions, *args) } end |
#include!(*args) ⇒ Object
161 162 163 |
# File 'lib/rspec/core/filter_manager.rb', line 161 def include!(*args) unless_standalone(*args) { replace(@inclusions, @exclusions, *args) } end |
#include?(example) ⇒ Boolean
169 170 171 |
# File 'lib/rspec/core/filter_manager.rb', line 169 def include?(example) @inclusions.empty? ? true : example.any_apply?(@inclusions) end |
#include_with_low_priority(*args) ⇒ Object
165 166 167 |
# File 'lib/rspec/core/filter_manager.rb', line 165 def include_with_low_priority(*args) unless_standalone(*args) { reverse_merge(@inclusions, @exclusions, *args) } end |
#prune(examples) ⇒ Object
137 138 139 |
# File 'lib/rspec/core/filter_manager.rb', line 137 def prune(examples) examples.select {|e| !exclude?(e) && include?(e)} end |