mirror of
https://gitea.invidious.io/iv-org/shard-spectator.git
synced 2024-08-15 00:53:35 +00:00
Refactor TruthyMatcher
This commit is contained in:
parent
badccad2fa
commit
a3fa522bd4
1 changed files with 48 additions and 55 deletions
|
@ -1,4 +1,4 @@
|
|||
require "./value_matcher"
|
||||
require "./standard_matcher"
|
||||
|
||||
module Spectator::Matchers
|
||||
# Matcher that tests whether a value is truthy or falsey.
|
||||
|
@ -8,28 +8,51 @@ module Spectator::Matchers
|
|||
#
|
||||
# Additionally, different matchers can be created
|
||||
# by using the `#<`, `#<=`, `#>`, `#>=`, `#==`, and `#!=` operators.
|
||||
struct TruthyMatcher < Matcher
|
||||
struct TruthyMatcher < StandardMatcher
|
||||
# Creates the truthy matcher.
|
||||
# The *truthy* argument should be true to match "truthy" values,
|
||||
# and false to match "falsey" values.
|
||||
def initialize(@truthy : Bool)
|
||||
def initialize(@truthy : Bool = true)
|
||||
end
|
||||
|
||||
# Textual representation of what the matcher expects.
|
||||
def label
|
||||
private def label
|
||||
@truthy ? "truthy" : "falsey"
|
||||
end
|
||||
|
||||
# Determines whether the matcher is satisfied with the value given to it.
|
||||
private def match?(actual)
|
||||
# Cast value to truthy value and compare.
|
||||
@truthy == !!actual
|
||||
private def negated_label
|
||||
@truthy ? "falsey" : "truthy"
|
||||
end
|
||||
|
||||
# Determines whether the matcher is satisfied with the partial given to it.
|
||||
def match(partial, negated = false)
|
||||
actual = partial.actual
|
||||
MatchData.new(match?(actual), @truthy, actual, partial.label)
|
||||
private def match?(actual)
|
||||
@truthy == !!actual.value
|
||||
end
|
||||
|
||||
def description
|
||||
"is #{label}"
|
||||
end
|
||||
|
||||
private def failure_message(actual)
|
||||
"#{actual.label} is #{negated_label}"
|
||||
end
|
||||
|
||||
private def failure_message_when_negated(actual)
|
||||
"#{actual.label} is #{label}"
|
||||
end
|
||||
|
||||
private def values(actual)
|
||||
{
|
||||
expected: @truthy ? "Not false or nil" : "false or nil",
|
||||
actual: actual.value.inspect,
|
||||
truthy: !!actual.value.inspect,
|
||||
}
|
||||
end
|
||||
|
||||
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.
|
||||
|
@ -37,7 +60,8 @@ module Spectator::Matchers
|
|||
# ```
|
||||
# expect(0).to be < 1
|
||||
# ```
|
||||
def <(expected : ExpectedType) forall ExpectedType
|
||||
def <(value : ExpectedType) forall ExpectedType
|
||||
expected = TestValue.new(value)
|
||||
LessThanMatcher.new(expected)
|
||||
end
|
||||
|
||||
|
@ -46,7 +70,8 @@ module Spectator::Matchers
|
|||
# ```
|
||||
# expect(0).to be <= 1
|
||||
# ```
|
||||
def <=(expected : ExpectedType) forall ExpectedType
|
||||
def <=(value : ExpectedType) forall ExpectedType
|
||||
expected = TestValue.new(value)
|
||||
LessThanEqualMatcher.new(expected)
|
||||
end
|
||||
|
||||
|
@ -55,7 +80,8 @@ module Spectator::Matchers
|
|||
# ```
|
||||
# expect(2).to be > 1
|
||||
# ```
|
||||
def >(expected : ExpectedType) forall ExpectedType
|
||||
def >(value : ExpectedType) forall ExpectedType
|
||||
expected = TestValue.new(value)
|
||||
GreaterThanMatcher.new(expected)
|
||||
end
|
||||
|
||||
|
@ -64,7 +90,8 @@ module Spectator::Matchers
|
|||
# ```
|
||||
# expect(2).to be >= 1
|
||||
# ```
|
||||
def >=(expected : ExpectedType) forall ExpectedType
|
||||
def >=(value : ExpectedType) forall ExpectedType
|
||||
expected = TestValue.new(value)
|
||||
GreaterThanEqualMatcher.new(expected)
|
||||
end
|
||||
|
||||
|
@ -73,7 +100,8 @@ module Spectator::Matchers
|
|||
# ```
|
||||
# expect(0).to be == 0
|
||||
# ```
|
||||
def ==(expected : ExpectedType) forall ExpectedType
|
||||
def ==(value : ExpectedType) forall ExpectedType
|
||||
expected = TestValue.new(value)
|
||||
EqualityMatcher.new(expected)
|
||||
end
|
||||
|
||||
|
@ -82,44 +110,9 @@ module Spectator::Matchers
|
|||
# ```
|
||||
# expect(0).to be != 1
|
||||
# ```
|
||||
def !=(expected : ExpectedType) forall ExpectedType
|
||||
def !=(value : ExpectedType) forall ExpectedType
|
||||
expected = TestValue.new(value)
|
||||
InequalityMatcher.new(expected)
|
||||
end
|
||||
|
||||
# Match data specific to this matcher.
|
||||
private struct MatchData(ActualType) < MatchData
|
||||
# Creates the match data.
|
||||
def initialize(matched, @truthy : Bool, @actual : ActualType, @actual_label : String)
|
||||
super(matched)
|
||||
end
|
||||
|
||||
# Information about the match.
|
||||
def named_tuple
|
||||
truthy = "Not false or nil"
|
||||
falsey = "false or nil"
|
||||
{
|
||||
expected: AlternativeMatchDataValue.new(@truthy ? truthy : falsey, @truthy ? falsey : truthy),
|
||||
actual: @actual,
|
||||
truthy: !!@actual,
|
||||
}
|
||||
end
|
||||
|
||||
# Describes the condition that satisfies the matcher.
|
||||
# This is informational and displayed to the end-user.
|
||||
def message
|
||||
"#{@actual_label} is #{expected_label}"
|
||||
end
|
||||
|
||||
# Describes the condition that won't satsify the matcher.
|
||||
# This is informational and displayed to the end-user.
|
||||
def negated_message
|
||||
"#{@actual_label} is not #{expected_label}"
|
||||
end
|
||||
|
||||
# Textual representation of what the matcher expects.
|
||||
private def expected_label
|
||||
@truthy ? "truthy" : "falsey"
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue