0ab685cd0c181c3ae3a00b9f34b6091c8d3d0e12
[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
90     
91     @Test
92     public void testPublicField() {
93         List<Accessor> accessors = AnnotationUtils.analyse(X1.class, MyAnnotation.class);
94         assertEquals(1, accessors.size());
95         assertTrue(accessors.get(0) instanceof FieldAccessor);
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, MyAnnotation.class);
106         assertEquals(1, accessors.size());
107         assertTrue(accessors.get(0) instanceof FieldAccessor);
108         X2 obj = new X2();
109         assertEquals(0, obj.x);
110         accessors.get(0).set(obj, 100);
111         assertEquals(100, obj.x);
112     }
113     
114     @Test
115     public void testPublicProperty() { 
116         List<Accessor> accessors = AnnotationUtils.analyse(X3.class, MyAnnotation.class);
117         assertEquals(1, accessors.size());
118         assertTrue(accessors.get(0) instanceof PropertyAccessor);
119         X3 obj = new X3();
120         assertEquals(0, obj.x);
121         accessors.get(0).set(obj, 100);
122         assertEquals(100, obj.x);
123     }
124     
125     @Test
126     public void testPrivateProperty() { 
127         List<Accessor> accessors = AnnotationUtils.analyse(X4.class, MyAnnotation.class);
128         assertEquals(1, accessors.size());
129         assertTrue(accessors.get(0) instanceof PropertyAccessor);
130         X4 obj = new X4();
131         assertEquals(0, obj.x);
132         accessors.get(0).set(obj, 100);
133         assertEquals(100, obj.x);
134     }
135     
136     @Test
137     public void testMultipleMatches() { 
138         List<Accessor> accessors = AnnotationUtils.analyse(X5.class, MyAnnotation.class);
139         assertEquals(2, accessors.size());
140         X5 obj = new X5();
141         assertEquals(0, obj.x);
142         assertEquals(0, obj.y);
143         for (Accessor accessor: accessors) { 
144             accessor.set(obj, 100);
145         }
146         assertEquals(100, obj.x);
147         assertEquals(100, obj.y);
148     }
149 }