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
|
import org.scalacheck._
import Prop._
import Gen._
import Arbitrary._
import scala.reflect.runtime.universe._
import Flag._
object Test extends Properties("reflection extractors") {
val genFlag = oneOf(
TRAIT, INTERFACE, MUTABLE, MACRO, DEFERRED, ABSTRACT, FINAL, SEALED,
IMPLICIT, LAZY, OVERRIDE, PRIVATE, PROTECTED, LOCAL, CASE, ABSOVERRIDE,
BYNAMEPARAM, PARAM, COVARIANT, CONTRAVARIANT, DEFAULTPARAM, PRESUPER,
DEFAULTINIT
)
val genModifiers =
for(flag <- genFlag; privateWithin <- genName)
yield Modifiers(flag, privateWithin, Nil)
val genTermName = for(name <- arbitrary[String]) yield TermName(name)
val genTypeName = for(name <- arbitrary[String]) yield TypeName(name)
val genName = oneOf(genTermName, genTypeName)
implicit val arbTermName: Arbitrary[TermName] = Arbitrary(genTermName)
implicit val arbTypeName: Arbitrary[TypeName] = Arbitrary(genTypeName)
implicit val arbName: Arbitrary[Name] = Arbitrary(genName)
implicit val arbMods: Arbitrary[Modifiers] = Arbitrary(genModifiers)
property("extract term name") = forAll { (name: TermName) =>
val TermName(s) = name
s == name.toString
}
property("extract type name") = forAll { (name: TypeName) =>
val TypeName(s) = name
s == name.toString
}
property("extract term or type name") = forAll { (name: Name) =>
name match {
case TermName(s) => s == name.toString
case TypeName(s) => s == name.toString
}
}
property("extract modifiers") = forAll { (mods: Modifiers) =>
val Modifiers(flags, priv, annots) = mods
flags == mods.flags &&
priv == mods.privateWithin &&
annots == mods.annotations
}
}
|