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

org.specs2.scalacheck.AsResultProp.scala Maven / Gradle / Ivy

package org.specs2
package scalacheck

import org.scalacheck.{Properties, Gen, Prop}
import org.scalacheck.util._
import execute._
import org.specs2.main.{CommandLine, CommandLineAsResult}

/**
 * Implicits to convert Prop to AsResult and AsResult to Prop
 */
trait AsResultProp extends ScalaCheckPropertyCheck with ScalaCheckParameters with AsResultPropLowImplicits {

  implicit def asResultToProp[R : AsResult](r: R): Prop = {
    r match {
      case p: Prop => p
      case _ =>
        Prop.apply { params: Gen.Parameters =>
          lazy val result = ResultExecution.execute(AsResult(r))

          def resultToProp(r: execute.Result): Prop =
            r match {
              case f : execute.Failure            => Prop.exception(new FailureException(f))
              case s : execute.Skipped            => Prop.exception(new SkipException(s))
              case p : execute.Pending            => Prop.exception(new PendingException(p))
              case e : execute.Error              => Prop.exception(e.exception)
              case execute.DecoratedResult(_, r1) => resultToProp(r1)
              case other                          => Prop.passed
            }

          val prop = resultToProp(result)

          result match {
            case f: execute.Failure if f.details != NoDetails =>
              prop.apply(params).collect(f.details)

            case _ =>
              prop.apply(params)
          }
        }
     }
  }

  implicit def scalaCheckPropertyCommandLineAsResult[S <: ScalaCheckProperty]: CommandLineAsResult[S] = new CommandLineAsResult[S] {
    def asResult(commandLine: CommandLine, prop: =>S): Result = {
      lazy val p = prop
      check(p.prop, p.parameters.overrideWith(commandLine), p.prettyFreqMap)
    }
  }

  /** implicit typeclass instance to create examples from a Prop */
  implicit def propAsResult(implicit p: Parameters, pfq: FreqMap[Set[Any]] => Pretty): AsResult[Prop] = new AsResult[Prop] {
    def asResult(prop: =>Prop): Result =
      check(prop, p, pfq)
  }

  /** implicit typeclass instance to create examples from Properties */
  implicit def propertiesAsResult(implicit p: Parameters, pfq: FreqMap[Set[Any]] => Pretty): AsResult[Properties] = new AsResult[Properties] {
    def asResult(properties: =>Properties): Result =
      checkProperties(properties, p, pfq)
  }
}

trait AsResultPropLowImplicits extends ScalaCheckPropertyCheck {
  implicit def scalaCheckPropertyAsResult[S <: ScalaCheckProperty]: AsResult[S] = new AsResult[S] {
    def asResult(prop: =>S): Result = {
      lazy val p = prop
      check(p.prop, p.parameters, p.prettyFreqMap)
    }
  }
}

object AsResultProp extends AsResultProp




© 2015 - 2025 Weber Informatics LLC | Privacy Policy