mirror of
https://gitea.invidious.io/iv-org/shard-spectator.git
synced 2024-08-15 00:53:35 +00:00
Add CompositeExampleFilter
This commit is contained in:
parent
481319c097
commit
d1767ebb7a
4 changed files with 47 additions and 85 deletions
33
spec/composite_example_filter_spec.cr
Normal file
33
spec/composite_example_filter_spec.cr
Normal 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
|
|
@ -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
|
13
src/spectator/composite_example_filter.cr
Normal file
13
src/spectator/composite_example_filter.cr
Normal 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
|
|
@ -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"
|
||||
|
|
Loading…
Reference in a new issue