Class/Object

org.scalatest.matchers

MatchResult

Related Docs: object MatchResult | package matchers

Permalink

final case class MatchResult(matches: Boolean, rawFailureMessage: String, rawNegatedFailureMessage: String, rawMidSentenceFailureMessage: String, rawMidSentenceNegatedFailureMessage: String, failureMessageArgs: IndexedSeq[Any], negatedFailureMessageArgs: IndexedSeq[Any], midSentenceFailureMessageArgs: IndexedSeq[Any], midSentenceNegatedFailureMessageArgs: IndexedSeq[Any]) extends Product with Serializable

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, four fields that provide raw failure messages to report under different circumstances, four fields providing arguments used to construct the final failure messages using raw failure messages and a Prettifier. Using the default constructor, failure messages will be constructed lazily (when required).

A MatchResult's matches field indicates whether a match succeeded. If it succeeded, matches will be true. There are four methods, failureMessage, negatedfailureMessage, midSentenceFailureMessage and negatedMidSentenceFailureMessage that can be called to get final 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.

Understanding 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 Ints 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.

Understanding the "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"

matches

indicates whether or not the matcher matched

rawFailureMessage

raw failure message to report if a match fails

rawNegatedFailureMessage

raw message with a meaning opposite to that of the failure message

rawMidSentenceFailureMessage

raw failure message suitable for appearing mid-sentence

rawMidSentenceNegatedFailureMessage

raw negated failure message suitable for appearing mid-sentence

failureMessageArgs

arguments for constructing failure message to report if a match fails

negatedFailureMessageArgs

arguments for constructing message with a meaning opposite to that of the failure message

midSentenceFailureMessageArgs

arguments for constructing failure message suitable for appearing mid-sentence

midSentenceNegatedFailureMessageArgs

arguments for constructing negated failure message suitable for appearing mid-sentence

Source
MatchResult.scala
Linear Supertypes
Serializable, Serializable, Product, Equals, AnyRef, Any
Ordering
  1. Alphabetic
  2. By Inheritance
Inherited
  1. MatchResult
  2. Serializable
  3. Serializable
  4. Product
  5. Equals
  6. AnyRef
  7. Any
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. All

Instance Constructors

  1. new MatchResult(matches: Boolean, rawFailureMessage: String, rawNegatedFailureMessage: String)

    Permalink

    Constructs a new MatchResult with passed matches, rawFailureMessage, and rawNegativeFailureMessage fields.

    Constructs a new MatchResult with passed matches, rawFailureMessage, and rawNegativeFailureMessage fields. The rawMidSentenceFailureMessage will return the same string as rawFailureMessage, and the rawMidSentenceNegatedFailureMessage will return the same string as rawNegatedFailureMessage. failureMessageArgs, negatedFailureMessageArgs, midSentenceFailureMessageArgs, midSentenceNegatedFailureMessageArgs will be Vector.empty and Prettifier.default will be used.

    matches

    indicates whether or not the matcher matched

    rawFailureMessage

    raw failure message to report if a match fails

    rawNegatedFailureMessage

    raw message with a meaning opposite to that of the failure message

  2. new MatchResult(matches: Boolean, rawFailureMessage: String, rawNegatedFailureMessage: String, rawMidSentenceFailureMessage: String, rawMidSentenceNegatedFailureMessage: String, failureMessageArgs: IndexedSeq[Any], negatedFailureMessageArgs: IndexedSeq[Any], midSentenceFailureMessageArgs: IndexedSeq[Any], midSentenceNegatedFailureMessageArgs: IndexedSeq[Any])

    Permalink

    matches

    indicates whether or not the matcher matched

    rawFailureMessage

    raw failure message to report if a match fails

    rawNegatedFailureMessage

    raw message with a meaning opposite to that of the failure message

    rawMidSentenceFailureMessage

    raw failure message suitable for appearing mid-sentence

    rawMidSentenceNegatedFailureMessage

    raw negated failure message suitable for appearing mid-sentence

    failureMessageArgs

    arguments for constructing failure message to report if a match fails

    negatedFailureMessageArgs

    arguments for constructing message with a meaning opposite to that of the failure message

    midSentenceFailureMessageArgs

    arguments for constructing failure message suitable for appearing mid-sentence

    midSentenceNegatedFailureMessageArgs

    arguments for constructing negated failure message suitable for appearing mid-sentence

Value Members

  1. final def !=(arg0: Any): Boolean

    Permalink
    Definition Classes
    AnyRef → Any
  2. final def ##(): Int

    Permalink
    Definition Classes
    AnyRef → Any
  3. final def ==(arg0: Any): Boolean

    Permalink
    Definition Classes
    AnyRef → Any
  4. final def asInstanceOf[T0]: T0

    Permalink
    Definition Classes
    Any
  5. def clone(): AnyRef

    Permalink
    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  6. final def eq(arg0: AnyRef): Boolean

    Permalink
    Definition Classes
    AnyRef
  7. def failureMessage(implicit prettifier: Prettifier): String

    Permalink

    Construct failure message to report if a match fails, using rawFailureMessage, failureMessageArgs and prettifier

    Construct failure message to report if a match fails, using rawFailureMessage, failureMessageArgs and prettifier

    returns

    failure message to report if a match fails

  8. val failureMessageArgs: IndexedSeq[Any]

    Permalink

    arguments for constructing failure message to report if a match fails

  9. def finalize(): Unit

    Permalink
    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( classOf[java.lang.Throwable] )
  10. final def getClass(): Class[_]

    Permalink
    Definition Classes
    AnyRef → Any
  11. final def isInstanceOf[T0]: Boolean

    Permalink
    Definition Classes
    Any
  12. val matches: Boolean

    Permalink

    indicates whether or not the matcher matched

  13. def midSentenceFailureMessage(implicit prettifier: Prettifier): String

    Permalink

    Construct failure message suitable for appearing mid-sentence, using rawMidSentenceFailureMessage, midSentenceFailureMessageArgs and prettifier

    Construct failure message suitable for appearing mid-sentence, using rawMidSentenceFailureMessage, midSentenceFailureMessageArgs and prettifier

    returns

    failure message suitable for appearing mid-sentence

  14. val midSentenceFailureMessageArgs: IndexedSeq[Any]

    Permalink

    arguments for constructing failure message suitable for appearing mid-sentence

  15. def midSentenceNegatedFailureMessage(implicit prettifier: Prettifier): String

    Permalink

    Construct negated failure message suitable for appearing mid-sentence, using rawMidSentenceNegatedFailureMessage, midSentenceNegatedFailureMessageArgs and prettifier

    Construct negated failure message suitable for appearing mid-sentence, using rawMidSentenceNegatedFailureMessage, midSentenceNegatedFailureMessageArgs and prettifier

    returns

    negated failure message suitable for appearing mid-sentence

  16. val midSentenceNegatedFailureMessageArgs: IndexedSeq[Any]

    Permalink

    arguments for constructing negated failure message suitable for appearing mid-sentence

  17. final def ne(arg0: AnyRef): Boolean

    Permalink
    Definition Classes
    AnyRef
  18. def negated: MatchResult

    Permalink

    Get a negated version of this MatchResult, matches field will be negated and all messages field will be substituted with its counter-part.

    Get a negated version of this MatchResult, matches field will be negated and all messages field will be substituted with its counter-part.

    returns

    a negated version of this MatchResult

  19. def negatedFailureMessage(implicit prettifier: Prettifier): String

    Permalink

    Construct message with a meaning opposite to that of the failure message, using rawNegatedFailureMessage, negatedFailureMessageArgs and prettifier

    Construct message with a meaning opposite to that of the failure message, using rawNegatedFailureMessage, negatedFailureMessageArgs and prettifier

    returns

    message with a meaning opposite to that of the failure message

  20. val negatedFailureMessageArgs: IndexedSeq[Any]

    Permalink

    arguments for constructing message with a meaning opposite to that of the failure message

  21. final def notify(): Unit

    Permalink
    Definition Classes
    AnyRef
  22. final def notifyAll(): Unit

    Permalink
    Definition Classes
    AnyRef
  23. val rawFailureMessage: String

    Permalink

    raw failure message to report if a match fails

  24. val rawMidSentenceFailureMessage: String

    Permalink

    raw failure message suitable for appearing mid-sentence

  25. val rawMidSentenceNegatedFailureMessage: String

    Permalink

    raw negated failure message suitable for appearing mid-sentence

  26. val rawNegatedFailureMessage: String

    Permalink

    raw message with a meaning opposite to that of the failure message

  27. final def synchronized[T0](arg0: ⇒ T0): T0

    Permalink
    Definition Classes
    AnyRef
  28. final def wait(): Unit

    Permalink
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  29. final def wait(arg0: Long, arg1: Int): Unit

    Permalink
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  30. final def wait(arg0: Long): Unit

    Permalink
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )

Inherited from Serializable

Inherited from Serializable

Inherited from Product

Inherited from Equals

Inherited from AnyRef

Inherited from Any

Ungrouped