File: ReflectionExtractors.scala

package info (click to toggle)
scala 2.11.12-4
  • links: PTS, VCS
  • area: main
  • in suites: bullseye, buster
  • size: 62,776 kB
  • sloc: java: 13,415; xml: 3,252; sh: 1,620; python: 756; makefile: 38; awk: 36; ansic: 6
file content (52 lines) | stat: -rw-r--r-- 1,671 bytes parent folder | download | duplicates (4)
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
  }
}