Skip to content

Commit

Permalink
Configuration#inclusion_filter and #exclusion_filter guarantee non-nil
Browse files Browse the repository at this point in the history
- Fixes #376.
  • Loading branch information
dchelimsky committed May 18, 2011
1 parent e687d01 commit b06c1d5
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 8 deletions.
9 changes: 8 additions & 1 deletion lib/rspec/core/configuration.rb
Expand Up @@ -349,10 +349,17 @@ def exclusion_filter=(filter)
settings[:exclusion_filter] = filter
end

def exclusion_filter
settings[:exclusion_filter] || {}
end

def inclusion_filter=(filter)
settings[:inclusion_filter] = filter
end

def inclusion_filter
settings[:inclusion_filter] || {}
end
def filter_run_including(*args)
force_overwrite = if args.last.is_a?(Hash) || args.last.is_a?(Symbol)
false
Expand All @@ -362,7 +369,7 @@ def filter_run_including(*args)

options = build_metadata_hash_from(args)

if inclusion_filter and inclusion_filter[:line_number] || inclusion_filter[:full_description]
if inclusion_filter[:line_number] || inclusion_filter[:full_description]
warn "Filtering by #{options.inspect} is not possible since " \
"you are already filtering by #{inclusion_filter.inspect}"
else
Expand Down
14 changes: 7 additions & 7 deletions lib/rspec/core/world.rb
Expand Up @@ -34,8 +34,8 @@ def initialize(configuration=RSpec.configuration)
@filtered_examples = Hash.new { |hash,group|
hash[group] = begin
examples = group.examples.dup
examples = apply_exclusion_filters(examples, exclusion_filter) if exclusion_filter
examples = apply_inclusion_filters(examples, inclusion_filter) if inclusion_filter
examples = apply_exclusion_filters(examples, exclusion_filter)
examples = apply_inclusion_filters(examples, inclusion_filter)
examples.uniq
end
}
Expand Down Expand Up @@ -106,13 +106,13 @@ def announce_filters
example_groups.clear
if filter_announcements.empty?
reporter.message("No examples found.")
elsif inclusion_filter
elsif !inclusion_filter.empty?
message = "No examples matched #{inclusion_filter.description}."
if @configuration.run_all_when_everything_filtered?
message << " Running all."
end
reporter.message(message)
elsif exclusion_filter
elsif !exclusion_filter.empty?
reporter.message(
"No examples were matched. Perhaps #{exclusion_filter.description} is excluding everything?")
end
Expand All @@ -122,7 +122,7 @@ def announce_filters
end

def announce_inclusion_filter(announcements)
if inclusion_filter
unless inclusion_filter.empty?
announcements << "including #{inclusion_filter.description}"
end
end
Expand All @@ -139,8 +139,8 @@ def find_hook(hook, scope, group, example = nil)

private

def apply?(predicate, conditions)
lambda {|example| example.metadata.apply?(predicate, conditions)}
def apply?(predicate, filter)
lambda {|example| filter.empty? || example.metadata.apply?(predicate, filter)}
end

def declaration_line_numbers
Expand Down
13 changes: 13 additions & 0 deletions spec/rspec/core/configuration_spec.rb
Expand Up @@ -527,7 +527,20 @@ def metadata_hash(*args)
end
end

describe "#inclusion_filter" do
it "returns {} even if set to nil" do
config.inclusion_filter = nil
config.inclusion_filter.should eq({})
end
end


describe "#exclusion_filter" do
it "returns {} even if set to nil" do
config.exclusion_filter = nil
config.exclusion_filter.should eq({})
end

describe "the default :if filter" do
it "does not exclude a spec with no :if metadata" do
config.exclusion_filter[:if].call(nil, {}).should be_false
Expand Down

0 comments on commit b06c1d5

Please sign in to comment.