org.scalatest.matchers

# MatchResult

#### case class MatchResult (matches: Boolean, failureMessage: String, negatedFailureMessage: String, midSentenceFailureMessage: String, midSentenceNegatedFailureMessage: String) 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 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.

#### 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 `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.

#### 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

failureMessage

  a failure message to report if a match fails

negatedFailureMessage

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

midSentenceFailureMessage

  a failure message suitable for appearing mid-sentence

midSentenceNegatedFailureMessage

  a negated failure message suitable for appearing mid-sentence

Attributes
  final

Linear Supertypes
Serializable, Serializable, Product, Equals, AnyRef, Any
Ordering

1. Alphabetic
2. By inheritance

Inherited

1. Hide All
2. Show all

1. MatchResult
2. Serializable
3. Serializable
4. Product
5. Equals
6. AnyRef
7. Any

Visibility

1. Public
2. All

### Instance Constructors

1. #### new MatchResult (matches: Boolean, failureMessage: String, negatedFailureMessage: String)

   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`.

   matches

     indicates whether or not the matcher matched

   failureMessage

     a failure message to report if a match fails

   negatedFailureMessage

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

2. #### new MatchResult (matches: Boolean, failureMessage: String, negatedFailureMessage: String, midSentenceFailureMessage: String, midSentenceNegatedFailureMessage: String)

   matches

     indicates whether or not the matcher matched

   failureMessage

     a failure message to report if a match fails

   negatedFailureMessage

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

   midSentenceFailureMessage

     a failure message suitable for appearing mid-sentence

   midSentenceNegatedFailureMessage

     a negated failure message suitable for appearing mid-sentence

### Value Members

1. #### def != (arg0: AnyRef): Boolean

   Attributes
     final
   Definition Classes
     AnyRef

2. #### def != (arg0: Any): Boolean

   Attributes
     final
   Definition Classes
     Any

3. #### def ## (): Int

   Attributes
     final
   Definition Classes
     AnyRef → Any

4. #### def == (arg0: AnyRef): Boolean

   Attributes
     final
   Definition Classes
     AnyRef

5. #### def == (arg0: Any): Boolean

   Attributes
     final
   Definition Classes
     Any

6. #### def asInstanceOf [T0] : T0

   Attributes
     final
   Definition Classes
     Any

7. #### def canEqual (arg0: Any): Boolean

   Definition Classes
     MatchResult → Equals

8. #### def clone (): AnyRef

   Attributes
     protected[lang]
   Definition Classes
     AnyRef
   Annotations
     @throws()

9. #### def eq (arg0: AnyRef): Boolean

   Attributes
     final
   Definition Classes
     AnyRef

10. #### def equals (arg0: Any): Boolean

    Definition Classes
      MatchResult → Equals → AnyRef → Any

11. #### val failureMessage : String

    a failure message to report if a match fails

12. #### def finalize (): Unit

    Attributes
      protected[lang]
    Definition Classes
      AnyRef
    Annotations
      @throws()

13. #### def getClass (): java.lang.Class[_]

    Attributes
      final
    Definition Classes
      AnyRef

14. #### def hashCode (): Int

    Definition Classes
      MatchResult → AnyRef → Any

15. #### def isInstanceOf [T0] : Boolean

    Attributes
      final
    Definition Classes
      Any

16. #### val matches : Boolean

    indicates whether or not the matcher matched

17. #### val midSentenceFailureMessage : String

    a failure message suitable for appearing mid-sentence

18. #### val midSentenceNegatedFailureMessage : String

    a negated failure message suitable for appearing mid-sentence

19. #### def ne (arg0: AnyRef): Boolean

    Attributes
      final
    Definition Classes
      AnyRef

20. #### val negatedFailureMessage : String

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

21. #### def notify (): Unit

    Attributes
      final
    Definition Classes
      AnyRef

22. #### def notifyAll (): Unit

    Attributes
      final
    Definition Classes
      AnyRef

23. #### def productArity : Int

    Definition Classes
      MatchResult → Product

24. #### def productElement (arg0: Int): Any

    Definition Classes
      MatchResult → Product

25. #### def productIterator : Iterator[Any]

    Definition Classes
      Product

26. #### def productPrefix : String

    Definition Classes
      MatchResult → Product

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

    Attributes
      final
    Definition Classes
      AnyRef

28. #### def toString (): String

    Definition Classes
      MatchResult → AnyRef → Any

29. #### def wait (): Unit

    Attributes
      final
    Definition Classes
      AnyRef
    Annotations
      @throws()

30. #### def wait (arg0: Long, arg1: Int): Unit

    Attributes
      final
    Definition Classes
      AnyRef
    Annotations
      @throws()

31. #### def wait (arg0: Long): Unit

    Attributes
      final
    Definition Classes
      AnyRef
    Annotations
      @throws()

32. #### def productElements : Iterator[Any]

    Definition Classes
      Product
    Annotations
      @deprecated
    Deprecated

      use productIterator instead

### Inherited from Serializable

### Inherited from Product

### Inherited from Equals

### Inherited from AnyRef

### Inherited from Any