org.scalatest.matchers

# HavePropertyMatcher

#### trait HavePropertyMatcher [-T, P] extends (T) ⇒ HavePropertyMatchResult[P]

Trait extended by matcher objects, which may appear after the word `have`, that can match against a property of the type specified by the `HavePropertyMatcher`'s second type parameter `P`. `HavePropertyMatcher`'s first type parameter, `T`, specifies the type that declares the property. The match will succeed if and only if the value of the property equals the specified value. The object containing the property is passed to the `HavePropertyMatcher`'s `apply` method. The result is a `HavePropertyMatchResult[P]`. A `HavePropertyMatcher` is, therefore, a function from the specified type, `T`, to a `HavePropertyMatchResult[P]`.

Although `HavePropertyMatcher` and `Matcher` represent similar concepts, they have no inheritance relationship because `Matcher` is intended for use right after `should` or `must` whereas `HavePropertyMatcher` is intended for use right after `have`.

A `HavePropertyMatcher` essentially allows you to write statically typed property assertions similar to the dynamic ones that use symbols:

    book should have ('title ("Moby Dick")) // dynamic: uses reflection
    book should have (title ("Moby Dick"))  // type safe: only works on Books; no reflection used

One good way to organize custom matchers is to place them inside one or more traits that you can then mix into the suites or specs that need them. Here's an example that includes two methods that produce `HavePropertyMatcher`s:

    case class Book(val title: String, val author: String)

    trait CustomMatchers {

      def title(expectedValue: String) =
        new HavePropertyMatcher[Book, String] {
          def apply(book: Book) =
            HavePropertyMatchResult(
              book.title == expectedValue,
              "title",
              expectedValue,
              book.title
            )
        }

      def author(expectedValue: String) =
        new HavePropertyMatcher[Book, String] {
          def apply(book: Book) =
            HavePropertyMatchResult(
              book.author == expectedValue,
              "author",
              expectedValue,
              book.author
            )
        }
    }

Each time the `title` method is called, it returns a new `HavePropertyMatcher[Book, String]` that can be used to match against the `title` property of the `Book` passed to its `apply` method. Because the type parameter of these two `HavePropertyMatcher`s is `Book`, they can only be used with instances of that type. (The compiler will enforce this.) The match will succeed if the `title` property equals the value passed as `expectedValue`. If the match succeeds, the `matches` field of the returned `HavePropertyMatchResult` will be `true`. The second field, `propertyName`, is simply the string name of the property. The third and fourth fields, `expectedValue` and `actualValue` indicate the expected and actual values, respectively, for the property. Here's an example that uses these `HavePropertyMatchers`:

    class ExampleSpec extends Spec with ShouldMatchers with CustomMatchers {

      describe("A book") {

        it("should have the correct title and author") {

          val book = Book("Moby Dick", "Melville")

          book should have (
            title ("Moby Dick"),
            author ("Melville")
          )
        }
      }
    }

These matches should succeed, but if for example the first property, `title ("Moby Dick")`, were to fail, you would get an error message like:

    The title property had value "A Tale of Two Cities", instead of its expected value "Moby Dick",
    on object Book(A Tale of Two Cities,Dickens)

For more information on `HavePropertyMatchResult` and the meaning of its fields, please see the documentation for `HavePropertyMatchResult`. To understand why `HavePropertyMatcher` is contravariant in its type parameter, see the section entitled "Matcher's variance" in the documentation for `Matcher`.

Self Type
  HavePropertyMatcher[T, P]

Linear Supertypes
(T) ⇒ HavePropertyMatchResult[P], AnyRef, Any
Known Subclasses
ResultOfLengthWordApplication, ResultOfSizeWordApplication
Ordering

1. Alphabetic
2. By inheritance

Inherited

1. Hide All
2. Show all

1. HavePropertyMatcher
2. Function1
3. AnyRef
4. Any

Visibility

1. Public
2. All

### Abstract Value Members

1. #### def apply (objectWithProperty: T): HavePropertyMatchResult[P]

   Check to see if a property on the specified object, `objectWithProperty`, matches its expected value, and report the result in the returned `HavePropertyMatchResult`.

   Check to see if a property on the specified object, `objectWithProperty`, matches its expected value, and report the result in the returned `HavePropertyMatchResult`. The `objectWithProperty` is usually the value to the left of a `should` or `must` invocation. For example, `book` would be passed as the `objectWithProperty` in:

       book should have (title ("Moby Dick"))

   objectWithProperty

     the object with the property against which to match

   returns

     the `HavePropertyMatchResult` that represents the result of the match

   Attributes
     abstract
   Definition Classes
     HavePropertyMatcher → Function1

### Concrete 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 andThen [A] (g: (HavePropertyMatchResult[P]) ⇒ A): (T) ⇒ A

   Definition Classes
     Function1

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

   Attributes
     final
   Definition Classes
     Any

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

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

9. #### def compose [U] (g: (U) ⇒ T): HavePropertyMatcher[U, P]

   Compose this `HavePropertyMatcher` with the passed function, returning a new `HavePropertyMatcher`.

   Compose this `HavePropertyMatcher` with the passed function, returning a new `HavePropertyMatcher`.

   This method overrides `compose` on `Function1` to return a more specific function type of `HavePropertyMatcher`.

   Definition Classes
     HavePropertyMatcher → Function1

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

    Attributes
      final
    Definition Classes
      AnyRef

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

    Definition Classes
      AnyRef → Any

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
      AnyRef → Any

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

    Attributes
      final
    Definition Classes
      Any

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

    Attributes
      final
    Definition Classes
      AnyRef

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

    Attributes
      final
    Definition Classes
      AnyRef

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

    Attributes
      final
    Definition Classes
      AnyRef

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

    Attributes
      final
    Definition Classes
      AnyRef

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

    Definition Classes
      Function1 → AnyRef → Any

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

    Attributes
      final
    Definition Classes
      AnyRef
    Annotations
      @throws()

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

    Attributes
      final
    Definition Classes
      AnyRef
    Annotations
      @throws()

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

    Attributes
      final
    Definition Classes
      AnyRef
    Annotations
      @throws()

### Inherited from (T) ⇒ HavePropertyMatchResult[P]

### Inherited from AnyRef

### Inherited from Any