Constructs a new MatchResult with passed matches, failureMessage, and
negativeFailureMessage fields.
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
a failure message to report if a match fails
indicates whether or not the matcher matched
a 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
The result of a match operation, such as one performed by a
MatcherorBeMatcher, which contains one field that indicates whether the match succeeded and four fields that provide failure messages to report under different circumstances.A
MatchResult'smatchesfield indicates whether a match succeeded. If it succeeded,matcheswill 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 (matchesisfalse), thefailureMessage(ormidSentenceFailure—more on that below) will be reported to help the user understand what went wrong.Understanding
negatedFailureMessageThe
negatedFailureMessageexists so that it can become thefailureMessageif 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 theequalSevenvariable, will compareInts passed to itsapplymethod with 7. If 7 is passed, theequalSevenmatch will succeed. If anything other than 7 is passed, it will fail. By contrast, thenotEqualSevenmatcher, which results from passingequalSeventonot, does just the opposite. If 7 is passed, thenotEqualSevenmatch will fail. If anything other than 7 is passed, it will succeed.For example, if 8 is passed,
equalSeven'sMatchResultwill contain:expression: equalSeven(8) matches: false failureMessage: 8 did not equal 7 negatedFailureMessage: 8 equaled 7Although the
negatedFailureMessageis 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'sapplymethod, by contrast, thefailureMessageandnegatedFailureMessagewill be:expression: notEqualSeven(8) matches: true failureMessage: 8 equaled 7 negatedFailureMessage: 8 did not equal 7Note that the messages are swapped from the
equalSevenmessages. This swapping was effectively performed by thenotmatcher, which in addition to swapping thefailureMessageandnegatedFailureMessage, also inverted thematchesvalue. Thus when you pass the same value to bothequalSevenandnotEqualSeventhematchesfield of oneMatchResultwill betrueand the otherfalse. Because thematchesfield of theMatchResultreturned bynotEqualSeven(8)istrue, the nonsensicalfailureMessage, "8 equaled 7", will not be reported to the user.If 7 is passed, by contrast, the
failureMessageandnegatedFailureMessageofequalSevenwill be:expression: equalSeven(7) matches: true failureMessage: 7 did not equal 7 negatedFailureMessage: 7 equaled 7In this case
equalSeven'sfailureMessageis nonsensical, but because the match succeeded, the nonsensical message will not be reported to the user. If you pass 7 tonotEqualSeven'sapplymethod, you'll get:expression: notEqualSeven(7) matches: false failureMessage: 7 equaled 7 negatedFailureMessage: 7 did not equal 7Again the messages are swapped from the
equalSevenmessages, but this time, thefailureMessagemakes sense and explains what went wrong: thenotEqualSevenmatch 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
andororfails, the failure message that results is composed from the failure messages of the left and right matcher operatnds toandor 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
midSentenceFailureMessageexists for this situation. If the failure message is used at the beginning of the sentence,failureMessagewill be used. But if it appears mid-sentence, or at the end of the sentence,midSentenceFailureMessagewill 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
orexpression involving to matchers would make any English teacher proud: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