The result of a match operation, such as one performed by a Matcher
or
BeMatcher
, which
contains one field that indicates whether the match succeeded and four fields that provide
failure messages to report under different circumstances.
A MatchResult
's matches
field indicates whether a match succeeded. If it succeeded,
matches
will be true
.
The other four fields contain failure message strings, one of which will be presented to the user in case of a match failure. If a match succeeds,
none of these strings will be used, because no failure message will be reported (i.e., because there was no failure
to report). If a match fails (matches
is false
), the failureMessage
(or
midSentenceFailure
—more on that below) will be reported to help the user understand what went wrong.
negatedFailureMessage
The negatedFailureMessage
exists so that it can become the failureMessage
if the matcher is inverted,
which happens, for instance, if it is passed to not
. Here's an example:
val equalSeven = equal (7) val notEqualSeven = not (equalSeven)
The Matcher[Int]
that results from passing 7 to equal
, which is assigned to the equalSeven
variable, will compare Int
s passed to its
apply
method with 7. If 7 is passed, the equalSeven
match will succeed. If anything other than 7 is passed, it
will fail. By contrast, the notEqualSeven
matcher, which results from passing equalSeven
to not
, does
just the opposite. If 7 is passed, the notEqualSeven
match will fail. If anything other than 7 is passed, it will succeed.
For example, if 8 is passed, equalSeven
's MatchResult
will contain:
expression: equalSeven(8) matches: false failureMessage: 8 did not equal 7 negatedFailureMessage: 8 equaled 7
Although the negatedFailureMessage
is nonsensical, it will not be reported to the user. Only the failureMessage
,
which does actually explain what caused the failure, will be reported by the user. If you pass 8 to notEqualSeven
's apply
method, by contrast, the failureMessage
and negatedFailureMessage
will be:
expression: notEqualSeven(8) matches: true failureMessage: 8 equaled 7 negatedFailureMessage: 8 did not equal 7
Note that the messages are swapped from the equalSeven
messages. This swapping was effectively performed by the not
matcher,
which in addition to swapping the failureMessage
and negatedFailureMessage
, also inverted the
matches
value. Thus when you pass the same value to both equalSeven
and notEqualSeven
the matches
field of one MatchResult
will be true
and the other false
. Because the
matches
field of the MatchResult
returned by notEqualSeven(8)
is true
,
the nonsensical failureMessage
, "8 equaled 7
", will not be reported to the user.
If 7 is passed, by contrast, the failureMessage
and negatedFailureMessage
of equalSeven
will be:
expression: equalSeven(7) matches: true failureMessage: 7 did not equal 7 negatedFailureMessage: 7 equaled 7
In this case equalSeven
's failureMessage
is nonsensical, but because the match succeeded, the nonsensical message will
not be reported to the user.
If you pass 7 to notEqualSeven
's apply
method, you'll get:
expression: notEqualSeven(7) matches: false failureMessage: 7 equaled 7 negatedFailureMessage: 7 did not equal 7
Again the messages are swapped from the equalSeven
messages, but this time, the failureMessage
makes sense
and explains what went wrong: the notEqualSeven
match failed because the number passed did in fact equal 7. Since
the match failed, this failure message, "7 equaled 7
", will be reported to the user.
midSentence
" messages When a ScalaTest matcher expression that involves and
or or
fails, the failure message that
results is composed from the failure messages of the left and right matcher operatnds to and
or or.
For example:
8 should (equal (7) or equal (9))
This above expression would fail with the following failure message reported to the user:
8 did not equal 7, and 8 did not equal 9
This works fine, but what if the failure messages being combined begin with a capital letter, such as:
The name property did not equal "Ricky"
A combination of two such failure messages might result in an abomination of English punctuation, such as:
The name property did not equal "Ricky", and The name property did not equal "Bobby"
Because ScalaTest is an internationalized application, taking all of its strings from a property file
enabling it to be localized, it isn't a good idea to force the first character to lower case. Besides,
it might actually represent a String value which should stay upper case. The midSentenceFailureMessage
exists for this situation. If the failure message is used at the beginning of the sentence, failureMessage
will be used. But if it appears mid-sentence, or at the end of the sentence, midSentenceFailureMessage
will be used. Given these failure message strings:
failureMessage: The name property did not equal "Bobby" midSentenceFailureMessage: the name property did not equal "Bobby"
The resulting failure of the or
expression involving to matchers would make any English teacher proud:
The name property did not equal "Ricky", and the name property did not equal "Bobby"
indicates whether or not the matcher matched
a failure message to report if a match fails
a message with a meaning opposite to that of the failure message
a failure message suitable for appearing mid-sentence
a negated failure message suitable for appearing mid-sentence
Constructs a new MatchResult
with passed matches
, failureMessage
, and
negativeFailureMessage
fields. The midSentenceFailureMessage
will return the same
string as failureMessage
, and the midSentenceNegatedFailureMessage
will return the
same string as negatedFailureMessage
.
Constructs a new MatchResult
with passed matches
, failureMessage
, and
negativeFailureMessage
fields. The midSentenceFailureMessage
will return the same
string as failureMessage
, and the midSentenceNegatedFailureMessage
will return the
same string as negatedFailureMessage
.
indicates whether or not the matcher matched
a failure message to report if a match fails
a message with a meaning opposite to that of the failure message
indicates whether or not the matcher matched
a failure message to report if a match fails
a message with a meaning opposite to that of the failure message
a failure message suitable for appearing mid-sentence
a negated failure message suitable for appearing mid-sentence
This method is used to compare the receiver object (this
) with the argument object (arg0
) for equivalence.
This method is used to compare the receiver object (this
) with the argument object (arg0
) for equivalence.
The default implementations of this method is an [http://en.wikipedia.org/wiki/Equivalence_relation equivalence
relation]:
* It is reflexive: for any instance x
of type Any
, x.equals(x)
should return true
.
* It is symmetric: for any instances x
and y
of type Any
, x.equals(y)
should return true
if and
only if y.equals(x)
returns true
.
* It is transitive: for any instances x
, y
, and z
of type AnyRef
if x.equals(y)
returns true
and
y.equals(z)
returns true
, then x.equals(z)
should return true
.
If you override this method, you should verify that your implementation remains an equivalence relation.
Additionally, when overriding this method it is often necessary to override hashCode
to ensure that objects
that are "equal" (o1.equals(o2)
returns true
) hash to the same scala.Int
(o1.hashCode.equals(o2.hashCode)
).
the object to compare against this object for equality.
true
if the receiver object is equivalent to the argument; false
otherwise.
a failure message to report if a match fails
a failure message to report if a match fails
Returns a hash code value for the object.
Returns a hash code value for the object.
The default hashing algorithm is platform dependent.
Note that it is allowed for two objects to have identical hash codes (o1.hashCode.equals(o2.hashCode)
) yet
not be equal (o1.equals(o2)
returns false
). A degenerate implementation could always return 0
.
However, it is required that if two objects are equal (o1.equals(o2)
returns true
) that they have
identical hash codes (o1.hashCode.equals(o2.hashCode)
). Therefore, when overriding this method, be sure
to verify that the behavior is consistent with the equals
method.
the hash code value for the object.
indicates whether or not the matcher matched
indicates whether or not the matcher matched
a failure message suitable for appearing mid-sentence
a failure message suitable for appearing mid-sentence
a negated failure message suitable for appearing mid-sentence
a negated failure message suitable for appearing mid-sentence
a message with a meaning opposite to that of the failure message
a message with a meaning opposite to that of the failure message
use productIterator instead
Returns a string representation of the object.
Returns a string representation of the object.
The default representation is platform dependent.
a string representation of the object.
The result of a match operation, such as one performed by a
Matcher
orBeMatcher
, which contains one field that indicates whether the match succeeded and four fields that provide failure messages to report under different circumstances.A
MatchResult
'smatches
field indicates whether a match succeeded. If it succeeded,matches
will betrue
. The other four fields contain failure message strings, one of which will be presented to the user in case of a match failure. If a match succeeds, none of these strings will be used, because no failure message will be reported (i.e., because there was no failure to report). If a match fails (matches
isfalse
), thefailureMessage
(ormidSentenceFailure
—more on that below) will be reported to help the user understand what went wrong.Understanding
negatedFailureMessage
The
negatedFailureMessage
exists so that it can become thefailureMessage
if the matcher is inverted, which happens, for instance, if it is passed tonot
. Here's an example:The
Matcher[Int]
that results from passing 7 toequal
, which is assigned to theequalSeven
variable, will compareInt
s passed to itsapply
method with 7. If 7 is passed, theequalSeven
match will succeed. If anything other than 7 is passed, it will fail. By contrast, thenotEqualSeven
matcher, which results from passingequalSeven
tonot
, does just the opposite. If 7 is passed, thenotEqualSeven
match will fail. If anything other than 7 is passed, it will succeed.For example, if 8 is passed,
equalSeven
'sMatchResult
will contain:Although the
negatedFailureMessage
is nonsensical, it will not be reported to the user. Only thefailureMessage
, which does actually explain what caused the failure, will be reported by the user. If you pass 8 tonotEqualSeven
'sapply
method, by contrast, thefailureMessage
andnegatedFailureMessage
will be:Note that the messages are swapped from the
equalSeven
messages. This swapping was effectively performed by thenot
matcher, which in addition to swapping thefailureMessage
andnegatedFailureMessage
, also inverted thematches
value. Thus when you pass the same value to bothequalSeven
andnotEqualSeven
thematches
field of oneMatchResult
will betrue
and the otherfalse
. Because thematches
field of theMatchResult
returned bynotEqualSeven(8)
istrue
, the nonsensicalfailureMessage
, "8 equaled 7
", will not be reported to the user.If 7 is passed, by contrast, the
failureMessage
andnegatedFailureMessage
ofequalSeven
will be:In this case
equalSeven
'sfailureMessage
is nonsensical, but because the match succeeded, the nonsensical message will not be reported to the user. If you pass 7 tonotEqualSeven
'sapply
method, you'll get:Again the messages are swapped from the
equalSeven
messages, but this time, thefailureMessage
makes sense and explains what went wrong: thenotEqualSeven
match failed because the number passed did in fact equal 7. Since the match failed, this failure message, "7 equaled 7
", will be reported to the user.Understanding the "
midSentence
" messagesWhen a ScalaTest matcher expression that involves
and
oror
fails, the failure message that results is composed from the failure messages of the left and right matcher operatnds toand
or or. For example:This above expression would fail with the following failure message reported to the user:
This works fine, but what if the failure messages being combined begin with a capital letter, such as:
A combination of two such failure messages might result in an abomination of English punctuation, such as:
Because ScalaTest is an internationalized application, taking all of its strings from a property file enabling it to be localized, it isn't a good idea to force the first character to lower case. Besides, it might actually represent a String value which should stay upper case. The
midSentenceFailureMessage
exists for this situation. If the failure message is used at the beginning of the sentence,failureMessage
will be used. But if it appears mid-sentence, or at the end of the sentence,midSentenceFailureMessage
will be used. Given these failure message strings:The resulting failure of the
or
expression involving to matchers would make any English teacher proud: