(no commit message)
[utils] / support / general / src / test / java / org / wamblee / reflection / AnnotationUtilsTest.java
1 /*
2  * Copyright 2005-2010 the original author or authors.
3  * 
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  * 
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  * 
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package org.wamblee.reflection;
17
18 import java.lang.annotation.ElementType;
19 import java.lang.annotation.Retention;
20 import java.lang.annotation.RetentionPolicy;
21 import java.lang.annotation.Target;
22 import java.util.List;
23
24 import org.junit.Test;
25
26 import static junit.framework.TestCase.*;
27
28 public class AnnotationUtilsTest {
29
30     @Retention(RetentionPolicy.RUNTIME)
31     @Target( { ElementType.FIELD, ElementType.METHOD })
32     public static @interface MyAnnotation {
33
34     }
35
36     public static class X1 {
37         @MyAnnotation
38         public int x;
39     }
40
41     public static class X2 {
42         @MyAnnotation
43         private int x;
44
45     }
46
47     public static class X3 {
48         private int x;
49
50         public void setX(int aX) {
51             x = aX;
52         }
53
54         @MyAnnotation
55         public int getX() {
56             return x;
57         }
58     }
59
60     public static class X4 {
61         private int x;
62
63         private void setX(int aX) {
64             x = aX;
65         }
66
67         @MyAnnotation
68         private int getX() {
69             return x;
70         }
71     }
72
73     public static class X5 {
74         private int x;
75
76         @MyAnnotation
77         private int y;
78
79         private void setX(int aX) {
80             x = aX;
81         }
82
83         @MyAnnotation
84         private int getX() {
85             return x;
86         }
87     }
88
89     @Test
90     public void testPublicField() {
91         List<Accessor> accessors = AnnotationUtils.analyse(X1.class,
92             MyAnnotation.class);
93         assertEquals(1, accessors.size());
94         assertTrue(accessors.get(0) instanceof FieldAccessor);
95         assertEquals(int.class, accessors.get(0).getType());
96
97         X1 obj = new X1();
98         assertEquals(0, obj.x);
99         accessors.get(0).set(obj, 100);
100         assertEquals(100, obj.x);
101     }
102
103     @Test
104     public void testPrivateField() {
105         List<Accessor> accessors = AnnotationUtils.analyse(X2.class,
106             MyAnnotation.class);
107         assertEquals(1, accessors.size());
108         assertTrue(accessors.get(0) instanceof FieldAccessor);
109         X2 obj = new X2();
110         assertEquals(0, obj.x);
111         accessors.get(0).set(obj, 100);
112         assertEquals(100, obj.x);
113     }
114
115     @Test
116     public void testPublicProperty() {
117         List<Accessor> accessors = AnnotationUtils.analyse(X3.class,
118             MyAnnotation.class);
119         assertEquals(1, accessors.size());
120         assertTrue(accessors.get(0) instanceof PropertyAccessor);
121         assertEquals(int.class, accessors.get(0).getType());
122         X3 obj = new X3();
123         assertEquals(0, obj.x);
124         accessors.get(0).set(obj, 100);
125         assertEquals(100, obj.x);
126     }
127
128     @Test
129     public void testPrivateProperty() {
130         List<Accessor> accessors = AnnotationUtils.analyse(X4.class,
131             MyAnnotation.class);
132         assertEquals(1, accessors.size());
133         assertTrue(accessors.get(0) instanceof PropertyAccessor);
134         X4 obj = new X4();
135         assertEquals(0, obj.x);
136         accessors.get(0).set(obj, 100);
137         assertEquals(100, obj.x);
138     }
139
140     @Test
141     public void testMultipleMatches() {
142         List<Accessor> accessors = AnnotationUtils.analyse(X5.class,
143             MyAnnotation.class);
144         assertEquals(2, accessors.size());
145         X5 obj = new X5();
146         assertEquals(0, obj.x);
147         assertEquals(0, obj.y);
148         for (Accessor accessor : accessors) {
149             accessor.set(obj, 100);
150         }
151         assertEquals(100, obj.x);
152         assertEquals(100, obj.y);
153     }
154 }