mirror of
https://gitea.invidious.io/iv-org/shard-spectator.git
synced 2024-08-15 00:53:35 +00:00
Reorder methods to be in a more standard layout
This commit is contained in:
parent
898ddcb616
commit
ede691dd6a
26 changed files with 254 additions and 255 deletions
|
@ -4,11 +4,6 @@ module Spectator::Matchers
|
||||||
# Common matcher that tests whether two values semantically equal each other.
|
# Common matcher that tests whether two values semantically equal each other.
|
||||||
# The values are compared with the === operator.
|
# The values are compared with the === operator.
|
||||||
struct CaseMatcher(ExpectedType) < ValueMatcher(ExpectedType)
|
struct CaseMatcher(ExpectedType) < ValueMatcher(ExpectedType)
|
||||||
# Checks whether the matcher is satisifed with the expression given to it.
|
|
||||||
private def match?(actual : TestExpression(T)) forall T
|
|
||||||
expected.value === actual.value
|
|
||||||
end
|
|
||||||
|
|
||||||
# Short text about the matcher's purpose.
|
# Short text about the matcher's purpose.
|
||||||
# This explains what condition satisfies the matcher.
|
# This explains what condition satisfies the matcher.
|
||||||
# The description is used when the one-liner syntax is used.
|
# The description is used when the one-liner syntax is used.
|
||||||
|
@ -16,6 +11,11 @@ module Spectator::Matchers
|
||||||
"matches #{expected.label}"
|
"matches #{expected.label}"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Checks whether the matcher is satisifed with the expression given to it.
|
||||||
|
private def match?(actual : TestExpression(T)) forall T
|
||||||
|
expected.value === actual.value
|
||||||
|
end
|
||||||
|
|
||||||
# Message displayed when the matcher isn't satisifed.
|
# Message displayed when the matcher isn't satisifed.
|
||||||
#
|
#
|
||||||
# This is only called when `#match?` returns false.
|
# This is only called when `#match?` returns false.
|
||||||
|
|
|
@ -5,11 +5,6 @@ require "./value_matcher"
|
||||||
module Spectator::Matchers
|
module Spectator::Matchers
|
||||||
# Matcher for checking that a value is in a collection of other values.
|
# Matcher for checking that a value is in a collection of other values.
|
||||||
struct CollectionMatcher(ExpectedType) < ValueMatcher(ExpectedType)
|
struct CollectionMatcher(ExpectedType) < ValueMatcher(ExpectedType)
|
||||||
# Checks whether the matcher is satisifed with the expression given to it.
|
|
||||||
private def match?(actual : TestExpression(T)) forall T
|
|
||||||
expected.value.includes?(actual.value)
|
|
||||||
end
|
|
||||||
|
|
||||||
# Short text about the matcher's purpose.
|
# Short text about the matcher's purpose.
|
||||||
# This explains what condition satisfies the matcher.
|
# This explains what condition satisfies the matcher.
|
||||||
# The description is used when the one-liner syntax is used.
|
# The description is used when the one-liner syntax is used.
|
||||||
|
@ -17,6 +12,11 @@ module Spectator::Matchers
|
||||||
"is in #{expected.label}"
|
"is in #{expected.label}"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Checks whether the matcher is satisifed with the expression given to it.
|
||||||
|
private def match?(actual : TestExpression(T)) forall T
|
||||||
|
expected.value.includes?(actual.value)
|
||||||
|
end
|
||||||
|
|
||||||
# Message displayed when the matcher isn't satisifed.
|
# Message displayed when the matcher isn't satisifed.
|
||||||
#
|
#
|
||||||
# This is only called when `#match?` returns false.
|
# This is only called when `#match?` returns false.
|
||||||
|
|
|
@ -4,13 +4,6 @@ module Spectator::Matchers
|
||||||
# Matcher that tests whether a value, such as a `String` or `Array`, contains one or more values.
|
# Matcher that tests whether a value, such as a `String` or `Array`, contains one or more values.
|
||||||
# The values are checked with the `includes?` method.
|
# The values are checked with the `includes?` method.
|
||||||
struct ContainMatcher(ExpectedType) < ValueMatcher(ExpectedType)
|
struct ContainMatcher(ExpectedType) < ValueMatcher(ExpectedType)
|
||||||
# Checks whether the matcher is satisifed with the expression given to it.
|
|
||||||
private def match?(actual : TestExpression(T)) forall T
|
|
||||||
expected.value.all? do |item|
|
|
||||||
actual.value.includes?(item)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# Short text about the matcher's purpose.
|
# Short text about the matcher's purpose.
|
||||||
# This explains what condition satisfies the matcher.
|
# This explains what condition satisfies the matcher.
|
||||||
# The description is used when the one-liner syntax is used.
|
# The description is used when the one-liner syntax is used.
|
||||||
|
@ -18,6 +11,13 @@ module Spectator::Matchers
|
||||||
"contains #{expected.label}"
|
"contains #{expected.label}"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Checks whether the matcher is satisifed with the expression given to it.
|
||||||
|
private def match?(actual : TestExpression(T)) forall T
|
||||||
|
expected.value.all? do |item|
|
||||||
|
actual.value.includes?(item)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
# Message displayed when the matcher isn't satisifed.
|
# Message displayed when the matcher isn't satisifed.
|
||||||
#
|
#
|
||||||
# This is only called when `#match?` returns false.
|
# This is only called when `#match?` returns false.
|
||||||
|
|
|
@ -4,11 +4,6 @@ module Spectator::Matchers
|
||||||
# Matcher that tests whether a collection is empty.
|
# Matcher that tests whether a collection is empty.
|
||||||
# The values are checked with the `empty?` method.
|
# The values are checked with the `empty?` method.
|
||||||
struct EmptyMatcher < StandardMatcher
|
struct EmptyMatcher < StandardMatcher
|
||||||
# Checks whether the matcher is satisifed with the expression given to it.
|
|
||||||
private def match?(actual : TestExpression(T)) forall T
|
|
||||||
actual.value.empty?
|
|
||||||
end
|
|
||||||
|
|
||||||
# Short text about the matcher's purpose.
|
# Short text about the matcher's purpose.
|
||||||
# This explains what condition satisfies the matcher.
|
# This explains what condition satisfies the matcher.
|
||||||
# The description is used when the one-liner syntax is used.
|
# The description is used when the one-liner syntax is used.
|
||||||
|
@ -16,6 +11,11 @@ module Spectator::Matchers
|
||||||
"is empty"
|
"is empty"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Checks whether the matcher is satisifed with the expression given to it.
|
||||||
|
private def match?(actual : TestExpression(T)) forall T
|
||||||
|
actual.value.empty?
|
||||||
|
end
|
||||||
|
|
||||||
# Message displayed when the matcher isn't satisifed.
|
# Message displayed when the matcher isn't satisifed.
|
||||||
#
|
#
|
||||||
# This is only called when `#match?` returns false.
|
# This is only called when `#match?` returns false.
|
||||||
|
|
|
@ -30,6 +30,16 @@ module Spectator::Matchers
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Performs the test against the expression, but inverted.
|
||||||
|
# A successful match with `#match` should normally fail for this method, and vice-versa.
|
||||||
|
def negated_match(actual : TestExpression(T)) : MatchData forall T
|
||||||
|
if actual.value.responds_to?(:ends_with?)
|
||||||
|
negated_match_ends_with(actual)
|
||||||
|
else
|
||||||
|
negated_match_last(actual)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
# Checks whether the actual value ends with the expected value.
|
# Checks whether the actual value ends with the expected value.
|
||||||
# This method expects (and uses) the `#ends_with?` method on the value.
|
# This method expects (and uses) the `#ends_with?` method on the value.
|
||||||
private def match_ends_with(actual_value, actual_label)
|
private def match_ends_with(actual_value, actual_label)
|
||||||
|
@ -60,16 +70,6 @@ module Spectator::Matchers
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# Performs the test against the expression, but inverted.
|
|
||||||
# A successful match with `#match` should normally fail for this method, and vice-versa.
|
|
||||||
def negated_match(actual : TestExpression(T)) : MatchData forall T
|
|
||||||
if actual.value.responds_to?(:ends_with?)
|
|
||||||
negated_match_ends_with(actual)
|
|
||||||
else
|
|
||||||
negated_match_last(actual)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# Checks whether the actual value does not end with the expected value.
|
# Checks whether the actual value does not end with the expected value.
|
||||||
# This method expects (and uses) the `#ends_with?` method on the value.
|
# This method expects (and uses) the `#ends_with?` method on the value.
|
||||||
private def negated_match_ends_with(actual)
|
private def negated_match_ends_with(actual)
|
||||||
|
|
|
@ -4,11 +4,6 @@ module Spectator::Matchers
|
||||||
# Common matcher that tests whether two values equal each other.
|
# Common matcher that tests whether two values equal each other.
|
||||||
# The values are compared with the == operator.
|
# The values are compared with the == operator.
|
||||||
struct EqualityMatcher(ExpectedType) < ValueMatcher(ExpectedType)
|
struct EqualityMatcher(ExpectedType) < ValueMatcher(ExpectedType)
|
||||||
# Checks whether the matcher is satisifed with the expression given to it.
|
|
||||||
private def match?(actual : TestExpression(T)) forall T
|
|
||||||
expected.value == actual.value
|
|
||||||
end
|
|
||||||
|
|
||||||
# Short text about the matcher's purpose.
|
# Short text about the matcher's purpose.
|
||||||
# This explains what condition satisfies the matcher.
|
# This explains what condition satisfies the matcher.
|
||||||
# The description is used when the one-liner syntax is used.
|
# The description is used when the one-liner syntax is used.
|
||||||
|
@ -16,6 +11,11 @@ module Spectator::Matchers
|
||||||
"equals #{expected.label}"
|
"equals #{expected.label}"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Checks whether the matcher is satisifed with the expression given to it.
|
||||||
|
private def match?(actual : TestExpression(T)) forall T
|
||||||
|
expected.value == actual.value
|
||||||
|
end
|
||||||
|
|
||||||
# Message displayed when the matcher isn't satisifed.
|
# Message displayed when the matcher isn't satisifed.
|
||||||
#
|
#
|
||||||
# This is only called when `#match?` returns false.
|
# This is only called when `#match?` returns false.
|
||||||
|
|
|
@ -4,11 +4,6 @@ module Spectator::Matchers
|
||||||
# Matcher that tests whether one value is greater than or equal to another.
|
# Matcher that tests whether one value is greater than or equal to another.
|
||||||
# The values are compared with the >= operator.
|
# The values are compared with the >= operator.
|
||||||
struct GreaterThanEqualMatcher(ExpectedType) < ValueMatcher(ExpectedType)
|
struct GreaterThanEqualMatcher(ExpectedType) < ValueMatcher(ExpectedType)
|
||||||
# Checks whether the matcher is satisifed with the expression given to it.
|
|
||||||
private def match?(actual : TestExpression(T)) forall T
|
|
||||||
actual.value >= expected.value
|
|
||||||
end
|
|
||||||
|
|
||||||
# Short text about the matcher's purpose.
|
# Short text about the matcher's purpose.
|
||||||
# This explains what condition satisfies the matcher.
|
# This explains what condition satisfies the matcher.
|
||||||
# The description is used when the one-liner syntax is used.
|
# The description is used when the one-liner syntax is used.
|
||||||
|
@ -16,6 +11,11 @@ module Spectator::Matchers
|
||||||
"greater than or equal to #{expected.label}"
|
"greater than or equal to #{expected.label}"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Checks whether the matcher is satisifed with the expression given to it.
|
||||||
|
private def match?(actual : TestExpression(T)) forall T
|
||||||
|
actual.value >= expected.value
|
||||||
|
end
|
||||||
|
|
||||||
# Message displayed when the matcher isn't satisifed.
|
# Message displayed when the matcher isn't satisifed.
|
||||||
#
|
#
|
||||||
# This is only called when `#match?` returns false.
|
# This is only called when `#match?` returns false.
|
||||||
|
|
|
@ -4,11 +4,6 @@ module Spectator::Matchers
|
||||||
# Matcher that tests whether one value is greater than another.
|
# Matcher that tests whether one value is greater than another.
|
||||||
# The values are compared with the > operator.
|
# The values are compared with the > operator.
|
||||||
struct GreaterThanMatcher(ExpectedType) < ValueMatcher(ExpectedType)
|
struct GreaterThanMatcher(ExpectedType) < ValueMatcher(ExpectedType)
|
||||||
# Checks whether the matcher is satisifed with the expression given to it.
|
|
||||||
private def match?(actual : TestExpression(T)) forall T
|
|
||||||
actual.value > expected.value
|
|
||||||
end
|
|
||||||
|
|
||||||
# Short text about the matcher's purpose.
|
# Short text about the matcher's purpose.
|
||||||
# This explains what condition satisfies the matcher.
|
# This explains what condition satisfies the matcher.
|
||||||
# The description is used when the one-liner syntax is used.
|
# The description is used when the one-liner syntax is used.
|
||||||
|
@ -16,6 +11,11 @@ module Spectator::Matchers
|
||||||
"greater than #{expected.label}"
|
"greater than #{expected.label}"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Checks whether the matcher is satisifed with the expression given to it.
|
||||||
|
private def match?(actual : TestExpression(T)) forall T
|
||||||
|
actual.value > expected.value
|
||||||
|
end
|
||||||
|
|
||||||
# Message displayed when the matcher isn't satisifed.
|
# Message displayed when the matcher isn't satisifed.
|
||||||
#
|
#
|
||||||
# This is only called when `#match?` returns false.
|
# This is only called when `#match?` returns false.
|
||||||
|
|
|
@ -4,11 +4,6 @@ module Spectator::Matchers
|
||||||
# Matcher that tests whether a `Hash` (or similar type) has a given key.
|
# Matcher that tests whether a `Hash` (or similar type) has a given key.
|
||||||
# The set is checked with the `has_key?` method.
|
# The set is checked with the `has_key?` method.
|
||||||
struct HaveKeyMatcher(ExpectedType) < ValueMatcher(ExpectedType)
|
struct HaveKeyMatcher(ExpectedType) < ValueMatcher(ExpectedType)
|
||||||
# Checks whether the matcher is satisifed with the expression given to it.
|
|
||||||
private def match?(actual : TestExpression(T)) forall T
|
|
||||||
actual.value.has_key?(expected.value)
|
|
||||||
end
|
|
||||||
|
|
||||||
# Short text about the matcher's purpose.
|
# Short text about the matcher's purpose.
|
||||||
# This explains what condition satisfies the matcher.
|
# This explains what condition satisfies the matcher.
|
||||||
# The description is used when the one-liner syntax is used.
|
# The description is used when the one-liner syntax is used.
|
||||||
|
@ -16,6 +11,11 @@ module Spectator::Matchers
|
||||||
"has key #{expected.label}"
|
"has key #{expected.label}"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Checks whether the matcher is satisifed with the expression given to it.
|
||||||
|
private def match?(actual : TestExpression(T)) forall T
|
||||||
|
actual.value.has_key?(expected.value)
|
||||||
|
end
|
||||||
|
|
||||||
# Message displayed when the matcher isn't satisifed.
|
# Message displayed when the matcher isn't satisifed.
|
||||||
#
|
#
|
||||||
# This is only called when `#match?` returns false.
|
# This is only called when `#match?` returns false.
|
||||||
|
|
|
@ -5,6 +5,13 @@ module Spectator::Matchers
|
||||||
# For a `String`, the `includes?` method is used.
|
# For a `String`, the `includes?` method is used.
|
||||||
# Otherwise, it expects an `Enumerable` and iterates over each item until === is true.
|
# Otherwise, it expects an `Enumerable` and iterates over each item until === is true.
|
||||||
struct HaveMatcher(ExpectedType) < ValueMatcher(ExpectedType)
|
struct HaveMatcher(ExpectedType) < ValueMatcher(ExpectedType)
|
||||||
|
# Short text about the matcher's purpose.
|
||||||
|
# This explains what condition satisfies the matcher.
|
||||||
|
# The description is used when the one-liner syntax is used.
|
||||||
|
def description
|
||||||
|
"includes #{expected.label}"
|
||||||
|
end
|
||||||
|
|
||||||
# Checks whether the matcher is satisifed with the expression given to it.
|
# Checks whether the matcher is satisifed with the expression given to it.
|
||||||
private def match?(actual : TestExpression(T)) forall T
|
private def match?(actual : TestExpression(T)) forall T
|
||||||
if (value = actual.value).is_a?(String)
|
if (value = actual.value).is_a?(String)
|
||||||
|
@ -33,13 +40,6 @@ module Spectator::Matchers
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# Short text about the matcher's purpose.
|
|
||||||
# This explains what condition satisfies the matcher.
|
|
||||||
# The description is used when the one-liner syntax is used.
|
|
||||||
def description
|
|
||||||
"includes #{expected.label}"
|
|
||||||
end
|
|
||||||
|
|
||||||
# Message displayed when the matcher isn't satisifed.
|
# Message displayed when the matcher isn't satisifed.
|
||||||
#
|
#
|
||||||
# This is only called when `#match?` returns false.
|
# This is only called when `#match?` returns false.
|
||||||
|
|
|
@ -75,17 +75,6 @@ module Spectator::Matchers
|
||||||
{% end %}
|
{% end %}
|
||||||
end
|
end
|
||||||
|
|
||||||
# Produces the tuple for the failed match data from a snapshot of the predicate methods.
|
|
||||||
private def values(snapshot)
|
|
||||||
{% begin %}
|
|
||||||
{
|
|
||||||
{% for attribute in ExpectedType.keys %}
|
|
||||||
{{attribute}}: snapshot[{{attribute.symbolize}}].inspect,
|
|
||||||
{% end %}
|
|
||||||
}
|
|
||||||
{% end %}
|
|
||||||
end
|
|
||||||
|
|
||||||
# Checks if all predicate methods from the snapshot of them are satisified.
|
# Checks if all predicate methods from the snapshot of them are satisified.
|
||||||
private def match?(snapshot)
|
private def match?(snapshot)
|
||||||
# Test each predicate and immediately return false if one is false.
|
# Test each predicate and immediately return false if one is false.
|
||||||
|
@ -96,5 +85,16 @@ module Spectator::Matchers
|
||||||
# All checks passed if this point is reached.
|
# All checks passed if this point is reached.
|
||||||
true
|
true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Produces the tuple for the failed match data from a snapshot of the predicate methods.
|
||||||
|
private def values(snapshot)
|
||||||
|
{% begin %}
|
||||||
|
{
|
||||||
|
{% for attribute in ExpectedType.keys %}
|
||||||
|
{{attribute}}: snapshot[{{attribute.symbolize}}].inspect,
|
||||||
|
{% end %}
|
||||||
|
}
|
||||||
|
{% end %}
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -4,11 +4,6 @@ module Spectator::Matchers
|
||||||
# Matcher that tests whether a `Hash` (or similar type) has a given value.
|
# Matcher that tests whether a `Hash` (or similar type) has a given value.
|
||||||
# The set is checked with the `has_value?` method.
|
# The set is checked with the `has_value?` method.
|
||||||
struct HaveValueMatcher(ExpectedType) < ValueMatcher(ExpectedType)
|
struct HaveValueMatcher(ExpectedType) < ValueMatcher(ExpectedType)
|
||||||
# Checks whether the matcher is satisifed with the expression given to it.
|
|
||||||
private def match?(actual : TestExpression(T)) forall T
|
|
||||||
actual.value.has_value?(expected.value)
|
|
||||||
end
|
|
||||||
|
|
||||||
# Short text about the matcher's purpose.
|
# Short text about the matcher's purpose.
|
||||||
# This explains what condition satisfies the matcher.
|
# This explains what condition satisfies the matcher.
|
||||||
# The description is used when the one-liner syntax is used.
|
# The description is used when the one-liner syntax is used.
|
||||||
|
@ -16,6 +11,11 @@ module Spectator::Matchers
|
||||||
"has value #{expected.label}"
|
"has value #{expected.label}"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Checks whether the matcher is satisifed with the expression given to it.
|
||||||
|
private def match?(actual : TestExpression(T)) forall T
|
||||||
|
actual.value.has_value?(expected.value)
|
||||||
|
end
|
||||||
|
|
||||||
# Message displayed when the matcher isn't satisifed.
|
# Message displayed when the matcher isn't satisifed.
|
||||||
#
|
#
|
||||||
# This is only called when `#match?` returns false.
|
# This is only called when `#match?` returns false.
|
||||||
|
|
|
@ -4,11 +4,6 @@ module Spectator::Matchers
|
||||||
# Matcher that tests whether two values do not equal each other.
|
# Matcher that tests whether two values do not equal each other.
|
||||||
# The values are compared with the != operator.
|
# The values are compared with the != operator.
|
||||||
struct InequalityMatcher(ExpectedType) < ValueMatcher(ExpectedType)
|
struct InequalityMatcher(ExpectedType) < ValueMatcher(ExpectedType)
|
||||||
# Checks whether the matcher is satisifed with the expression given to it.
|
|
||||||
private def match?(actual : TestExpression(T)) forall T
|
|
||||||
expected.value != actual.value
|
|
||||||
end
|
|
||||||
|
|
||||||
# Short text about the matcher's purpose.
|
# Short text about the matcher's purpose.
|
||||||
# This explains what condition satisfies the matcher.
|
# This explains what condition satisfies the matcher.
|
||||||
# The description is used when the one-liner syntax is used.
|
# The description is used when the one-liner syntax is used.
|
||||||
|
@ -16,6 +11,11 @@ module Spectator::Matchers
|
||||||
"is not equal to #{expected.label}"
|
"is not equal to #{expected.label}"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Checks whether the matcher is satisifed with the expression given to it.
|
||||||
|
private def match?(actual : TestExpression(T)) forall T
|
||||||
|
expected.value != actual.value
|
||||||
|
end
|
||||||
|
|
||||||
# Message displayed when the matcher isn't satisifed.
|
# Message displayed when the matcher isn't satisifed.
|
||||||
#
|
#
|
||||||
# This is only called when `#match?` returns false.
|
# This is only called when `#match?` returns false.
|
||||||
|
|
|
@ -4,11 +4,6 @@ module Spectator::Matchers
|
||||||
# Matcher that tests whether one value is less than or equal to another.
|
# Matcher that tests whether one value is less than or equal to another.
|
||||||
# The values are compared with the <= operator.
|
# The values are compared with the <= operator.
|
||||||
struct LessThanEqualMatcher(ExpectedType) < ValueMatcher(ExpectedType)
|
struct LessThanEqualMatcher(ExpectedType) < ValueMatcher(ExpectedType)
|
||||||
# Checks whether the matcher is satisifed with the expression given to it.
|
|
||||||
private def match?(actual : TestExpression(T)) forall T
|
|
||||||
actual.value <= expected.value
|
|
||||||
end
|
|
||||||
|
|
||||||
# Short text about the matcher's purpose.
|
# Short text about the matcher's purpose.
|
||||||
# This explains what condition satisfies the matcher.
|
# This explains what condition satisfies the matcher.
|
||||||
# The description is used when the one-liner syntax is used.
|
# The description is used when the one-liner syntax is used.
|
||||||
|
@ -16,6 +11,11 @@ module Spectator::Matchers
|
||||||
"less than or equal to #{expected.label}"
|
"less than or equal to #{expected.label}"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Checks whether the matcher is satisifed with the expression given to it.
|
||||||
|
private def match?(actual : TestExpression(T)) forall T
|
||||||
|
actual.value <= expected.value
|
||||||
|
end
|
||||||
|
|
||||||
# Message displayed when the matcher isn't satisifed.
|
# Message displayed when the matcher isn't satisifed.
|
||||||
#
|
#
|
||||||
# This is only called when `#match?` returns false.
|
# This is only called when `#match?` returns false.
|
||||||
|
|
|
@ -4,11 +4,6 @@ module Spectator::Matchers
|
||||||
# Matcher that tests whether one value is less than another.
|
# Matcher that tests whether one value is less than another.
|
||||||
# The values are compared with the < operator.
|
# The values are compared with the < operator.
|
||||||
struct LessThanMatcher(ExpectedType) < ValueMatcher(ExpectedType)
|
struct LessThanMatcher(ExpectedType) < ValueMatcher(ExpectedType)
|
||||||
# Checks whether the matcher is satisifed with the expression given to it.
|
|
||||||
private def match?(actual : TestExpression(T)) forall T
|
|
||||||
actual.value < expected.value
|
|
||||||
end
|
|
||||||
|
|
||||||
# Short text about the matcher's purpose.
|
# Short text about the matcher's purpose.
|
||||||
# This explains what condition satisfies the matcher.
|
# This explains what condition satisfies the matcher.
|
||||||
# The description is used when the one-liner syntax is used.
|
# The description is used when the one-liner syntax is used.
|
||||||
|
@ -16,6 +11,11 @@ module Spectator::Matchers
|
||||||
"less than #{expected.label}"
|
"less than #{expected.label}"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Checks whether the matcher is satisifed with the expression given to it.
|
||||||
|
private def match?(actual : TestExpression(T)) forall T
|
||||||
|
actual.value < expected.value
|
||||||
|
end
|
||||||
|
|
||||||
# Message displayed when the matcher isn't satisifed.
|
# Message displayed when the matcher isn't satisifed.
|
||||||
#
|
#
|
||||||
# This is only called when `#match?` returns false.
|
# This is only called when `#match?` returns false.
|
||||||
|
|
|
@ -4,11 +4,6 @@ module Spectator::Matchers
|
||||||
# Common matcher that tests whether a value is nil.
|
# Common matcher that tests whether a value is nil.
|
||||||
# The `Object#nil?` method is used for this.
|
# The `Object#nil?` method is used for this.
|
||||||
struct NilMatcher < StandardMatcher
|
struct NilMatcher < StandardMatcher
|
||||||
# Checks whether the matcher is satisifed with the expression given to it.
|
|
||||||
private def match?(actual : TestExpression(T)) forall T
|
|
||||||
actual.value.nil?
|
|
||||||
end
|
|
||||||
|
|
||||||
# Short text about the matcher's purpose.
|
# Short text about the matcher's purpose.
|
||||||
# This explains what condition satisfies the matcher.
|
# This explains what condition satisfies the matcher.
|
||||||
# The description is used when the one-liner syntax is used.
|
# The description is used when the one-liner syntax is used.
|
||||||
|
@ -16,6 +11,11 @@ module Spectator::Matchers
|
||||||
"is nil"
|
"is nil"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Checks whether the matcher is satisifed with the expression given to it.
|
||||||
|
private def match?(actual : TestExpression(T)) forall T
|
||||||
|
actual.value.nil?
|
||||||
|
end
|
||||||
|
|
||||||
# Message displayed when the matcher isn't satisifed.
|
# Message displayed when the matcher isn't satisifed.
|
||||||
#
|
#
|
||||||
# This is only called when `#match?` returns false.
|
# This is only called when `#match?` returns false.
|
||||||
|
|
|
@ -74,17 +74,6 @@ module Spectator::Matchers
|
||||||
{% end %}
|
{% end %}
|
||||||
end
|
end
|
||||||
|
|
||||||
# Produces the tuple for the failed match data from a snapshot of the predicate methods.
|
|
||||||
private def values(snapshot)
|
|
||||||
{% begin %}
|
|
||||||
{
|
|
||||||
{% for attribute in ExpectedType.keys %}
|
|
||||||
{{attribute}}: snapshot[{{attribute.symbolize}}].inspect,
|
|
||||||
{% end %}
|
|
||||||
}
|
|
||||||
{% end %}
|
|
||||||
end
|
|
||||||
|
|
||||||
# Checks if all predicate methods from the snapshot of them are satisified.
|
# Checks if all predicate methods from the snapshot of them are satisified.
|
||||||
private def match?(snapshot)
|
private def match?(snapshot)
|
||||||
# Test each predicate and immediately return false if one is false.
|
# Test each predicate and immediately return false if one is false.
|
||||||
|
@ -95,5 +84,16 @@ module Spectator::Matchers
|
||||||
# All checks passed if this point is reached.
|
# All checks passed if this point is reached.
|
||||||
true
|
true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Produces the tuple for the failed match data from a snapshot of the predicate methods.
|
||||||
|
private def values(snapshot)
|
||||||
|
{% begin %}
|
||||||
|
{
|
||||||
|
{% for attribute in ExpectedType.keys %}
|
||||||
|
{{attribute}}: snapshot[{{attribute.symbolize}}].inspect,
|
||||||
|
{% end %}
|
||||||
|
}
|
||||||
|
{% end %}
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -4,11 +4,6 @@ module Spectator::Matchers
|
||||||
# Matcher that tests whether a value is in a given range.
|
# Matcher that tests whether a value is in a given range.
|
||||||
# The `Range#includes?` method is used for this check.
|
# The `Range#includes?` method is used for this check.
|
||||||
struct RangeMatcher(ExpectedType) < ValueMatcher(ExpectedType)
|
struct RangeMatcher(ExpectedType) < ValueMatcher(ExpectedType)
|
||||||
# Checks whether the matcher is satisifed with the expression given to it.
|
|
||||||
private def match?(actual : TestExpression(T)) forall T
|
|
||||||
expected.value.includes?(actual.value)
|
|
||||||
end
|
|
||||||
|
|
||||||
# Short text about the matcher's purpose.
|
# Short text about the matcher's purpose.
|
||||||
# This explains what condition satisfies the matcher.
|
# This explains what condition satisfies the matcher.
|
||||||
# The description is used when the one-liner syntax is used.
|
# The description is used when the one-liner syntax is used.
|
||||||
|
@ -16,6 +11,25 @@ module Spectator::Matchers
|
||||||
"is in #{expected.label}"
|
"is in #{expected.label}"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Returns a new matcher, with the same bounds, but uses an inclusive range.
|
||||||
|
def inclusive
|
||||||
|
new_range = Range.new(range.begin, range.end, exclusive: false)
|
||||||
|
expected = TestValue.new(new_range, label)
|
||||||
|
RangeMatcher.new(expected)
|
||||||
|
end
|
||||||
|
|
||||||
|
# Returns a new matcher, with the same bounds, but uses an exclusive range.
|
||||||
|
def exclusive
|
||||||
|
new_range = Range.new(range.begin, range.end, exclusive: true)
|
||||||
|
expected = TestValue.new(new_range, label)
|
||||||
|
RangeMatcher.new(expected)
|
||||||
|
end
|
||||||
|
|
||||||
|
# Checks whether the matcher is satisifed with the expression given to it.
|
||||||
|
private def match?(actual : TestExpression(T)) forall T
|
||||||
|
expected.value.includes?(actual.value)
|
||||||
|
end
|
||||||
|
|
||||||
# Message displayed when the matcher isn't satisifed.
|
# Message displayed when the matcher isn't satisifed.
|
||||||
#
|
#
|
||||||
# This is only called when `#match?` returns false.
|
# This is only called when `#match?` returns false.
|
||||||
|
@ -57,20 +71,6 @@ module Spectator::Matchers
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
# Returns a new matcher, with the same bounds, but uses an inclusive range.
|
|
||||||
def inclusive
|
|
||||||
new_range = Range.new(range.begin, range.end, exclusive: false)
|
|
||||||
expected = TestValue.new(new_range, label)
|
|
||||||
RangeMatcher.new(expected)
|
|
||||||
end
|
|
||||||
|
|
||||||
# Returns a new matcher, with the same bounds, but uses an exclusive range.
|
|
||||||
def exclusive
|
|
||||||
new_range = Range.new(range.begin, range.end, exclusive: true)
|
|
||||||
expected = TestValue.new(new_range, label)
|
|
||||||
RangeMatcher.new(expected)
|
|
||||||
end
|
|
||||||
|
|
||||||
# Gets the expected range.
|
# Gets the expected range.
|
||||||
private def range
|
private def range
|
||||||
expected.value
|
expected.value
|
||||||
|
|
|
@ -4,11 +4,6 @@ module Spectator::Matchers
|
||||||
# Matcher that tests whether two references are the same.
|
# Matcher that tests whether two references are the same.
|
||||||
# The values are compared with the `Reference#same?` method.
|
# The values are compared with the `Reference#same?` method.
|
||||||
struct ReferenceMatcher(ExpectedType) < ValueMatcher(ExpectedType)
|
struct ReferenceMatcher(ExpectedType) < ValueMatcher(ExpectedType)
|
||||||
# Checks whether the matcher is satisifed with the expression given to it.
|
|
||||||
private def match?(actual : TestExpression(T)) forall T
|
|
||||||
expected.value.same?(actual.value)
|
|
||||||
end
|
|
||||||
|
|
||||||
# Short text about the matcher's purpose.
|
# Short text about the matcher's purpose.
|
||||||
# This explains what condition satisfies the matcher.
|
# This explains what condition satisfies the matcher.
|
||||||
# The description is used when the one-liner syntax is used.
|
# The description is used when the one-liner syntax is used.
|
||||||
|
@ -16,6 +11,11 @@ module Spectator::Matchers
|
||||||
"is #{expected.label}"
|
"is #{expected.label}"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Checks whether the matcher is satisifed with the expression given to it.
|
||||||
|
private def match?(actual : TestExpression(T)) forall T
|
||||||
|
expected.value.same?(actual.value)
|
||||||
|
end
|
||||||
|
|
||||||
# Message displayed when the matcher isn't satisifed.
|
# Message displayed when the matcher isn't satisifed.
|
||||||
#
|
#
|
||||||
# This is only called when `#match?` returns false.
|
# This is only called when `#match?` returns false.
|
||||||
|
|
|
@ -13,12 +13,6 @@ module Spectator::Matchers
|
||||||
"responds to #{label}"
|
"responds to #{label}"
|
||||||
end
|
end
|
||||||
|
|
||||||
# Generated, user-friendly, string for the expected value.
|
|
||||||
private def label
|
|
||||||
# Prefix every method name with # and join them with commas.
|
|
||||||
{{ExpectedType.keys.map { |e| "##{e}".id }.splat.stringify}}
|
|
||||||
end
|
|
||||||
|
|
||||||
# Actually performs the test against the expression.
|
# Actually performs the test against the expression.
|
||||||
def match(actual : TestExpression(T)) : MatchData forall T
|
def match(actual : TestExpression(T)) : MatchData forall T
|
||||||
snapshot = snapshot_values(actual.value)
|
snapshot = snapshot_values(actual.value)
|
||||||
|
@ -52,6 +46,13 @@ module Spectator::Matchers
|
||||||
{% end %}
|
{% end %}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Checks if all results from the snapshot are satisified.
|
||||||
|
private def match?(snapshot)
|
||||||
|
# The snapshot did the hard work.
|
||||||
|
# Here just check if all values are true.
|
||||||
|
snapshot.values.all?
|
||||||
|
end
|
||||||
|
|
||||||
# Produces the tuple for the failed match data from a snapshot of the results.
|
# Produces the tuple for the failed match data from a snapshot of the results.
|
||||||
private def values(snapshot)
|
private def values(snapshot)
|
||||||
{% begin %}
|
{% begin %}
|
||||||
|
@ -63,11 +64,10 @@ module Spectator::Matchers
|
||||||
{% end %}
|
{% end %}
|
||||||
end
|
end
|
||||||
|
|
||||||
# Checks if all results from the snapshot are satisified.
|
# Generated, user-friendly, string for the expected value.
|
||||||
private def match?(snapshot)
|
private def label
|
||||||
# The snapshot did the hard work.
|
# Prefix every method name with # and join them with commas.
|
||||||
# Here just check if all values are true.
|
{{ExpectedType.keys.map { |e| "##{e}".id }.splat.stringify}}
|
||||||
snapshot.values.all?
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -4,11 +4,6 @@ module Spectator::Matchers
|
||||||
# Matcher that tests whether a set has a specified number of elements.
|
# Matcher that tests whether a set has a specified number of elements.
|
||||||
# The set's `#size` method is used for this check.
|
# The set's `#size` method is used for this check.
|
||||||
struct SizeMatcher(ExpectedType) < ValueMatcher(ExpectedType)
|
struct SizeMatcher(ExpectedType) < ValueMatcher(ExpectedType)
|
||||||
# Checks whether the matcher is satisifed with the expression given to it.
|
|
||||||
private def match?(actual : TestExpression(T)) forall T
|
|
||||||
expected.value == actual.value.size
|
|
||||||
end
|
|
||||||
|
|
||||||
# Short text about the matcher's purpose.
|
# Short text about the matcher's purpose.
|
||||||
# This explains what condition satisfies the matcher.
|
# This explains what condition satisfies the matcher.
|
||||||
# The description is used when the one-liner syntax is used.
|
# The description is used when the one-liner syntax is used.
|
||||||
|
@ -16,6 +11,11 @@ module Spectator::Matchers
|
||||||
"has size #{expected.label}"
|
"has size #{expected.label}"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Checks whether the matcher is satisifed with the expression given to it.
|
||||||
|
private def match?(actual : TestExpression(T)) forall T
|
||||||
|
expected.value == actual.value.size
|
||||||
|
end
|
||||||
|
|
||||||
# Message displayed when the matcher isn't satisifed.
|
# Message displayed when the matcher isn't satisifed.
|
||||||
#
|
#
|
||||||
# This is only called when `#match?` returns false.
|
# This is only called when `#match?` returns false.
|
||||||
|
|
|
@ -4,11 +4,6 @@ module Spectator::Matchers
|
||||||
# Matcher that tests whether a set has the same number of elements as another set.
|
# Matcher that tests whether a set has the same number of elements as another set.
|
||||||
# The set's `#size` method is used for this check.
|
# The set's `#size` method is used for this check.
|
||||||
struct SizeOfMatcher(ExpectedType) < ValueMatcher(ExpectedType)
|
struct SizeOfMatcher(ExpectedType) < ValueMatcher(ExpectedType)
|
||||||
# Checks whether the matcher is satisifed with the expression given to it.
|
|
||||||
private def match?(actual : TestExpression(T)) forall T
|
|
||||||
expected.value.size == actual.value.size
|
|
||||||
end
|
|
||||||
|
|
||||||
# Short text about the matcher's purpose.
|
# Short text about the matcher's purpose.
|
||||||
# This explains what condition satisfies the matcher.
|
# This explains what condition satisfies the matcher.
|
||||||
# The description is used when the one-liner syntax is used.
|
# The description is used when the one-liner syntax is used.
|
||||||
|
@ -16,6 +11,11 @@ module Spectator::Matchers
|
||||||
"is the same size as #{expected.label}"
|
"is the same size as #{expected.label}"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Checks whether the matcher is satisifed with the expression given to it.
|
||||||
|
private def match?(actual : TestExpression(T)) forall T
|
||||||
|
expected.value.size == actual.value.size
|
||||||
|
end
|
||||||
|
|
||||||
# Message displayed when the matcher isn't satisifed.
|
# Message displayed when the matcher isn't satisifed.
|
||||||
#
|
#
|
||||||
# This is only called when `#match?` returns false.
|
# This is only called when `#match?` returns false.
|
||||||
|
|
|
@ -17,6 +17,35 @@ module Spectator::Matchers
|
||||||
# then the `#values` and `#negated_values` methods can be overriden.
|
# then the `#values` and `#negated_values` methods can be overriden.
|
||||||
# Finally, define a `#description` message that can be used for the one-liner "it" syntax.
|
# Finally, define a `#description` message that can be used for the one-liner "it" syntax.
|
||||||
abstract struct StandardMatcher < Matcher
|
abstract struct StandardMatcher < Matcher
|
||||||
|
# Actually performs the test against the expression (value or block).
|
||||||
|
#
|
||||||
|
# This method calls the abstract `#match?` method.
|
||||||
|
# If it returns true, then a `SuccessfulMatchData` instance is returned.
|
||||||
|
# Otherwise, a `FailedMatchData` instance is returned.
|
||||||
|
# Additionally, `#failure_message` and `#values` are called for a failed match.
|
||||||
|
def match(actual : TestExpression(T)) : MatchData forall T
|
||||||
|
if match?(actual)
|
||||||
|
SuccessfulMatchData.new
|
||||||
|
else
|
||||||
|
FailedMatchData.new(failure_message(actual), **values(actual))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# Performs the test against the expression (value or block), but inverted.
|
||||||
|
# A successful match with `#match` should normally fail for this method, and vice-versa.
|
||||||
|
#
|
||||||
|
# This method calls the abstract `#does_not_match?` method.
|
||||||
|
# If it returns true, then a `SuccessfulMatchData` instance is returned.
|
||||||
|
# Otherwise, a `FailedMatchData` instance is returned.
|
||||||
|
# Additionally, `#failure_message_when_negated` and `#negated_values` are called for a failed match.
|
||||||
|
def negated_match(actual : TestExpression(T)) : MatchData forall T
|
||||||
|
if does_not_match?(actual)
|
||||||
|
SuccessfulMatchData.new
|
||||||
|
else
|
||||||
|
FailedMatchData.new(failure_message_when_negated(actual), **negated_values(actual))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
# Message displayed when the matcher isn't satisifed.
|
# Message displayed when the matcher isn't satisifed.
|
||||||
#
|
#
|
||||||
# This is only called when `#match?` returns false.
|
# This is only called when `#match?` returns false.
|
||||||
|
@ -96,34 +125,5 @@ module Spectator::Matchers
|
||||||
private def negated_values(actual : TestExpression(T)) forall T
|
private def negated_values(actual : TestExpression(T)) forall T
|
||||||
values(actual)
|
values(actual)
|
||||||
end
|
end
|
||||||
|
|
||||||
# Actually performs the test against the expression (value or block).
|
|
||||||
#
|
|
||||||
# This method calls the abstract `#match?` method.
|
|
||||||
# If it returns true, then a `SuccessfulMatchData` instance is returned.
|
|
||||||
# Otherwise, a `FailedMatchData` instance is returned.
|
|
||||||
# Additionally, `#failure_message` and `#values` are called for a failed match.
|
|
||||||
def match(actual : TestExpression(T)) : MatchData forall T
|
|
||||||
if match?(actual)
|
|
||||||
SuccessfulMatchData.new
|
|
||||||
else
|
|
||||||
FailedMatchData.new(failure_message(actual), **values(actual))
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# Performs the test against the expression (value or block), but inverted.
|
|
||||||
# A successful match with `#match` should normally fail for this method, and vice-versa.
|
|
||||||
#
|
|
||||||
# This method calls the abstract `#does_not_match?` method.
|
|
||||||
# If it returns true, then a `SuccessfulMatchData` instance is returned.
|
|
||||||
# Otherwise, a `FailedMatchData` instance is returned.
|
|
||||||
# Additionally, `#failure_message_when_negated` and `#negated_values` are called for a failed match.
|
|
||||||
def negated_match(actual : TestExpression(T)) : MatchData forall T
|
|
||||||
if does_not_match?(actual)
|
|
||||||
SuccessfulMatchData.new
|
|
||||||
else
|
|
||||||
FailedMatchData.new(failure_message_when_negated(actual), **negated_values(actual))
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
|
# Checks whether the last element of the value is the expected value.
|
||||||
# Checks whether the last element of the value is the expected value.
|
|
||||||
# This method expects that the actual value is a set (enumerable).require "./value_matcher"
|
# This method expects that the actual value is a set (enumerable).require "./value_matcher"
|
||||||
|
|
||||||
module Spectator::Matchers
|
module Spectator::Matchers
|
||||||
|
@ -30,6 +29,16 @@ module Spectator::Matchers
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Performs the test against the expression, but inverted.
|
||||||
|
# A successful match with `#match` should normally fail for this method, and vice-versa.
|
||||||
|
def negated_match(actual : TestExpression(T)) : MatchData forall T
|
||||||
|
if (value = actual.value).responds_to?(:starts_with?)
|
||||||
|
negated_match_starts_with(value, actual.label)
|
||||||
|
else
|
||||||
|
negated_match_first(value, actual.label)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
# Checks whether the actual value starts with the expected value.
|
# Checks whether the actual value starts with the expected value.
|
||||||
# This method expects (and uses) the `#starts_with?` method on the value.
|
# This method expects (and uses) the `#starts_with?` method on the value.
|
||||||
private def match_starts_with(actual_value, actual_label)
|
private def match_starts_with(actual_value, actual_label)
|
||||||
|
@ -60,16 +69,6 @@ module Spectator::Matchers
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# Performs the test against the expression, but inverted.
|
|
||||||
# A successful match with `#match` should normally fail for this method, and vice-versa.
|
|
||||||
def negated_match(actual : TestExpression(T)) : MatchData forall T
|
|
||||||
if (value = actual.value).responds_to?(:starts_with?)
|
|
||||||
negated_match_starts_with(value, actual.label)
|
|
||||||
else
|
|
||||||
negated_match_first(value, actual.label)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# Checks whether the actual value does not start with the expected value.
|
# Checks whether the actual value does not start with the expected value.
|
||||||
# This method expects (and uses) the `#starts_with?` method on the value.
|
# This method expects (and uses) the `#starts_with?` method on the value.
|
||||||
private def negated_match_starts_with(actual_value, actual_label)
|
private def negated_match_starts_with(actual_value, actual_label)
|
||||||
|
|
|
@ -15,21 +15,6 @@ module Spectator::Matchers
|
||||||
def initialize(@truthy : Bool = true)
|
def initialize(@truthy : Bool = true)
|
||||||
end
|
end
|
||||||
|
|
||||||
# Generated, user-friendly, string for the expected value.
|
|
||||||
private def label
|
|
||||||
@truthy ? "truthy" : "falsey"
|
|
||||||
end
|
|
||||||
|
|
||||||
# Generated, user-friendly, string for the unexpected value.
|
|
||||||
private def negated_label
|
|
||||||
@truthy ? "falsey" : "truthy"
|
|
||||||
end
|
|
||||||
|
|
||||||
# Checks whether the matcher is satisifed with the expression given to it.
|
|
||||||
private def match?(actual : TestExpression(T)) forall T
|
|
||||||
@truthy == !!actual.value
|
|
||||||
end
|
|
||||||
|
|
||||||
# Short text about the matcher's purpose.
|
# Short text about the matcher's purpose.
|
||||||
# This explains what condition satisfies the matcher.
|
# This explains what condition satisfies the matcher.
|
||||||
# The description is used when the one-liner syntax is used.
|
# The description is used when the one-liner syntax is used.
|
||||||
|
@ -37,47 +22,6 @@ module Spectator::Matchers
|
||||||
"is #{label}"
|
"is #{label}"
|
||||||
end
|
end
|
||||||
|
|
||||||
# Message displayed when the matcher isn't satisifed.
|
|
||||||
#
|
|
||||||
# This is only called when `#match?` returns false.
|
|
||||||
#
|
|
||||||
# The message should typically only contain the test expression labels.
|
|
||||||
# Actual values should be returned by `#values`.
|
|
||||||
private def failure_message(actual)
|
|
||||||
"#{actual.label} is #{negated_label}"
|
|
||||||
end
|
|
||||||
|
|
||||||
# Message displayed when the matcher isn't satisifed and is negated.
|
|
||||||
# This is essentially what would satisfy the matcher if it wasn't negated.
|
|
||||||
#
|
|
||||||
# This is only called when `#does_not_match?` returns false.
|
|
||||||
#
|
|
||||||
# The message should typically only contain the test expression labels.
|
|
||||||
# Actual values should be returned by `#values`.
|
|
||||||
private def failure_message_when_negated(actual)
|
|
||||||
"#{actual.label} is #{label}"
|
|
||||||
end
|
|
||||||
|
|
||||||
# Additional information about the match failure.
|
|
||||||
# The return value is a NamedTuple with Strings for each value.
|
|
||||||
private def values(actual)
|
|
||||||
{
|
|
||||||
expected: @truthy ? "Not false or nil" : "false or nil",
|
|
||||||
actual: actual.value.inspect,
|
|
||||||
truthy: !!actual.value.inspect,
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
# Additional information about the match failure when negated.
|
|
||||||
# The return value is a NamedTuple with Strings for each value.
|
|
||||||
private def negated_values(actual)
|
|
||||||
{
|
|
||||||
expected: @truthy ? "false or nil" : "Not false or nil",
|
|
||||||
actual: actual.value.inspect,
|
|
||||||
truthy: !!actual.value.inspect,
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
# Creates a matcher that checks if a value is less than an expected value.
|
# Creates a matcher that checks if a value is less than an expected value.
|
||||||
# The spec would look like:
|
# The spec would look like:
|
||||||
# ```
|
# ```
|
||||||
|
@ -137,5 +81,61 @@ module Spectator::Matchers
|
||||||
expected = TestValue.new(value)
|
expected = TestValue.new(value)
|
||||||
InequalityMatcher.new(expected)
|
InequalityMatcher.new(expected)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Checks whether the matcher is satisifed with the expression given to it.
|
||||||
|
private def match?(actual : TestExpression(T)) forall T
|
||||||
|
@truthy == !!actual.value
|
||||||
|
end
|
||||||
|
|
||||||
|
# Message displayed when the matcher isn't satisifed.
|
||||||
|
#
|
||||||
|
# This is only called when `#match?` returns false.
|
||||||
|
#
|
||||||
|
# The message should typically only contain the test expression labels.
|
||||||
|
# Actual values should be returned by `#values`.
|
||||||
|
private def failure_message(actual)
|
||||||
|
"#{actual.label} is #{negated_label}"
|
||||||
|
end
|
||||||
|
|
||||||
|
# Message displayed when the matcher isn't satisifed and is negated.
|
||||||
|
# This is essentially what would satisfy the matcher if it wasn't negated.
|
||||||
|
#
|
||||||
|
# This is only called when `#does_not_match?` returns false.
|
||||||
|
#
|
||||||
|
# The message should typically only contain the test expression labels.
|
||||||
|
# Actual values should be returned by `#values`.
|
||||||
|
private def failure_message_when_negated(actual)
|
||||||
|
"#{actual.label} is #{label}"
|
||||||
|
end
|
||||||
|
|
||||||
|
# Additional information about the match failure.
|
||||||
|
# The return value is a NamedTuple with Strings for each value.
|
||||||
|
private def values(actual)
|
||||||
|
{
|
||||||
|
expected: @truthy ? "Not false or nil" : "false or nil",
|
||||||
|
actual: actual.value.inspect,
|
||||||
|
truthy: !!actual.value.inspect,
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
# Additional information about the match failure when negated.
|
||||||
|
# The return value is a NamedTuple with Strings for each value.
|
||||||
|
private def negated_values(actual)
|
||||||
|
{
|
||||||
|
expected: @truthy ? "false or nil" : "Not false or nil",
|
||||||
|
actual: actual.value.inspect,
|
||||||
|
truthy: !!actual.value.inspect,
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
# Generated, user-friendly, string for the expected value.
|
||||||
|
private def label
|
||||||
|
@truthy ? "truthy" : "falsey"
|
||||||
|
end
|
||||||
|
|
||||||
|
# Generated, user-friendly, string for the unexpected value.
|
||||||
|
private def negated_label
|
||||||
|
@truthy ? "falsey" : "truthy"
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -4,11 +4,6 @@ module Spectator::Matchers
|
||||||
# Matcher that tests a value is of a specified type.
|
# Matcher that tests a value is of a specified type.
|
||||||
# The values are compared with the `Object#is_a?` method.
|
# The values are compared with the `Object#is_a?` method.
|
||||||
struct TypeMatcher(Expected) < StandardMatcher
|
struct TypeMatcher(Expected) < StandardMatcher
|
||||||
# Checks whether the matcher is satisifed with the expression given to it.
|
|
||||||
private def match?(actual : TestExpression(T)) forall T
|
|
||||||
actual.value.is_a?(Expected)
|
|
||||||
end
|
|
||||||
|
|
||||||
# Short text about the matcher's purpose.
|
# Short text about the matcher's purpose.
|
||||||
# This explains what condition satisfies the matcher.
|
# This explains what condition satisfies the matcher.
|
||||||
# The description is used when the one-liner syntax is used.
|
# The description is used when the one-liner syntax is used.
|
||||||
|
@ -16,6 +11,11 @@ module Spectator::Matchers
|
||||||
"is as #{Expected}"
|
"is as #{Expected}"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Checks whether the matcher is satisifed with the expression given to it.
|
||||||
|
private def match?(actual : TestExpression(T)) forall T
|
||||||
|
actual.value.is_a?(Expected)
|
||||||
|
end
|
||||||
|
|
||||||
# Message displayed when the matcher isn't satisifed.
|
# Message displayed when the matcher isn't satisifed.
|
||||||
#
|
#
|
||||||
# This is only called when `#match?` returns false.
|
# This is only called when `#match?` returns false.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue