Skip to content

Commit 2c0fd18

Browse files
author
Fede Fernández
committed
Upgrades scalacheck and scalatest libraries
1 parent e087eb7 commit 2c0fd18

File tree

6 files changed

+81
-32
lines changed

6 files changed

+81
-32
lines changed

build.sbt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@ lazy val scalacheck = (project in file("."))
1111
Resolver.sonatypeRepo("releases")
1212
),
1313
libraryDependencies ++= Seq(
14-
"org.scalatest" %% "scalatest" % "2.2.4",
15-
"org.scala-exercises" %% "exercise-compiler" % version.value,
16-
"org.scala-exercises" %% "definitions" % version.value,
17-
"org.scalacheck" %% "scalacheck" % "1.12.5",
18-
"com.github.alexarchambault" %% "scalacheck-shapeless_1.12" % "0.3.1",
14+
"org.scalatest" %% "scalatest" % "3.0.1" exclude("org.scalacheck", "scalacheck"),
15+
"org.scala-exercises" %% "exercise-compiler" % version.value excludeAll ExclusionRule("com.github.alexarchambault"),
16+
"org.scala-exercises" %% "definitions" % version.value excludeAll ExclusionRule("com.github.alexarchambault"),
17+
"com.fortysevendeg" %% "scalacheck-datetime" % "0.2.0",
18+
"com.github.alexarchambault" %% "scalacheck-shapeless_1.13" % "1.1.3",
1919
compilerPlugin("org.spire-math" %% "kind-projector" % "0.9.0")
2020
)
2121
)

src/main/scala/scalachecklib/PropertiesSection.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ object PropertiesSection extends Checkers with Matchers with org.scalaexercises.
185185
*
186186
*/
187187
def groupingProperties(res0: Int, res1: Int, res2: Int) = {
188-
import org.scalacheck.Properties
188+
import org.scalacheck.{Prop, Properties}
189189

190190
class ZeroSpecification extends Properties("Zero") {
191191

@@ -199,6 +199,6 @@ object PropertiesSection extends Checkers with Matchers with org.scalaexercises.
199199

200200
}
201201

202-
check(new ZeroSpecification)
202+
check(Prop.all(new ZeroSpecification().properties.map(_._2): _*))
203203
}
204204
}

src/test/scala/scalachecklib/ArbitrarySpec.scala

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
11
package scalachecklib
22

33
import org.scalacheck.Shapeless._
4-
import org.scalaexercises.Test
5-
import org.scalatest.Spec
4+
import org.scalatest.FunSuite
65
import org.scalatest.prop.Checkers
76
import shapeless.HNil
87

9-
class ArbitrarySpec extends Spec with Checkers {
8+
class ArbitrarySpec extends FunSuite with Checkers {
109

11-
def `implicit arbitrary char` = {
10+
test("implicit arbitrary char") {
1211

1312
check(
1413
Test.testSuccess(
@@ -18,7 +17,7 @@ class ArbitrarySpec extends Spec with Checkers {
1817
)
1918
}
2019

21-
def `implicit arbitrary case class` = {
20+
test("implicit arbitrary case class") {
2221

2322
check(
2423
Test.testSuccess(
@@ -28,7 +27,7 @@ class ArbitrarySpec extends Spec with Checkers {
2827
)
2928
}
3029

31-
def `arbitrary on gen` = {
30+
test("arbitrary on gen") {
3231

3332
check(
3433
Test.testSuccess(

src/test/scala/scalachecklib/GeneratorsSpec.scala

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
11
package scalachecklib
22

33
import org.scalacheck.Shapeless._
4-
import org.scalaexercises.Test
5-
import org.scalatest.Spec
4+
import org.scalatest.FunSuite
65
import org.scalatest.prop.Checkers
76
import shapeless.HNil
87

9-
class GeneratorsSpec extends Spec with Checkers {
8+
class GeneratorsSpec extends FunSuite with Checkers {
109

11-
def `for-comprehension generator` = {
10+
test("for-comprehension generator") {
1211

1312
check(
1413
Test.testSuccess(
@@ -19,7 +18,7 @@ class GeneratorsSpec extends Spec with Checkers {
1918

2019
}
2120

22-
def `oneOf method` = {
21+
test("oneOf method") {
2322

2423
check(
2524
Test.testSuccess(
@@ -30,7 +29,7 @@ class GeneratorsSpec extends Spec with Checkers {
3029

3130
}
3231

33-
def `alphaChar, posNum and listOfN` = {
32+
test("alphaChar, posNum and listOfN") {
3433

3534
check(
3635
Test.testSuccess(
@@ -41,7 +40,7 @@ class GeneratorsSpec extends Spec with Checkers {
4140

4241
}
4342

44-
def `suchThat condition` = {
43+
test("suchThat condition") {
4544

4645
check(
4746
Test.testSuccess(
@@ -52,7 +51,7 @@ class GeneratorsSpec extends Spec with Checkers {
5251

5352
}
5453

55-
def `case class generator` = {
54+
test("case class generator") {
5655

5756
check(
5857
Test.testSuccess(
@@ -63,7 +62,7 @@ class GeneratorsSpec extends Spec with Checkers {
6362

6463
}
6564

66-
def `sized generator` = {
65+
test("sized generator") {
6766

6867
check(
6968
Test.testSuccess(
@@ -74,7 +73,7 @@ class GeneratorsSpec extends Spec with Checkers {
7473

7574
}
7675

77-
def `list container` = {
76+
test("list container") {
7877

7978
check(
8079
Test.testSuccess(

src/test/scala/scalachecklib/PropertiesSpec.scala

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,13 @@
11
package scalachecklib
22

33
import org.scalacheck.Shapeless._
4-
import org.scalaexercises.Test
5-
import org.scalatest.Spec
4+
import org.scalatest.FunSuite
65
import org.scalatest.prop.Checkers
76
import shapeless.HNil
87

8+
class PropertiesSpec extends FunSuite with Checkers {
99

10-
class PropertiesSpec extends Spec with Checkers {
11-
12-
def `always ends with the second string` = {
10+
test("always ends with the second string") {
1311

1412
check(
1513
Test.testSuccess(
@@ -19,7 +17,7 @@ class PropertiesSpec extends Spec with Checkers {
1917
)
2018
}
2119

22-
def `all numbers are generated between the desired interval` = {
20+
test("all numbers are generated between the desired interval") {
2321

2422
check(
2523
Test.testSuccess(
@@ -29,7 +27,7 @@ class PropertiesSpec extends Spec with Checkers {
2927
)
3028
}
3129

32-
def `all generated numbers are even` = {
30+
test("all generated numbers are even") {
3331

3432
check(
3533
Test.testSuccess(
@@ -39,7 +37,7 @@ class PropertiesSpec extends Spec with Checkers {
3937
)
4038
}
4139

42-
def `only the second condition is true` = {
40+
test("only the second condition is true") {
4341

4442
check(
4543
Test.testSuccess(
@@ -49,7 +47,7 @@ class PropertiesSpec extends Spec with Checkers {
4947
)
5048
}
5149

52-
def `the zero specification only works for 0` = {
50+
test("the zero specification only works for 0") {
5351

5452
check(
5553
Test.testSuccess(
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package scalachecklib
2+
3+
import shapeless._
4+
import shapeless.ops.function._
5+
6+
import cats.implicits._
7+
import org.scalacheck.{ Prop, Arbitrary }
8+
import org.scalacheck.Gen
9+
import Prop.forAll
10+
11+
import org.scalatest.exceptions._
12+
13+
import org.scalacheck.Shapeless._
14+
15+
object Test {
16+
17+
def testSuccess[F, R, L <: HList](method: F, answer: L)(
18+
implicit
19+
A: Arbitrary[L],
20+
fntop: FnToProduct.Aux[F, L R]
21+
): Prop = {
22+
val rightGen = genRightAnswer(answer)
23+
val rightProp = forAll(rightGen)({ p
24+
25+
val result = Either.catchOnly[GeneratorDrivenPropertyCheckFailedException]({ fntop(method)(p) })
26+
result match {
27+
case Left(exc) exc.cause match {
28+
case Some(originalException) throw originalException
29+
case _ false
30+
}
31+
case _ true
32+
}
33+
})
34+
35+
val wrongGen = genWrongAnswer(answer)
36+
val wrongProp = forAll(wrongGen)({ p
37+
Either.catchNonFatal({ fntop(method)(p) }).isLeft
38+
})
39+
40+
Prop.all(rightProp, wrongProp)
41+
}
42+
43+
def genRightAnswer[L <: HList](answer: L): Gen[L] = {
44+
Gen.const(answer)
45+
}
46+
47+
def genWrongAnswer[L <: HList](l: L)(
48+
implicit
49+
A: Arbitrary[L]
50+
): Gen[L] = {
51+
A.arbitrary.suchThat(_ != l)
52+
}
53+
}

0 commit comments

Comments
 (0)