forked from DanielaSfregola/random-data-generator
-
Notifications
You must be signed in to change notification settings - Fork 0
/
RandomDataGeneratorSpec.scala
129 lines (101 loc) · 4.29 KB
/
RandomDataGeneratorSpec.scala
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
package com.danielasfregola.randomdatagenerator
import java.util.Currency
import org.scalacheck._
import org.specs2.mutable._
class RandomDataGeneratorSpec extends RandomDataGenerator with SpecificationLike {
"RandomDataGenerator" should {
"generate a random instance of a simple case class" in {
case class Example(text: String, n: Int)
val instance = random[Example]
instance should beAnInstanceOf[Example]
}
"generate multiple instances of a simple case class" in {
case class Example(text: String, n: Int)
val size = 3
val instances = random[Example](size)
instances.distinct.size === size
instances should beAnInstanceOf[Seq[Example]]
}
"generate a random instance of a non-predefined type" in {
import scala.collection.JavaConverters._
implicit val arbitraryCurrency: Arbitrary[Currency] = Arbitrary {
Gen.oneOf(Currency.getAvailableCurrencies.asScala.toSeq)
}
val instance = random[Currency]
instance should beAnInstanceOf[Currency]
}
"generate a random instance by using a custom generator" in {
case class Person(name: String, age: Int)
implicit val arbitraryPerson: Arbitrary[Person] = Arbitrary {
for {
name <- Gen.oneOf("Daniela", "John", "Martin", "Marco")
age <- Gen.choose(0, 100)
} yield Person(name, age)
}
val instance = random[Person]
instance should beAnInstanceOf[Person]
Seq("Daniela", "John", "Martin", "Marco").contains(instance.name) should beTrue
(0 to 100).contains(instance.age) should beTrue
}
"generate a random instance by using a overridden generator of a predefined type" in {
case class AlphaStrExample(text: String)
implicit val arbitraryString: Arbitrary[String] = Arbitrary(Gen.alphaStr)
val instance = random[AlphaStrExample]
instance should beAnInstanceOf[AlphaStrExample]
instance.text.forall(_.isLetter) should beTrue
}
"generate a random instance of a case class with more than 22 fields" in {
case class BigExample(f1: String, f2: Int, f3: Long, f4: Char, f5: String,
f6: String, f7: Int, f8: Long, f9: Char, f10: String,
f11: String, f12: Int, f13: Long, f14: Char, f15: String,
f16: String, f17: Int, f18: Long, f19: Char, f20: String,
f21: String, f22: Int, f23: Long, f24: Char, f25: String,
f26: String, f27: Int, f28: Long, f29: Char, f30: String)
/**
* NOTE: You only need to generate the arbitrary manually if your
* scala version is previous to 2.11.8.
*
* If you scala version is 2.11.8 or higher, the arbitrary instance
* will be generated automatically.
*/
implicit val arbitraryBigExample: Arbitrary[BigExample] = Arbitrary {
for {
f1 <- Gen.alphaStr
f2 <- Arbitrary.arbInt.arbitrary
f3 <- Arbitrary.arbLong.arbitrary
f4 <- Gen.alphaNumChar
f5 <- Gen.alphaStr
f6 <- Gen.alphaStr
f7 <- Arbitrary.arbInt.arbitrary
f8 <- Arbitrary.arbLong.arbitrary
f9 <- Gen.alphaNumChar
f10 <- Gen.alphaStr
f11 <- Gen.alphaStr
f12 <- Arbitrary.arbInt.arbitrary
f13 <- Arbitrary.arbLong.arbitrary
f14 <- Gen.alphaNumChar
f15 <- Gen.alphaStr
f16 <- Gen.alphaStr
f17 <- Arbitrary.arbInt.arbitrary
f18 <- Arbitrary.arbLong.arbitrary
f19 <- Gen.alphaNumChar
f20 <- Gen.alphaStr
f21 <- Gen.alphaStr
f22 <- Arbitrary.arbInt.arbitrary
f23 <- Arbitrary.arbLong.arbitrary
f24 <- Gen.alphaNumChar
f25 <- Gen.alphaStr
f26 <- Gen.alphaStr
f27 <- Arbitrary.arbInt.arbitrary
f28 <- Arbitrary.arbLong.arbitrary
f29 <- Gen.alphaNumChar
f30 <- Gen.alphaStr
} yield BigExample(f1, f2, f3, f4, f5, f6, f7, f8, f9, f10,
f11, f12, f13, f14, f15, f16, f17, f18, f19, f20,
f21, f22, f23, f24, f25, f26, f27, f28, f29, f30)
}
val instance = random[BigExample]
instance should beAnInstanceOf[BigExample]
}
}
}