Skip to content

Commit

Permalink
updated scalacheck to 1.13.0
Browse files Browse the repository at this point in the history
  • Loading branch information
etorreborre committed Feb 6, 2016
1 parent 4591208 commit c6fd12c
Show file tree
Hide file tree
Showing 9 changed files with 53 additions and 67 deletions.
10 changes: 0 additions & 10 deletions guide/src/test/scala/org/specs2/guide/UseScalaCheck.scala
Expand Up @@ -173,16 +173,6 @@ class ScalaCheckSpec extends mutable.Specification with ScalaCheck {
}
}}

You can also set the random generator that is used in all the ScalaCheck generators: ${snippet{
case class MyRandomGenerator() extends java.util.Random {
// implement a deterministic generator for example
}

"this is a specific property" ! prop { (a: Int, b: Int) =>
(a + b) must_== (b + a)
}.set(rng = MyRandomGenerator(), minTestsOk = 200, workers = 3)
}}

#### Command-line

Some properties can be overridden from the command line
Expand Down
2 changes: 1 addition & 1 deletion project/depends.scala
Expand Up @@ -29,7 +29,7 @@ object depends {

lazy val kindp = Seq("org.spire-math" % "kind-projector" % "0.7.1" cross CrossVersion.binary)

lazy val scalacheck = Seq("org.scalacheck" %% "scalacheck" % "1.12.5")
lazy val scalacheck = Seq("org.scalacheck" %% "scalacheck" % "1.13.0")
lazy val mockito = Seq("org.mockito" % "mockito-core" % "1.9.5")
lazy val junit = Seq("junit" % "junit" % "4.12")
lazy val hamcrest = Seq("org.hamcrest" % "hamcrest-core" % "1.3")
Expand Down
45 changes: 24 additions & 21 deletions scalacheck/src/main/scala/org/specs2/scalacheck/AsResultProp.scala
@@ -1,7 +1,7 @@
package org.specs2
package scalacheck

import org.scalacheck.{Gen, Prop}
import org.scalacheck.{Properties, Gen, Prop}
import org.scalacheck.util._
import execute._
import org.specs2.main.{CommandLine, CommandLineAsResult}
Expand All @@ -15,28 +15,26 @@ trait AsResultProp extends ScalaCheckPropertyCheck with ScalaCheckParameters wit
r match {
case p: Prop => p
case _ =>
new Prop {
def apply(params: Gen.Parameters) = {
lazy val result = ResultExecution.execute(AsResult(r))
Prop.apply { params: Gen.Parameters =>
lazy val result = ResultExecution.execute(AsResult(r))

val prop =
result match {
case f : execute.Failure => Prop.falsified :| (f.message+" ("+f.location+")")
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 other => Prop.passed
}
val prop =
result match {
case f: execute.Failure if f.details != NoDetails =>
prop.apply(params).collect(f.details)

case _ =>
prop.apply(params)
case f : execute.Failure => Prop.falsified :| (f.message+" ("+f.location+")")
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 other => Prop.passed
}
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] {
Expand All @@ -46,12 +44,17 @@ trait AsResultProp extends ScalaCheckPropertyCheck with ScalaCheckParameters wit
}
}

/** implicit typeclass instance to create examples from Props */
implicit def propAsResult[P <: Prop](implicit p: Parameters, pfq: FreqMap[Set[Any]] => Pretty): AsResult[P] = new AsResult[P] {
def asResult(prop: =>P): Result =
/** 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 {
Expand Down
@@ -1,7 +1,7 @@
package org.specs2
package scalacheck

import org.scalacheck.Prop
import org.scalacheck.{Properties, Prop}
import org.scalacheck.util.{Pretty, FreqMap}
import org.specs2.execute.AsResult

Expand All @@ -10,9 +10,14 @@ import org.specs2.execute.AsResult
* number of expectations. With this trait we just count 1 for each result
*/
trait OneExpectationPerProp extends AsResultProp {
private def superPropAsResult[P <: Prop] = super.propAsResult[P]
private def superPropAsResult = super.propAsResult
private def superPropertiesAsResult = super.propertiesAsResult

implicit override def propAsResult[P <: Prop](implicit p: Parameters, pfq: FreqMap[Set[Any]] => Pretty): AsResult[P] = new AsResult[P] {
def asResult(prop: =>P) = superPropAsResult.asResult(prop).setExpectationsNb(1)
implicit override def propAsResult(implicit p: Parameters, pfq: FreqMap[Set[Any]] => Pretty): AsResult[Prop] = new AsResult[Prop] {
def asResult(prop: =>Prop) = superPropAsResult.asResult(prop).setExpectationsNb(1)
}

implicit override def propertiesAsResult(implicit p: Parameters, pfq: FreqMap[Set[Any]] => Pretty): AsResult[Properties] = new AsResult[Properties] {
def asResult(properties: =>Properties) = superPropertiesAsResult.asResult(properties).setExpectationsNb(1)
}
}
19 changes: 8 additions & 11 deletions scalacheck/src/main/scala/org/specs2/scalacheck/Parameters.scala
Expand Up @@ -13,7 +13,6 @@ case class Parameters(minTestsOk: Int = Test.Parameters.default.
maxDiscardRatio: Float = Test.Parameters.default.maxDiscardRatio,
maxSize: Int = Test.Parameters.default.maxSize,
workers: Int = Test.Parameters.default.workers,
rng: scala.util.Random = Test.Parameters.default.rng,
testCallback: Test.TestCallback = Test.Parameters.default.testCallback,
loader: Option[ClassLoader] = Test.Parameters.default.customClassLoader,
prettyParams: Pretty.Params = Pretty.defaultParams) { outer =>
Expand All @@ -25,16 +24,14 @@ case class Parameters(minTestsOk: Int = Test.Parameters.default.
copy(prettyParams = prettyParams.copy(verbosity = v))

def testParameters: Test.Parameters =
new Test.Parameters {
val minSuccessfulTests = outer.minTestsOk
val maxDiscardRatio = outer.maxDiscardRatio
val maxSize = outer.maxSize
val minSize = outer.minSize
val workers = outer.workers
val rng = outer.rng
val testCallback = outer.testCallback
val customClassLoader = outer.loader
}
Test.Parameters.default.
withMinSuccessfulTests(outer.minTestsOk).
withMaxDiscardRatio(outer.maxDiscardRatio).
withMaxSize(outer.maxSize).
withMinSize(outer.minSize).
withWorkers(outer.workers).
withTestCallback(outer.testCallback).
withCustomClassLoader(outer.loader)

def overrideWith(commandLine: CommandLine): Parameters = {
val updated =
Expand Down
Expand Up @@ -20,20 +20,18 @@ trait ScalaCheckParameters {
maxDiscardRatio: Float = defaultParameters.maxDiscardRatio,
maxSize: Int = defaultParameters.maxSize,
workers: Int = defaultParameters.workers,
rng: scala.util.Random = defaultParameters.rng,
callback: Test.TestCallback = defaultParameters.testCallback,
loader: Option[ClassLoader] = defaultParameters.loader): Parameters =
new Parameters(minTestsOk, minSize, maxDiscardRatio, maxSize, workers, rng, callback, loader)
new Parameters(minTestsOk, minSize, maxDiscardRatio, maxSize, workers, callback, loader)

/** create parameters with verbose = true */
def display(minTestsOk: Int = defaultParameters.minTestsOk,
minSize: Int = defaultParameters.minSize,
maxDiscardRatio: Float = defaultParameters.maxDiscardRatio,
maxSize: Int = defaultParameters.maxSize,
workers: Int = defaultParameters.workers,
rng: scala.util.Random = defaultParameters.rng,
callback: Test.TestCallback = defaultParameters.testCallback,
loader: Option[ClassLoader] = defaultParameters.loader): Parameters =
new Parameters(minTestsOk, minSize, maxDiscardRatio, maxSize, workers, rng, callback, loader).verbose
new Parameters(minTestsOk, minSize, maxDiscardRatio, maxSize, workers, callback, loader).verbose
}

Expand Up @@ -32,7 +32,6 @@ trait ScalaCheckProperty {
maxDiscardRatio: Float = parameters.maxDiscardRatio,
maxSize: Int = parameters.maxSize,
workers: Int = parameters.workers,
rng: scala.util.Random = parameters.rng,
callback: Test.TestCallback = parameters.testCallback,
loader: Option[ClassLoader] = parameters.loader
):SelfType =
Expand All @@ -43,7 +42,6 @@ trait ScalaCheckProperty {
maxDiscardRatio = maxDiscardRatio,
maxSize = maxSize,
workers = workers,
rng = rng,
testCallback = callback,
loader = loader
))
Expand All @@ -53,7 +51,6 @@ trait ScalaCheckProperty {
maxDiscardRatio: Float = parameters.maxDiscardRatio,
maxSize: Int = parameters.maxSize,
workers: Int = parameters.workers,
rng: scala.util.Random = parameters.rng,
callback: Test.TestCallback = parameters.testCallback,
loader: Option[ClassLoader] = parameters.loader
):SelfType =
Expand All @@ -64,7 +61,6 @@ trait ScalaCheckProperty {
maxDiscardRatio = maxDiscardRatio,
maxSize = maxSize,
workers = workers,
rng = rng,
testCallback = callback,
loader = loader
).setVerbosity(1))
Expand Down
Expand Up @@ -10,22 +10,19 @@ import PrettyDetails._

trait ScalaCheckPropertyCheck extends ExpectationsCreation {

def checkProperties(properties: Properties, parameters: Parameters, prettyFreqMap: FreqMap[Set[Any]] => Pretty): Result = {
val prop = Prop { params: Gen.Parameters =>
Prop.all(properties.properties.map { case (n, p) => p :| n }:_*)(params)
}
check(prop, parameters, prettyFreqMap)
}

/**
* checks if the property is true for each generated value, and with the specified
* parameters
*/
def check(prop: Prop, parameters: Parameters, prettyFreqMap: FreqMap[Set[Any]] => Pretty): Result = {
// check the property with ScalaCheck
// first add labels if this Prop is a composite one
val prop1 = prop match {
case ps: Properties =>
new Prop {
override def apply(params: Gen.Parameters): Prop.Result =
Prop.all(ps.properties.map { case (n, p) => p :| n }:_*)(params)
}
case _ => prop
}
val result = Test.check(parameters.testParameters, prop1)
val result = Test.check(parameters.testParameters, prop)
val prettyTestResult = prettyResult(result, prettyFreqMap)(parameters.prettyParams)
val testResult = if (parameters.prettyParams.verbosity == 0) "" else prettyTestResult

Expand Down
Expand Up @@ -17,7 +17,7 @@ class ScalaCheckMatchersResultsSpec extends Specification with ScalaCheck with R

${ check(Prop.passed) returns "OK, passed 100 tests." }
${ check(Prop.falsified) must beFailing(withMessage("Falsified after 0 passed tests.")) }
${ check(Prop.undecided) must beFailing(withMessage("Gave up after only 0 passed tests. 101 tests were discarded")) }
${ check(Prop.undecided) must beFailing(withMessage("Gave up after only 0 passed tests. 501 tests were discarded")) }
when there is a conversion exception
${ check(exceptionPropOnConversion) must beFailing(withMessage("failure")) }

Expand Down

0 comments on commit c6fd12c

Please sign in to comment.