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
|
import scala.language.reflectiveCalls
object Test extends App {
val theClass = classOf[AnnotationTest]
def annotation[T <: java.lang.annotation.Annotation](annotationClass: Class[T], methodName: String): T =
theClass.getDeclaredMethod(methodName)
.getAnnotation[T](annotationClass)
def check[T, U <: java.lang.annotation.Annotation { def value(): T } ](annotationClass: Class[U], methodName: String, expected: T): Unit = {
val a = annotation(annotationClass, methodName)
assert(a != null, s"No annotation of type $annotationClass found on method $methodName")
assert(a.value() == expected, s"Actual value of annotation $a on $methodName was not of expected value $expected")
}
check(classOf[BooleanAnnotation], "test1", Constants.BooleanTrue)
check(classOf[ByteAnnotation], "test1", Constants.Byte)
check(classOf[CharAnnotation], "test1", Constants.Char)
check(classOf[ShortAnnotation], "test1", Constants.Short)
check(classOf[IntAnnotation], "test1", Constants.Int)
check(classOf[LongAnnotation], "test1", Constants.Long)
check(classOf[FloatAnnotation], "test1", Constants.Float)
check(classOf[DoubleAnnotation], "test1", Constants.Double)
check(classOf[StringAnnotation], "test1", Constants.String)
check(classOf[BooleanAnnotation], "test2", Constants.InvertedBoolean)
check(classOf[ByteAnnotation], "test2", Constants.NegativeByte)
// no negative char possible
check(classOf[ShortAnnotation], "test2", Constants.NegativeShort)
check(classOf[IntAnnotation], "test2", Constants.NegativeInt)
check(classOf[LongAnnotation], "test2", Constants.NegativeLong)
check(classOf[FloatAnnotation], "test2", Constants.NegativeFloat)
check(classOf[DoubleAnnotation], "test2", Constants.NegativeDouble)
check(classOf[StringAnnotation], "test2", Constants.NegativeString)
check(classOf[BooleanAnnotation], "test3", Constants.BooleanFalse)
check(classOf[ByteAnnotation], "test3", Constants.LiteralCharAsByte)
check(classOf[CharAnnotation], "test3", Constants.LiteralChar)
check(classOf[ShortAnnotation], "test3", Constants.LiteralCharAsShort)
check(classOf[IntAnnotation], "test3", Constants.LiteralCharAsInt)
check(classOf[LongAnnotation], "test3", Constants.LiteralCharAsLong)
check(classOf[LongAnnotation], "test4", Constants.LiteralIntAsLong)
}
|