Add CompositeExampleFilter

This commit is contained in:
Michael Miller 2019-03-25 11:10:27 -06:00
parent 481319c097
commit d1767ebb7a
4 changed files with 47 additions and 85 deletions

View file

@ -0,0 +1,33 @@
require "./spec_helper"
describe Spectator::CompositeExampleFilter do
describe "#includes?" do
context "with a matching filter" do
it "is true" do
example = PassingExample.create
filters = [Spectator::NullExampleFilter.new.as(Spectator::ExampleFilter)]
filter = Spectator::CompositeExampleFilter.new(filters)
filter.includes?(example).should be_true
end
end
context "with a non-matching filter" do
it "is false" do
example = PassingExample.create
source = Spectator::Source.new(__FILE__, __LINE__)
filters = [Spectator::SourceExampleFilter.new(source).as(Spectator::ExampleFilter)]
filter = Spectator::CompositeExampleFilter.new(filters)
filter.includes?(example).should be_false
end
end
context "with no filters" do
it "is false" do
example = PassingExample.create
filters = [] of Spectator::ExampleFilter
filter = Spectator::CompositeExampleFilter.new(filters)
filter.includes?(example).should be_false
end
end
end
end

View file

@ -1,85 +0,0 @@
require "./spec_helper"
def new_filter(criterion)
criteria = ["BOGUS", -1, criterion, /^$/, Spectator::Source.new(__FILE__, __LINE__)]
Spectator::ExampleFilter.new(criteria)
end
describe Spectator::ExampleFilter do
describe "#includes?" do
context "with a matching Regex" do
it "is true" do
example = new_runnable_example
regex = Regex.new(Regex.escape(example.what))
filter = new_filter(regex)
filter.includes?(example).should be_true
end
end
context "with a non-matching Regex" do
it "is false" do
example = new_runnable_example
regex = /BOGUS/
filter = new_filter(regex)
filter.includes?(example).should be_false
end
end
context "with a String equal to the name" do
it "is true" do
example = new_runnable_example
filter = new_filter(example.to_s)
filter.includes?(example).should be_true
end
end
context "with a String different than the name" do
it "is false" do
example = new_runnable_example
filter = new_filter("FAKE")
filter.includes?(example).should be_false
end
end
context "with a matching source location" do
it "is true" do
example = new_runnable_example
filter = new_filter(example.source)
filter.includes?(example).should be_true
end
end
context "with a non-matching source location" do
it "is false" do
example = new_runnable_example
source = Spectator::Source.new(__FILE__, __LINE__)
filter = new_filter(source)
filter.includes?(example).should be_false
end
end
context "with a matching source line" do
it "is true" do
example = new_runnable_example
filter = new_filter(example.source.line)
filter.includes?(example).should be_true
end
end
context "with a non-matching source line" do
it "is false" do
example = new_runnable_example
line = example.source.line + 5
filter = new_filter(line)
filter.includes?(example).should be_false
end
end
context "with an empty criteria" do
it "is true" do
filter = Spectator::ExampleFilter.new
filter.includes?(new_runnable_example).should be_true
end
end
end
end

View file

@ -0,0 +1,13 @@
module Spectator
# Filter that combines multiple other filters.
class CompositeExampleFilter < ExampleFilter
# Creates the example filter.
def initialize(@filters : Array(ExampleFilter))
end
# Checks whether the example satisfies the filter.
def includes?(example)
@filters.any?(&.includes?(example))
end
end
end

View file

@ -34,6 +34,7 @@ require "./source_example_filter"
require "./line_example_filter"
require "./name_example_filter"
require "./null_example_filter"
require "./composite_example_filter"
require "./example_failed"
require "./expectation_failed"