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 HavePropertyMatchers:

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