class Composifier[T] extends AnyRef
Class used via an implicit conversion that adds composeTwice, mapResult, and
mapArgs methods to functions that produce a Matcher.
- Source
- MatcherProducers.scala
- Alphabetic
- By Inheritance
- Composifier
- AnyRef
- Any
- Hide All
- Show All
- Public
- Protected
Value Members
-   final  def !=(arg0: Any): Boolean- Definition Classes
- AnyRef → Any
 
-   final  def ##: Int- Definition Classes
- AnyRef → Any
 
-   final  def ==(arg0: Any): Boolean- Definition Classes
- AnyRef → Any
 
-   final  def asInstanceOf[T0]: T0- Definition Classes
- Any
 
-    def clone(): AnyRef- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.CloneNotSupportedException]) @native() @HotSpotIntrinsicCandidate()
 
-    def composeTwice[U](g: (U) => T): (U) => Matcher[U]Produces a new “matcher producer” function of type U => Matcher[U]from theT => Matcher[T](namedf) passed to theComposifierconstructor and the givenT => Utransformation function,g.Produces a new “matcher producer” function of type U => Matcher[U]from theT => Matcher[T](namedf) passed to theComposifierconstructor and the givenT => Utransformation function,g.The result of composeTwiceis the result of the following function composition expression:(f compose g) andThen (_ compose g) You would use composeTwiceif you want to create a new matcher producer from an existing one, by transforming both the left and right sides of the expression with the same transformation function. As an example, the expression “be > 7” produces aMatcher[Int]:scala> import org.scalatest._ import org.scalatest._ scala> import Matchers._ import Matchers._ scala> val beGreaterThanSeven = be > 7 beGreaterThanSeven: org.scalatest.matchers.Matcher[Int] = be > 7 Given this Matcher[Int], you can now use it in ashouldexpression like this:scala> 8 should beGreaterThanSeven scala> 6 should beGreaterThanSeven org.scalatest.exceptions.TestFailedException: 6 was not greater than 7 ... You can create a more general “matcher producer” function like this: scala> val beGreaterThan = { (i: Int) => be > i } beGreaterThan: Int => org.scalatest.matchers.Matcher[Int] = <function1> scala> 8 should beGreaterThan (7) scala> 8 should beGreaterThan (9) org.scalatest.exceptions.TestFailedException: 8 was not greater than 9Given beGreaterThanmatcher producer function, you can create matcher producer function that takes aStringand produces aMatcher[String]given a function fromInt => StringusingcomposeTwice:scala> val stringToInt = { (s: String) => s.toInt } stringToInt: String => Int = <function1> scala> val beAsIntsGreaterThan = beGreaterThan composeTwice stringToInt beAsIntsGreaterThan: String => org.scalatest.matchers.Matcher[String] = <function1> scala> "7" should beAsIntsGreaterThan ("6") scala> "7" should beAsIntsGreaterThan ("8") org.scalatest.exceptions.TestFailedException: 7 was not greater than 8 ...The composeTwicemethod is just a shorthand for this function composition expression:scala> val beAsIntsGreaterThan = (beGreaterThan compose stringToInt) andThen (_ compose stringToInt) beAsIntsGreaterThan: String => org.scalatest.matchers.Matcher[String] = <function1> scala> "7" should beAsIntsGreaterThan ("6") scala> "7" should beAsIntsGreaterThan ("8") org.scalatest.exceptions.TestFailedException: 7 was not greater than 8The first part of that expression, beGreaterThancomposestringToInt, gives you a new matcher producer function that given aStringwill produce aMatcher[Int]:scala> val beAsIntGreaterThan = beGreaterThan compose stringToInt beAsIntGreaterThan: String => org.scalatest.matchers.Matcher[Int] = <function1> This composemethod is inherited fromFunction1: on anyFunction1,(fcomposeg)(x)meansf(g(x)). You can use this matcher producer like this:scala> 7 should beAsIntGreaterThan ("6") scala> 7 should beAsIntGreaterThan ("8") org.scalatest.exceptions.TestFailedException: 7 was not greater than 8To get a matcher producer that will allow you to put a string on the right-hand-side, you'll need to transform the String=>Matcher[Int]to aString=>Matcher[String]. To accomplish this you can first just apply the function to get aMatcher[Int], like this:scala> val beGreaterThanEight = beAsIntGreaterThan ("8") beGreaterThanEight: org.scalatest.matchers.Matcher[Int] = be > 8 scala> 9 should beGreaterThanEight scala> 7 should beGreaterThanEight org.scalatest.exceptions.TestFailedException: 7 was not greater than 8To transform beGreaterThanEight, aMatcher[Int], to aMatcher[String], you can again usecompose. A ScalaTestMatcher[T]is a Scala function typeT=>MatchResult. To get aMatcher[String]therefore, just callcomposeon theMatcher[Int]and pass in a function fromString=>Int:scala> val beAsIntGreaterThanEight = beGreaterThanEight compose stringToInt beAsIntGreaterThanEight: org.scalatest.matchers.Matcher[String] = <function1> After the second call to compose, therefore, you have what you want:scala> "9" should beAsIntGreaterThanEight scala> "7" should beAsIntGreaterThanEight org.scalatest.exceptions.TestFailedException: 7 was not greater than 8 So in summary, what the result of (beGreaterThancomposestringToInt)andThen(_composestringToInt)will do once it is applied to a (right-hand-side)String, is:- Transform beGreaterThanfrom anInt=>Matcher[Int]to aString=>Matcher[Int]with the firstcompose
- Apply the given (right-hand-side) Stringto that to get aMatcher[Int](the first part ofandThen's behavior)
- Pass the resulting Matcher[Int]to the given function,_composestringToInt, which will transform theMatcher[Int]to aMatcher[String](the second part of theandThenbehavior).
 
- Transform 
-   final  def eq(arg0: AnyRef): Boolean- Definition Classes
- AnyRef
 
-    def equals(arg0: AnyRef): Boolean- Definition Classes
- AnyRef → Any
 
-   final  def getClass(): Class[_ <: AnyRef]- Definition Classes
- AnyRef → Any
- Annotations
- @native() @HotSpotIntrinsicCandidate()
 
-    def hashCode(): Int- Definition Classes
- AnyRef → Any
- Annotations
- @native() @HotSpotIntrinsicCandidate()
 
-   final  def isInstanceOf[T0]: Boolean- Definition Classes
- Any
 
-    def mapArgs(prettify: (Any) => String): (T) => Matcher[T]Returns a function that given a Twill return aMatcher[T]that will produce theMatchResultproduced byf(passed to theComposifierconstructor) with arguments transformed by the givenprettifyfunction.Returns a function that given a Twill return aMatcher[T]that will produce theMatchResultproduced byf(passed to theComposifierconstructor) with arguments transformed by the givenprettifyfunction.- prettify
- a function with which to transform the arguments of error messages. 
- returns
- a new - Matcherproducer function that produces prettified error messages
 
-    def mapResult(prettify: (MatchResult) => MatchResult): (T) => Matcher[T]Returns a function that given a Twill return aMatcher[T]that will produce theMatchResultproduced byf(passed to theComposifierconstructor) transformed by the givenprettifyfunction.Returns a function that given a Twill return aMatcher[T]that will produce theMatchResultproduced byf(passed to theComposifierconstructor) transformed by the givenprettifyfunction.- prettify
- a function with which to transform - MatchResults.
- returns
- a new - Matcherproducer function that produces prettified error messages
 
-   final  def ne(arg0: AnyRef): Boolean- Definition Classes
- AnyRef
 
-   final  def notify(): Unit- Definition Classes
- AnyRef
- Annotations
- @native() @HotSpotIntrinsicCandidate()
 
-   final  def notifyAll(): Unit- Definition Classes
- AnyRef
- Annotations
- @native() @HotSpotIntrinsicCandidate()
 
-   final  def synchronized[T0](arg0: => T0): T0- Definition Classes
- AnyRef
 
-    def toString(): String- Definition Classes
- AnyRef → Any
 
-   final  def wait(arg0: Long, arg1: Int): Unit- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
 
-   final  def wait(arg0: Long): Unit- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException]) @native()
 
-   final  def wait(): Unit- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
 
Deprecated Value Members
-    def finalize(): Unit- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.Throwable]) @Deprecated
- Deprecated