1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.supercsv.util;
17
18 import static org.junit.Assert.assertEquals;
19 import static org.junit.Assert.assertTrue;
20 import static org.supercsv.util.ReflectionUtils.findGetter;
21 import static org.supercsv.util.ReflectionUtils.findSetter;
22
23 import java.lang.reflect.Constructor;
24
25 import org.junit.After;
26 import org.junit.Before;
27 import org.junit.Test;
28 import org.supercsv.exception.SuperCsvReflectionException;
29 import org.supercsv.mock.ReflectionBean;
30
31
32
33
34
35
36 public class ReflectionUtilsTest {
37
38 private static final double DOUBLE_ASSERT_DELTA = 1e-15;
39
40 private ReflectionBean bean;
41
42
43
44
45 @Before
46 public void setUp() {
47 bean = new ReflectionBean();
48 }
49
50
51
52
53 @After
54 public void tearDown() {
55 bean = null;
56 }
57
58
59
60
61 @Test
62 public void testFindGetter() throws Exception {
63 final String name = "Bob";
64 bean.setName(name);
65 assertEquals(name, findGetter(bean, "name").invoke(bean));
66 }
67
68
69
70
71 @Test
72 public void testFindBooleanGetter() throws Exception {
73 final Boolean boolValue = true;
74 bean.setBooleanWrapper(boolValue);
75 assertEquals(boolValue, findGetter(bean, "booleanWrapper").invoke(bean));
76 }
77
78
79
80
81 @Test
82 public void testFindAlternateBooleanGetter() throws Exception {
83 final boolean boolValue = true;
84 bean.setPrimitiveBoolean(boolValue);
85 assertEquals(boolValue, findGetter(bean, "primitiveBoolean").invoke(bean));
86 }
87
88
89
90
91 @Test
92 public void testFindAlternateBooleanWrapperGetter() throws Exception {
93 final Boolean boolValue = Boolean.TRUE;
94 bean.setBooleanWrapper2(boolValue);
95 assertEquals(boolValue, findGetter(bean, "booleanWrapper2").invoke(bean));
96 }
97
98
99
100
101 @Test
102 public void testFindSetter() throws Exception {
103 final String name = "Bob";
104 findSetter(bean, "name", String.class).invoke(bean, name);
105 assertEquals(name, bean.getName());
106 }
107
108
109
110
111 @Test
112 public void testFindSetterWithSubtype() throws Exception {
113 findSetter(bean, "favouriteNumber", Integer.class).invoke(bean, Integer.valueOf(123));
114 assertEquals(123, bean.getFavouriteNumber().intValue());
115 }
116
117
118
119
120
121 @Test
122 public void testFindSetterWithTwoOptions() throws Exception {
123 findSetter(bean, "overloaded", Number.class).invoke(bean, Integer.valueOf(123));
124 assertEquals(123, bean.getOverloaded().intValue());
125 }
126
127
128
129
130
131 @Test
132 public void testFindSetterWithMethodOfSameName() throws Exception {
133 findSetter(bean, "primitiveBoolean", boolean.class).invoke(bean, true);
134 assertTrue(bean.isPrimitiveBoolean());
135 }
136
137
138
139
140 @Test
141 public void testFindURLGetter() throws Exception {
142 final String url = "www.google.com";
143 bean.setURL(url);
144 assertEquals(url, findGetter(bean, "URL").invoke(bean));
145 }
146
147
148
149
150 @Test
151 public void testFindURLSetter() throws Exception {
152 final String url = "www.google.com";
153 findSetter(bean, "URL", String.class).invoke(bean, url);
154 assertEquals(url, bean.getURL());
155 }
156
157
158
159
160 @Test
161 public void testFindiPhoneGetter() throws Exception {
162 final String value = "Apple";
163 bean.setiPad(value);
164 assertEquals(value, findGetter(bean, "iPad").invoke(bean));
165 }
166
167
168
169
170 @Test
171 public void testFindiPhoneSetter() throws Exception {
172 final String value = "Apple";
173 findSetter(bean, "iPad", String.class).invoke(bean, value);
174 assertEquals(value, bean.getiPad());
175 }
176
177
178
179
180 @Test
181 public void testFindIsTurkishGetter() throws Exception {
182 final boolean value = true;
183 bean.setIsTurkish(value);
184 assertEquals(value, findGetter(bean, "isTurkish").invoke(bean));
185 }
186
187
188
189
190 @Test
191 public void testFindIsTurkishSetter() throws Exception {
192 final boolean value = true;
193 findSetter(bean, "isTurkish", Boolean.class).invoke(bean, value);
194 assertEquals(value, bean.getIsTurkish());
195 }
196
197
198
199
200
201 @Test
202 public void testAutoboxing() throws Exception {
203
204
205
206 findSetter(bean, "primitiveBoolean", Boolean.class).invoke(bean, Boolean.TRUE);
207 assertEquals(true, bean.isPrimitiveBoolean());
208
209 findSetter(bean, "primitiveInt", Integer.class).invoke(bean, Integer.valueOf(1));
210 assertEquals(1, bean.getPrimitiveInt());
211
212 findSetter(bean, "primitiveShort", Short.class).invoke(bean, Short.valueOf("2"));
213 assertEquals(Short.parseShort("2"), bean.getPrimitiveShort());
214
215 findSetter(bean, "primitiveLong", Long.class).invoke(bean, Long.valueOf("3"));
216 assertEquals(Long.parseLong("3"), bean.getPrimitiveLong());
217
218 findSetter(bean, "primitiveDouble", Double.class).invoke(bean, Double.valueOf("4.0"));
219 assertEquals(Double.parseDouble("4.0"), bean.getPrimitiveDouble(), DOUBLE_ASSERT_DELTA);
220
221 findSetter(bean, "primitiveFloat", Float.class).invoke(bean, Float.valueOf("5.0"));
222 assertEquals(Float.parseFloat("5.0"), bean.getPrimitiveFloat(), DOUBLE_ASSERT_DELTA);
223
224 findSetter(bean, "primitiveChar", Character.class).invoke(bean, Character.valueOf('a'));
225 assertEquals('a', bean.getPrimitiveChar());
226
227 findSetter(bean, "primitiveByte", Byte.class).invoke(bean, Byte.valueOf("123"));
228 assertEquals(Byte.parseByte("123"), bean.getPrimitiveByte());
229
230
231
232 findSetter(bean, "booleanWrapper", boolean.class).invoke(bean, true);
233 assertEquals(Boolean.TRUE, bean.getBooleanWrapper());
234
235 findSetter(bean, "integerWrapper", int.class).invoke(bean, 1);
236 assertEquals(Integer.valueOf(1), bean.getIntegerWrapper());
237
238 findSetter(bean, "shortWrapper", short.class).invoke(bean, Short.parseShort("2"));
239 assertEquals(Short.valueOf("2"), bean.getShortWrapper());
240
241 findSetter(bean, "longWrapper", long.class).invoke(bean, Long.parseLong("3"));
242 assertEquals(Long.valueOf("3"), bean.getLongWrapper());
243
244 findSetter(bean, "doubleWrapper", double.class).invoke(bean, Double.parseDouble("4.0"));
245 assertEquals(Double.valueOf("4.0"), bean.getDoubleWrapper());
246
247 findSetter(bean, "floatWrapper", float.class).invoke(bean, Float.parseFloat("5.0"));
248 assertEquals(Float.valueOf("5.0"), bean.getFloatWrapper());
249
250 findSetter(bean, "charWrapper", char.class).invoke(bean, 'a');
251 assertEquals(Character.valueOf('a'), bean.getCharWrapper());
252
253 findSetter(bean, "byteWrapper", byte.class).invoke(bean, Byte.parseByte("123"));
254 assertEquals(Byte.valueOf("123"), bean.getByteWrapper());
255
256 }
257
258
259
260
261 @Test(expected = NullPointerException.class)
262 public void testFindGetterWithNullObject() {
263 findGetter(null, "name");
264 }
265
266
267
268
269 @Test(expected = NullPointerException.class)
270 public void testFindGetterWithNullFieldName() {
271 findGetter(bean, null);
272 }
273
274
275
276
277 @Test(expected = SuperCsvReflectionException.class)
278 public void testFindGetterWithInvalidFieldName() {
279 findGetter(bean, "invalid");
280 }
281
282
283
284
285 @Test(expected = NullPointerException.class)
286 public void testFindSetterWithNullObject() {
287 findSetter(null, "name", String.class);
288 }
289
290
291
292
293 @Test(expected = NullPointerException.class)
294 public void testFindSetterWithNullFieldName() {
295 findSetter(bean, null, String.class);
296 }
297
298
299
300
301 @Test(expected = NullPointerException.class)
302 public void testFindSetterWithNullFieldType() {
303 findSetter(bean, "name", null);
304 }
305
306
307
308
309 @Test(expected = SuperCsvReflectionException.class)
310 public void testFindSetterWithInvalidFieldName() {
311 findSetter(bean, "invalid", String.class);
312 }
313
314
315
316
317
318 @Test(expected = SuperCsvReflectionException.class)
319 public void testFindSetterWithInvalidFieldNameAndPrimitiveType() {
320 findSetter(bean, "invalid", int.class);
321 }
322
323
324
325
326 @Test
327 public void testPrivateConstructor() throws Exception {
328 Constructor<?> c = ReflectionUtils.class.getDeclaredConstructors()[0];
329 c.setAccessible(true);
330 c.newInstance();
331 }
332
333 }