All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.specs2.matcher.EitherMatchers.scala Maven / Gradle / Ivy

There is a newer version: 3.8.5-20160914090233-50e99f0
Show newest version
package org.specs2
package matcher

/**
 * Matchers for the Either datatype
 */
trait EitherMatchers extends EitherBaseMatchers with EitherBeHaveMatchers
object EitherMatchers extends EitherMatchers

private[specs2]
trait EitherBaseMatchers {
  
  def beRight[T](t: ValueCheck[T]) = RightCheckedMatcher(t)
  def beRight[T] = new RightMatcher[T]

  def right[T](t: T) = beRight(t)
  def right[T](t: ValueCheck[T]) = beRight(t)
  def right[T] = beRight

  def beLeft[T](t: ValueCheck[T]) = LeftCheckedMatcher(t)
  def beLeft[T] = LeftMatcher[T]()

  def left[T](t: T) = beLeft(t)
  def left[T](t: ValueCheck[T]) = beLeft(t)
  def left[T] = beLeft
}

private[specs2]
trait EitherBeHaveMatchers extends BeHaveMatchers { outer: EitherBaseMatchers =>
  implicit class EitherResultMatcher[L, R](result: MatchResult[Either[L, R]]) {
    def right(r: =>R) = result(outer.beRight(r))
    def left(l: =>L) = result(outer.beLeft(l))
    def beRight(r: =>R) = result(outer.beRight(r))
    def beLeft(l: =>L) = result(outer.beLeft(l))

    def right = result(outer.beRight)
    def left = result(outer.beLeft)
    def beRight = result(outer.beRight)
    def beLeft = result(outer.beLeft)
  }
}

case class RightMatcher[T]() extends OptionLikeMatcher[({type l[a]=Either[_, a]})#l, T, T]("Right", (_:Either[Any, T]).right.toOption)
case class RightCheckedMatcher[T](check: ValueCheck[T]) extends OptionLikeCheckedMatcher[({type l[a]=Either[_, a]})#l, T, T]("Right", (_:Either[Any, T]).right.toOption, check)

case class LeftMatcher[T]() extends OptionLikeMatcher[({type l[a]=Either[a, _]})#l, T, T]("Left", (_:Either[T, Any]).left.toOption)
case class LeftCheckedMatcher[T](check: ValueCheck[T]) extends OptionLikeCheckedMatcher[({type l[a]=Either[a, _]})#l, T, T]("Left", (_:Either[T, Any]).left.toOption, check)




© 2015 - 2025 Weber Informatics LLC | Privacy Policy