Merge branch 'master' of gitlab.com:arctic-fox/spectator

This commit is contained in:
Michael Miller 2019-04-06 18:54:47 -06:00
commit 7348ae5757
21 changed files with 46 additions and 40 deletions

View file

@ -13,8 +13,9 @@ before_script:
spec:
script:
- crystal tool format --check
- crystal spec
- bin/ameba
- crystal tool format --check
pages:
stage: deploy

View file

@ -341,6 +341,7 @@ Contributing
Please make sure to run `crystal tool format` before submitting.
The CI build checks for properly formatted code.
[Ameba](https://github.com/veelenga/ameba) is run to check for code style.
Tests must be written for any new functionality.
Macros that create types are not as easy to test,

View file

@ -7,3 +7,8 @@ authors:
crystal: 0.27.2
license: MIT
development_dependencies:
ameba:
github: veelenga/ameba
version: ~> 0.9

View file

@ -154,7 +154,7 @@ describe Spectator::DSL::NestedExampleGroupBuilder do
it "adds a hook" do
hook_called = false
builder = Spectator::DSL::NestedExampleGroupBuilder.new("foo")
builder.add_around_each_hook(->(proc : ->) {
builder.add_around_each_hook(->(_proc : ->) {
hook_called = true
})
root = Spectator::DSL::RootExampleGroupBuilder.new.build(Spectator::Internals::SampleValues.empty)

View file

@ -143,7 +143,7 @@ describe Spectator::DSL::RootExampleGroupBuilder do
it "adds a hook" do
hook_called = false
builder = Spectator::DSL::RootExampleGroupBuilder.new
builder.add_around_each_hook(->(proc : ->) {
builder.add_around_each_hook(->(_proc : ->) {
hook_called = true
})
group = builder.build(Spectator::Internals::SampleValues.empty)

View file

@ -30,7 +30,7 @@ describe Spectator::ExampleIterator do
it "iterates through all examples" do
examples = [] of Spectator::Example
group = Spectator::RootExampleGroup.new(Spectator::ExampleHooks.empty, Spectator::ExampleConditions.empty)
group.children = Array(Spectator::ExampleComponent).new(5) do |_|
group.children = Array(Spectator::ExampleComponent).new(5) do
PassingExample.new(group, Spectator::Internals::SampleValues.empty)
end
iterator = Spectator::ExampleIterator.new(group)
@ -40,7 +40,7 @@ describe Spectator::ExampleIterator do
it "returns 'stop' at the end" do
group = Spectator::RootExampleGroup.new(Spectator::ExampleHooks.empty, Spectator::ExampleConditions.empty)
group.children = Array(Spectator::ExampleComponent).new(5) do |_|
group.children = Array(Spectator::ExampleComponent).new(5) do
PassingExample.new(group, Spectator::Internals::SampleValues.empty)
end
iterator = Spectator::ExampleIterator.new(group)
@ -93,7 +93,7 @@ describe Spectator::ExampleIterator do
end
else
Spectator::NestedExampleGroup.new(i.to_s, group, Spectator::ExampleHooks.empty, Spectator::ExampleConditions.empty).tap do |sub_group|
sub_group.children = Array(Spectator::ExampleComponent).new(5) do |j|
sub_group.children = Array(Spectator::ExampleComponent).new(5) do
PassingExample.new(sub_group, Spectator::Internals::SampleValues.empty).tap do |example|
expected_examples << example
end
@ -113,7 +113,7 @@ describe Spectator::ExampleIterator do
PassingExample.new(group, Spectator::Internals::SampleValues.empty)
else
Spectator::NestedExampleGroup.new(i.to_s, group, Spectator::ExampleHooks.empty, Spectator::ExampleConditions.empty).tap do |sub_group|
sub_group.children = Array(Spectator::ExampleComponent).new(5) do |j|
sub_group.children = Array(Spectator::ExampleComponent).new(5) do
PassingExample.new(sub_group, Spectator::Internals::SampleValues.empty)
end
end
@ -138,7 +138,7 @@ describe Spectator::ExampleIterator do
Spectator::NestedExampleGroup.new(j.to_s, sub_group1, Spectator::ExampleHooks.empty, Spectator::ExampleConditions.empty).tap do |sub_group2|
sub_group2.children = Array(Spectator::ExampleComponent).new(5) do |k|
Spectator::NestedExampleGroup.new(k.to_s, sub_group2, Spectator::ExampleHooks.empty, Spectator::ExampleConditions.empty).tap do |sub_group3|
sub_group3.children = Array(Spectator::ExampleComponent).new(5) do |_|
sub_group3.children = Array(Spectator::ExampleComponent).new(5) do
PassingExample.new(sub_group3, Spectator::Internals::SampleValues.empty).tap do |example|
expected_examples << example
end
@ -162,7 +162,7 @@ describe Spectator::ExampleIterator do
Spectator::NestedExampleGroup.new(j.to_s, sub_group1, Spectator::ExampleHooks.empty, Spectator::ExampleConditions.empty).tap do |sub_group2|
sub_group2.children = Array(Spectator::ExampleComponent).new(5) do |k|
Spectator::NestedExampleGroup.new(k.to_s, sub_group2, Spectator::ExampleHooks.empty, Spectator::ExampleConditions.empty).tap do |sub_group3|
sub_group3.children = Array(Spectator::ExampleComponent).new(5) do |_|
sub_group3.children = Array(Spectator::ExampleComponent).new(5) do
PassingExample.new(sub_group3, Spectator::Internals::SampleValues.empty)
end
end

View file

@ -59,8 +59,9 @@ describe Spectator::Expectations::Expectation do
match_data = new_matcher(value).match(new_partial(value))
expectation = Spectator::Expectations::Expectation.new(match_data, true)
expectation.values.each do |labeled_value|
label = labeled_value.label
value = labeled_value.value
value.to_s.should start_with(/not/i) if value.responds_to?(:negate)
value.to_s.should start_with(/not/i) if label == :expected
end
end
end

View file

@ -53,7 +53,6 @@ describe Spectator::Internals::Harness do
describe "#report_expectation" do
context "with a successful result" do
it "stores the result" do
error = nil.as(Exception?)
expectation = new_satisfied_expectation
spy = SpyExample.create do
harness = Spectator::Internals::Harness.current
@ -81,7 +80,6 @@ describe Spectator::Internals::Harness do
end
it "stores the result" do
error = nil.as(Exception?)
expectation = new_unsatisfied_expectation
spy = SpyExample.create do
harness = Spectator::Internals::Harness.current

View file

@ -125,7 +125,6 @@ describe Spectator::Matchers::TruthyMatcher do
it "contains the \"truthy\"" do
value = 42
label = "everything"
partial = new_partial(value)
matcher = Spectator::Matchers::TruthyMatcher.new(true)
match_data = matcher.match(partial)
@ -145,7 +144,6 @@ describe Spectator::Matchers::TruthyMatcher do
it "contains the \"truthy\"" do
value = 42
label = "everything"
partial = new_partial(value)
matcher = Spectator::Matchers::TruthyMatcher.new(true)
match_data = matcher.match(partial)
@ -261,7 +259,6 @@ describe Spectator::Matchers::TruthyMatcher do
it "contains the \"falsey\"" do
value = 42
label = "everything"
partial = new_partial(value)
matcher = Spectator::Matchers::TruthyMatcher.new(false)
match_data = matcher.match(partial)
@ -281,7 +278,6 @@ describe Spectator::Matchers::TruthyMatcher do
it "contains the \"falsey\"" do
value = 42
label = "everything"
partial = new_partial(value)
matcher = Spectator::Matchers::TruthyMatcher.new(false)
match_data = matcher.match(partial)

View file

@ -28,7 +28,7 @@ def nested_group_with_sub_groups(sub_group_count = 5, example_count = 5)
examples = [] of Spectator::Example
group.children = Array(Spectator::ExampleComponent).new(sub_group_count) do |i|
Spectator::NestedExampleGroup.new(i.to_s, group, Spectator::ExampleHooks.empty, Spectator::ExampleConditions.empty).tap do |sub_group|
sub_group.children = Array(Spectator::ExampleComponent).new(example_count) do |j|
sub_group.children = Array(Spectator::ExampleComponent).new(example_count) do
PassingExample.new(group, Spectator::Internals::SampleValues.empty).tap do |example|
examples << example
end
@ -359,7 +359,7 @@ describe Spectator::NestedExampleGroup do
root = Spectator::RootExampleGroup.new(Spectator::ExampleHooks.empty, Spectator::ExampleConditions.empty)
group = Spectator::NestedExampleGroup.new("what", root, hooks, Spectator::ExampleConditions.empty)
root.children = [group.as(Spectator::ExampleComponent)]
group.children = Array(Spectator::ExampleComponent).new(5) do |i|
group.children = Array(Spectator::ExampleComponent).new(5) do
PassingExample.new(group, Spectator::Internals::SampleValues.empty).tap do |example|
examples << example
end
@ -378,7 +378,7 @@ describe Spectator::NestedExampleGroup do
root = Spectator::RootExampleGroup.new(Spectator::ExampleHooks.empty, Spectator::ExampleConditions.empty)
group = Spectator::NestedExampleGroup.new("what", root, hooks, Spectator::ExampleConditions.empty)
root.children = [group.as(Spectator::ExampleComponent)]
group.children = Array(Spectator::ExampleComponent).new(5) do |i|
group.children = Array(Spectator::ExampleComponent).new(5) do
PassingExample.new(group, Spectator::Internals::SampleValues.empty).tap do |example|
examples << example
end
@ -397,7 +397,7 @@ describe Spectator::NestedExampleGroup do
root = Spectator::RootExampleGroup.new(hooks, Spectator::ExampleConditions.empty)
group = Spectator::NestedExampleGroup.new("what", root, Spectator::ExampleHooks.empty, Spectator::ExampleConditions.empty)
root.children = [group.as(Spectator::ExampleComponent)]
group.children = Array(Spectator::ExampleComponent).new(5) do |i|
group.children = Array(Spectator::ExampleComponent).new(5) do
PassingExample.new(group, Spectator::Internals::SampleValues.empty).tap do |example|
examples << example
end
@ -416,7 +416,7 @@ describe Spectator::NestedExampleGroup do
root = Spectator::RootExampleGroup.new(hooks, Spectator::ExampleConditions.empty)
group = Spectator::NestedExampleGroup.new("what", root, Spectator::ExampleHooks.empty, Spectator::ExampleConditions.empty)
root.children = [group.as(Spectator::ExampleComponent)]
group.children = Array(Spectator::ExampleComponent).new(5) do |i|
group.children = Array(Spectator::ExampleComponent).new(5) do
PassingExample.new(group, Spectator::Internals::SampleValues.empty).tap do |example|
examples << example
end

View file

@ -22,7 +22,7 @@ def root_group_with_sub_groups(sub_group_count = 5, example_count = 5)
examples = [] of Spectator::Example
group.children = Array(Spectator::ExampleComponent).new(sub_group_count) do |i|
Spectator::NestedExampleGroup.new(i.to_s, group, Spectator::ExampleHooks.empty, Spectator::ExampleConditions.empty).tap do |sub_group|
sub_group.children = Array(Spectator::ExampleComponent).new(example_count) do |j|
sub_group.children = Array(Spectator::ExampleComponent).new(example_count) do
PassingExample.new(group, Spectator::Internals::SampleValues.empty).tap do |example|
examples << example
end
@ -246,7 +246,7 @@ describe Spectator::RootExampleGroup do
examples = [] of Spectator::Example
hooks = new_hooks(after_all: ->{ called = true; nil })
group = Spectator::RootExampleGroup.new(hooks, Spectator::ExampleConditions.empty)
group.children = Array(Spectator::ExampleComponent).new(5) do |i|
group.children = Array(Spectator::ExampleComponent).new(5) do
PassingExample.new(group, Spectator::Internals::SampleValues.empty).tap do |example|
examples << example
end
@ -263,7 +263,7 @@ describe Spectator::RootExampleGroup do
examples = [] of Spectator::Example
hooks = new_hooks(after_each: ->{ called = true; nil })
group = Spectator::RootExampleGroup.new(hooks, Spectator::ExampleConditions.empty)
group.children = Array(Spectator::ExampleComponent).new(5) do |i|
group.children = Array(Spectator::ExampleComponent).new(5) do
PassingExample.new(group, Spectator::Internals::SampleValues.empty).tap do |example|
examples << example
end

View file

@ -856,7 +856,7 @@ describe Spectator::RunnableExample do
root = Spectator::RootExampleGroup.new(Spectator::ExampleHooks.empty, conditions)
group = Spectator::NestedExampleGroup.new("what", root, Spectator::ExampleHooks.empty, Spectator::ExampleConditions.empty)
root.children = [group.as(Spectator::ExampleComponent)]
result = run_example(FailingExample, group)
run_example(FailingExample, group)
called.should be_false
end
end
@ -1219,7 +1219,7 @@ describe Spectator::RunnableExample do
root = Spectator::RootExampleGroup.new(Spectator::ExampleHooks.empty, conditions)
group = Spectator::NestedExampleGroup.new("what", root, Spectator::ExampleHooks.empty, Spectator::ExampleConditions.empty)
root.children = [group.as(Spectator::ExampleComponent)]
result = run_example(ErroredExample, group)
run_example(ErroredExample, group)
called.should be_false
end
end

View file

@ -100,7 +100,7 @@ describe Spectator::Runner do
end
it "#start_example is called for each example" do
group = SpyExample.create_group(5) { |index| nil }
group = SpyExample.create_group(5) { nil }
suite = new_test_suite(group)
spy = SpyFormatter.new
runner = Spectator::Runner.new(suite, spectator_test_config(spy))
@ -109,7 +109,7 @@ describe Spectator::Runner do
end
it "passes the correct example to #start_example" do
group = SpyExample.create_group(5) { |index| nil }
group = SpyExample.create_group(5) { nil }
suite = new_test_suite(group)
spy = SpyFormatter.new
runner = Spectator::Runner.new(suite, spectator_test_config(spy))
@ -125,7 +125,7 @@ describe Spectator::Runner do
end
it "calls #end_example for each example" do
group = SpyExample.create_group(5) { |index| nil }
group = SpyExample.create_group(5) { nil }
suite = new_test_suite(group)
spy = SpyFormatter.new
runner = Spectator::Runner.new(suite, spectator_test_config(spy))
@ -175,7 +175,7 @@ describe Spectator::Runner do
end
it "contains the expected time span" do
group = SpyExample.create_group(5) { |index| nil }
group = SpyExample.create_group(5) { nil }
suite = new_test_suite(group)
spy = SpyFormatter.new
runner = Spectator::Runner.new(suite, spectator_test_config(spy))

View file

@ -4,7 +4,7 @@ describe Spectator::TestSuite do
describe "#each" do
it "yields each example" do
group = Spectator::RootExampleGroup.new(Spectator::ExampleHooks.empty, Spectator::ExampleConditions.empty)
group.children = Array.new(5) do |index|
group.children = Array.new(5) do
PassingExample.new(group, Spectator::Internals::SampleValues.empty).as(Spectator::ExampleComponent)
end
test_suite = Spectator::TestSuite.new(group, Spectator::NullExampleFilter.new)
@ -17,7 +17,7 @@ describe Spectator::TestSuite do
it "skips examples not in the filter" do
group = Spectator::RootExampleGroup.new(Spectator::ExampleHooks.empty, Spectator::ExampleConditions.empty)
group.children = Array.new(5) do |index|
group.children = Array.new(5) do
PassingExample.new(group, Spectator::Internals::SampleValues.empty).as(Spectator::ExampleComponent)
end
test_suite = Spectator::TestSuite.new(group, Spectator::CompositeExampleFilter.new([] of Spectator::ExampleFilter))

View file

@ -1592,7 +1592,7 @@ module Spectator::DSL
# Indicates whether the example references a method.
def symbolic?
{{what.starts_with?('#') ? true : false}}
{{what.is_a?(StringLiteral) && what.starts_with?('#') ? true : false}}
end
# Add the block's content.

View file

@ -95,7 +95,7 @@ module Spectator
offset = index
# Loop through each child
# until one is found to contain the index.
child = children.each do |child|
found = children.each do |child|
count = child.example_count
# Example groups consider their range to be [0, example_count).
# Each child is offset by the total example count of the previous children.
@ -114,7 +114,7 @@ module Spectator
# Otherwise, the indexer repeats the process for the next child.
# It should be impossible to get nil here,
# provided the bounds check and example counts are correct.
child.not_nil![offset]
found.not_nil![offset]
end
# Checks whether all examples in the group have been run.

View file

@ -25,7 +25,7 @@ module Spectator::Expectations
if @negated
labeled_values.each do |labeled_value|
value = labeled_value.value
value.negate if value.responds_to?(:negate)
value.negate
end
end
end

View file

@ -35,7 +35,7 @@ module Spectator::Formatting
days = hours / 24
hours %= 24
return sprintf("%i days %i:%02i:%02i", days, hours, minutes, int_seconds)
sprintf("%i days %i:%02i:%02i", days, hours, minutes, int_seconds)
end
end
end

View file

@ -26,7 +26,7 @@ module Spectator::Matchers
# Produces a stringified value with additional information.
def inspect(io)
value.inspect(io)
io << value
end
end
end

View file

@ -11,8 +11,8 @@ module Spectator::Matchers
values = ExpectedActual.new(expected, label, actual, partial.label)
if values.expected.size == values.actual.size
index = 0
values.expected.zip(values.actual) do |expected, actual|
return ContentMatchData.new(index, values) unless expected == actual
values.expected.zip(values.actual) do |expected, element|
return ContentMatchData.new(index, values) unless expected == element
index += 1
end
IdenticalMatchData.new(values)

View file

@ -2,5 +2,9 @@ module Spectator::Matchers
# Abstract base for all match data values.
# All sub-classes are expected to implement their own `#to_s`.
private abstract class MatchDataValue
# Placeholder for negating the value.
def negate
# ...
end
end
end