org.scalatest.matchers

# MatchResult

#### class MatchResult(matches: Boolean, failureMessage: String, negatedFailureMessage: String, midSentenceFailureMessage: String, midSentenceNegatedFailureMessage: String) extends Product

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`&#8212;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
go to: companion

authors:

1. Bill Venners

Inherited

1. Hide All
2. Show all

1. Product
2. Equals
3. AnyRef
4. 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)

### Value Members

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

   attributes: final
   definition classes: AnyRef

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

   `o != arg0` is the same as `!(o == (arg0))`.

   `o != arg0` is the same as `!(o == (arg0))`.

   arg0

     the object to compare against this object for dis-equality.

   returns

     `false` if the receiver object is equivalent to the argument; `true` otherwise.

   attributes: final
   definition classes: Any

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

   attributes: final
   definition classes: AnyRef → Any

4. #### def $asInstanceOf[T0](): T0

   attributes: final
   definition classes: AnyRef

5. #### def $isInstanceOf[T0](): Boolean

   attributes: final
   definition classes: AnyRef

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

   `o == arg0` is the same as `if (o eq null) arg0 eq null else o.equals(arg0)`.

   `o == arg0` is the same as `if (o eq null) arg0 eq null else o.equals(arg0)`.

   arg0

     the object to compare against this object for equality.

   returns

     `true` if the receiver object is equivalent to the argument; `false` otherwise.

   attributes: final
   definition classes: AnyRef

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

   `o == arg0` is the same as `o.equals(arg0)`.

   `o == arg0` is the same as `o.equals(arg0)`.

   arg0

     the object to compare against this object for equality.

   returns

     `true` if the receiver object is equivalent to the argument; `false` otherwise.

   attributes: final
   definition classes: Any

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

   This method is used to cast the receiver object to be of type `T0`.

   This method is used to cast the receiver object to be of type `T0`.

   Note that the success of a cast at runtime is modulo Scala's erasure semantics. Therefore the expression`1.asInstanceOf[String]` will throw a `ClassCastException` at runtime, while the expression`List(1).asInstanceOf[List[String]]` will not. In the latter example, because the type argument is erased as part of compilation it is not possible to check whether the contents of the list are of the requested typed.

   returns

     the receiver object.

   attributes: final
   definition classes: Any

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

   definition classes: MatchResult → Equals

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

    This method creates and returns a copy of the receiver object.

    This method creates and returns a copy of the receiver object.

    The default implementation of the `clone` method is platform dependent.

    returns

      a copy of the receiver object.

    attributes: protected
    definition classes: AnyRef

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

    This method is used to test whether the argument (`arg0`) is a reference to the receiver object (`this`).

    This method is used to test whether the argument (`arg0`) is a reference to the receiver object (`this`).

    The `eq` method implements an [http://en.wikipedia.org/wiki/Equivalence_relation equivalence relation] on non-null instances of `AnyRef`: * It is reflexive: for any non-null instance `x` of type `AnyRef`, `x.eq(x)` returns `true`. * It is symmetric: for any non-null instances `x` and `y` of type `AnyRef`, `x.eq(y)` returns `true` if and only if `y.eq(x)` returns `true`. * It is transitive: for any non-null instances `x`, `y`, and `z` of type `AnyRef` if `x.eq(y)` returns `true` and `y.eq(z)` returns `true`, then `x.eq(z)` returns `true`.

    Additionally, the `eq` method has three other properties. * It is consistent: for any non-null instances `x` and `y` of type `AnyRef`, multiple invocations of `x.eq(y)` consistently returns `true` or consistently returns `false`. * For any non-null instance `x` of type `AnyRef`, `x.eq(null)` and `null.eq(x)` returns `false`. * `null.eq(null)` returns `true`.

    When overriding the `equals` or `hashCode` methods, it is important to ensure that their behavior is consistent with reference equality. Therefore, if two objects are references to each other (`o1 eq o2`), they should be equal to each other (`o1 == o2`) and they should hash to the same value (`o1.hashCode == o2.hashCode`).

    arg0

      the object to compare against this object for reference equality.

    returns

      `true` if the argument is a reference to the receiver object; `false` otherwise.

    attributes: final
    definition classes: AnyRef

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

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

    arg0

      the object to compare against this object for equality.

    returns

      `true` if the receiver object is equivalent to the argument; `false` otherwise.

    definition classes: MatchResult → Equals → AnyRef → Any

13. #### val failureMessage: String

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

    This method is called by the garbage collector on the receiver object when garbage collection determines that there are no more references to the object.

    This method is called by the garbage collector on the receiver object when garbage collection determines that there are no more references to the object.

    The details of when and if the `finalize` method are invoked, as well as the interaction between `finalize`and non-local returns and exceptions, are all platform dependent.

    attributes: protected
    definition classes: AnyRef

15. #### def getClass(): java.lang.Class[_ <: java.lang.Object]

    Returns a representation that corresponds to the dynamic class of the receiver object.

    Returns a representation that corresponds to the dynamic class of the receiver object.

    The nature of the representation is platform dependent.

    returns

      a representation that corresponds to the dynamic class of the receiver object.

    attributes: final
    definition classes: AnyRef

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

    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.

    returns

      the hash code value for the object.

    definition classes: MatchResult → AnyRef → Any

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

    This method is used to test whether the dynamic type of the receiver object is `T0`.

    This method is used to test whether the dynamic type of the receiver object is `T0`.

    Note that the test result of the test is modulo Scala's erasure semantics. Therefore the expression`1.isInstanceOf[String]` will return `false`, while the expression `List(1).isInstanceOf[List[String]]` will return `true`. In the latter example, because the type argument is erased as part of compilation it is not possible to check whether the contents of the list are of the requested typed.

    returns

      `true` if the receiver object is an instance of erasure of type `T0`; `false` otherwise.

    attributes: final
    definition classes: Any

18. #### val matches: Boolean

19. #### val midSentenceFailureMessage: String

20. #### val midSentenceNegatedFailureMessage: String

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

    `o.ne(arg0)` is the same as `!(o.eq(arg0))`.

    `o.ne(arg0)` is the same as `!(o.eq(arg0))`.

    arg0

      the object to compare against this object for reference dis-equality.

    returns

      `false` if the argument is not a reference to the receiver object; `true` otherwise.

    attributes: final
    definition classes: AnyRef

22. #### val negatedFailureMessage: String

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

    Wakes up a single thread that is waiting on the receiver object's monitor.

    Wakes up a single thread that is waiting on the receiver object's monitor.

    attributes: final
    definition classes: AnyRef

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

    Wakes up all threads that are waiting on the receiver object's monitor.

    Wakes up all threads that are waiting on the receiver object's monitor.

    attributes: final
    definition classes: AnyRef

25. #### def productArity: Int

    definition classes: MatchResult → Product

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

    definition classes: MatchResult → Product

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

    definition classes: Product
    deprecated:

    1. use productIterator instead

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

    definition classes: Product

29. #### def productPrefix: String

    definition classes: MatchResult → Product

30. #### def synchronized[T0](arg0: T0): T0

    attributes: final
    definition classes: AnyRef

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

    Returns a string representation of the object.

    Returns a string representation of the object.

    The default representation is platform dependent.

    returns

      a string representation of the object.

    definition classes: MatchResult → AnyRef → Any

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

    attributes: final
    definition classes: AnyRef

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

    attributes: final
    definition classes: AnyRef

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

    attributes: final
    definition classes: AnyRef