1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.beanutils2;
18
19 import static org.junit.jupiter.api.Assertions.assertEquals;
20 import static org.junit.jupiter.api.Assertions.assertFalse;
21 import static org.junit.jupiter.api.Assertions.assertNotNull;
22 import static org.junit.jupiter.api.Assertions.assertNull;
23 import static org.junit.jupiter.api.Assertions.assertThrows;
24 import static org.junit.jupiter.api.Assertions.assertTrue;
25
26 import java.util.ArrayList;
27 import java.util.HashMap;
28 import java.util.LinkedList;
29 import java.util.List;
30 import java.util.Map;
31 import java.util.TreeMap;
32
33 import org.junit.jupiter.api.AfterEach;
34 import org.junit.jupiter.api.BeforeEach;
35 import org.junit.jupiter.api.Test;
36
37
38
39
40
41
42 public class LazyDynaMapTest {
43
44 protected LazyDynaMap dynaMap;
45 protected String testProperty = "myProperty";
46 protected String testPropertyA = "myProperty-A";
47 protected String testPropertyB = "myProperty-B";
48 protected String testString1 = "myStringValue-1";
49 protected String testString2 = "myStringValue-2";
50 protected Integer testInteger1 = Integer.valueOf(30);
51
52 protected Integer testInteger2 = Integer.valueOf(40);
53
54 protected String testKey = "myKey";
55
56
57
58
59 @BeforeEach
60 public void setUp() throws Exception {
61 dynaMap = new LazyDynaMap();
62 dynaMap.setReturnNull(true);
63 }
64
65
66
67
68 @AfterEach
69 public void tearDown() {
70 dynaMap = null;
71 }
72
73
74
75
76 @Test
77 public void testGeneral() {
78
79 assertEquals("TestBean", new LazyDynaMap("TestBean").getName(), "Check DynaClass name");
80
81 }
82
83
84
85
86 @Test
87 public void testIndexedDynaBeanArray() {
88
89 final int index = 3;
90 final Object objectArray = new LazyDynaBean[0];
91
92
93 assertNull(dynaMap.getDynaProperty(testProperty), "Check Indexed Property doesn't exist");
94 assertNull(dynaMap.get(testProperty), "Check Indexed Property is null");
95
96
97 dynaMap.add(testProperty, objectArray.getClass());
98 assertEquals(objectArray.getClass(), dynaMap.getDynaProperty(testProperty).getType(), "Check Indexed Property exists");
99 assertEquals(objectArray.getClass(), dynaMap.get(testProperty).getClass(), "Check Indexed Property is correct type");
100
101
102 for (int i = index; i >= 0; i--) {
103 assertEquals(LazyDynaBean.class, dynaMap.get(testProperty, index).getClass(), "Check Array Components initialized");
104 }
105
106 dynaMap.add(testPropertyB, objectArray.getClass());
107 final LazyDynaBean newBean = new LazyDynaBean();
108 newBean.set(testPropertyB, testString2);
109 dynaMap.set(testPropertyA, index, newBean);
110 assertEquals(testString2, ((DynaBean) dynaMap.get(testPropertyA, index)).get(testPropertyB), "Check Indexed Value is correct(a)");
111
112 }
113
114
115
116
117 @Test
118 public void testIndexedInvalidType() {
119 final int index = 3;
120 dynaMap.set(testProperty, "Test String");
121 assertFalse(dynaMap.getDynaProperty(testProperty).isIndexed(), "Check Property is not indexed");
122 assertThrows(IllegalArgumentException.class, () -> dynaMap.set(testProperty, index, testString1));
123 }
124
125
126
127
128 @Test
129 public void testIndexedLinkedList() {
130
131 int index = 3;
132
133
134 assertNull(dynaMap.getDynaProperty(testProperty), "Check Indexed Property doesn't exist");
135 assertNull(dynaMap.get(testProperty), "Check Indexed Property is null");
136
137
138 dynaMap.add(testProperty, LinkedList.class);
139 assertTrue(dynaMap.getDynaProperty(testProperty).isIndexed(), "Check Property is indexed");
140 assertEquals(LinkedList.class, dynaMap.getDynaProperty(testProperty).getType(), "Check Property is correct type");
141 assertEquals(LinkedList.class, dynaMap.get(testProperty).getClass(), "Check Indexed Property now exists");
142
143
144 dynaMap.set(testProperty, index, testString1);
145 assertEquals(LinkedList.class, dynaMap.get(testProperty).getClass(), "Check Property type is correct");
146 assertEquals(testString1, dynaMap.get(testProperty, index), "Check First Indexed Value is correct");
147 assertEquals(Integer.valueOf(index + 1), Integer.valueOf(((LinkedList<?>) dynaMap.get(testProperty)).size()), "Check First Array length is correct");
148
149
150 index += 2;
151 dynaMap.set(testProperty, index, testInteger1);
152 assertEquals(testInteger1, dynaMap.get(testProperty, index), "Check Second Indexed Value is correct");
153 assertEquals(Integer.valueOf(index + 1), Integer.valueOf(((LinkedList<?>) dynaMap.get(testProperty)).size()), "Check Second Array length is correct");
154 }
155
156
157
158
159 @Test
160 public void testIndexedObjectArray() {
161
162 int index = 3;
163 final Object objectArray = new String[0];
164
165
166 assertNull(dynaMap.getDynaProperty(testProperty), "Check Indexed Property doesn't exist");
167 assertNull(dynaMap.get(testProperty), "Check Indexed Property is null");
168
169
170 dynaMap.add(testProperty, objectArray.getClass());
171 assertEquals(objectArray.getClass(), dynaMap.getDynaProperty(testProperty).getType(), "Check Indexed Property exists");
172 assertTrue(dynaMap.get(testProperty).getClass().isInstance(objectArray), "Check Indexed Property exists");
173
174
175 dynaMap.set(testProperty, index, testString1);
176 assertNotNull(dynaMap.get(testProperty), "Check Indexed Property is not null");
177 assertEquals(objectArray.getClass(), dynaMap.get(testProperty).getClass(), "Check Indexed Property is correct type");
178 assertEquals(testString1, dynaMap.get(testProperty, index), "Check First Indexed Value is correct(a)");
179 assertEquals(testString1, ((String[]) dynaMap.get(testProperty))[index], "Check First Indexed Value is correct(b)");
180 assertEquals(Integer.valueOf(index + 1), Integer.valueOf(((String[]) dynaMap.get(testProperty)).length), "Check Array length is correct");
181
182
183 index += 2;
184 dynaMap.set(testProperty, index, testString2);
185 assertEquals(testString2, dynaMap.get(testProperty, index), "Check Second Indexed Value is correct(a)");
186 assertEquals(testString2, ((String[]) dynaMap.get(testProperty))[index], "Check Second Indexed Value is correct(b)");
187 assertEquals(Integer.valueOf(index + 1), Integer.valueOf(((String[]) dynaMap.get(testProperty)).length), "Check Second Array length is correct");
188 }
189
190
191
192
193 @Test
194 public void testIndexedPrimitiveArray() {
195
196 int index = 3;
197 final int[] primitiveArray = {};
198
199
200 assertNull(dynaMap.getDynaProperty(testProperty), "Check Indexed Property doesn't exist");
201 assertNull(dynaMap.get(testProperty), "Check Indexed Property is null");
202
203
204 dynaMap.add(testProperty, primitiveArray.getClass());
205 assertEquals(primitiveArray.getClass(), dynaMap.getDynaProperty(testProperty).getType(), "Check Indexed Property exists");
206 assertTrue(dynaMap.get(testProperty).getClass().isInstance(primitiveArray), "Check Indexed Property exists");
207
208
209 dynaMap.set(testProperty, index, testInteger1);
210 assertNotNull(dynaMap.get(testProperty), "Check Indexed Property is not null");
211 assertEquals(primitiveArray.getClass(), dynaMap.get(testProperty).getClass(), "Check Indexed Property is correct type");
212 assertEquals(testInteger1, dynaMap.get(testProperty, index), "Check First Indexed Value is correct(a)");
213 assertEquals(testInteger1, Integer.valueOf(((int[]) dynaMap.get(testProperty))[index]), "Check First Indexed Value is correct(b)");
214 assertEquals(Integer.valueOf(index + 1), Integer.valueOf(((int[]) dynaMap.get(testProperty)).length), "Check Array length is correct");
215
216
217 index += 2;
218 dynaMap.set(testProperty, index, testInteger2);
219 assertEquals(testInteger2, dynaMap.get(testProperty, index), "Check Second Indexed Value is correct(a)");
220 assertEquals(testInteger2, Integer.valueOf(((int[]) dynaMap.get(testProperty))[index]), "Check Second Indexed Value is correct(b)");
221 assertEquals(Integer.valueOf(index + 1), Integer.valueOf(((int[]) dynaMap.get(testProperty)).length), "Check Second Array length is correct");
222
223 }
224
225
226
227
228 @Test
229 public void testIndexedPropertyDefault() {
230
231 int index = 3;
232
233
234 assertNull(dynaMap.getDynaProperty(testProperty), "Check Indexed Property doesn't exist");
235 assertNull(dynaMap.get(testProperty), "Check Indexed Property is null");
236 assertNull(dynaMap.get(testProperty, index), "Check Indexed value is null");
237
238
239 dynaMap.set(testProperty, index, testInteger1);
240 assertNotNull(dynaMap.get(testProperty), "Check Indexed Property is not null");
241 assertEquals(ArrayList.class, dynaMap.get(testProperty).getClass(), "Check Indexed Property is correct type");
242 assertEquals(testInteger1, dynaMap.get(testProperty, index), "Check First Indexed Value is correct");
243 assertEquals(Integer.valueOf(index + 1), Integer.valueOf(((ArrayList<?>) dynaMap.get(testProperty)).size()), "Check First Array length is correct");
244
245
246 index += 2;
247 dynaMap.set(testProperty, index, testString1);
248 assertEquals(testString1, dynaMap.get(testProperty, index), "Check Second Indexed Value is correct");
249 assertEquals(Integer.valueOf(index + 1), Integer.valueOf(((ArrayList<?>) dynaMap.get(testProperty)).size()), "Check Second Array length is correct");
250 }
251
252
253
254
255 @Test
256 public void testIndexedPropertyRestricted() {
257
258 final int index = 3;
259
260
261 dynaMap.setRestricted(true);
262 assertTrue(dynaMap.isRestricted(), "Check MutableDynaClass is restricted");
263
264
265 assertNull(dynaMap.getDynaProperty(testProperty), "Check Property doesn't exist");
266 assertNull(dynaMap.get(testProperty), "Check Value is null");
267
268
269 assertThrows(IllegalArgumentException.class, () -> dynaMap.set(testProperty, index, testInteger1));
270 }
271
272
273
274
275 @Test
276 public void testIndexedPropertyUtils() throws Exception {
277
278 final int index = 3;
279 dynaMap.setReturnNull(false);
280
281
282 assertFalse(dynaMap.isDynaProperty(testProperty), "Check Indexed Property doesn't exist");
283 assertNull(dynaMap.get(testProperty), "Check Indexed Property is null");
284 assertNull(dynaMap.get(testProperty, index), "Check Indexed value is null");
285
286 PropertyUtils.setProperty(dynaMap, testProperty + "[" + index + "]", testString1);
287
288 assertEquals(testString1, dynaMap.get(testProperty, index), "Check Indexed Bean Value is correct");
289
290 }
291
292
293
294
295 @Test
296 public void testMappedInvalidType() {
297 dynaMap.set(testProperty, Integer.valueOf(1));
298 assertFalse(dynaMap.getDynaProperty(testProperty).isMapped(), "Check Property is not mapped");
299 assertThrows(IllegalArgumentException.class, () -> dynaMap.set(testProperty, testKey, testInteger1));
300 }
301
302
303
304
305 @Test
306 public void testMappedPropertyDefault() {
307
308
309 assertNull(dynaMap.getDynaProperty(testProperty), "Check Mapped Property doesn't exist");
310 assertNull(dynaMap.get(testProperty), "Check Map is null");
311 assertNull(dynaMap.get(testProperty, testKey), "Check Mapped Value is null");
312
313
314 dynaMap.set(testProperty, testKey, testInteger1);
315 assertEquals(HashMap.class, dynaMap.get(testProperty).getClass(), "Check Mapped Property exists");
316 assertEquals(testInteger1, dynaMap.get(testProperty, testKey), "Check First Mapped Value is correct(a)");
317 assertEquals(testInteger1, ((HashMap<?, ?>) dynaMap.get(testProperty)).get(testKey), "Check First Mapped Value is correct(b)");
318
319
320 dynaMap.set(testProperty, testKey, testInteger2);
321 assertEquals(testInteger2, dynaMap.get(testProperty, testKey), "Check Second Mapped Value is correct(a)");
322 assertEquals(testInteger2, ((HashMap<?, ?>) dynaMap.get(testProperty)).get(testKey), "Check Second Mapped Value is correct(b)");
323 }
324
325
326
327
328 @Test
329 public void testMappedPropertyRestricted() {
330
331
332 dynaMap.setRestricted(true);
333 assertTrue(dynaMap.isRestricted(), "Check MutableDynaClass is restricted");
334
335
336 assertNull(dynaMap.getDynaProperty(testProperty), "Check Property doesn't exist");
337 assertNull(dynaMap.get(testProperty), "Check Value is null");
338
339
340 assertThrows(IllegalArgumentException.class, () -> dynaMap.set(testProperty, testKey, testInteger1));
341 }
342
343
344
345
346 @Test
347 public void testMappedPropertyTreeMap() {
348
349
350 assertNull(dynaMap.getDynaProperty(testProperty), "Check Mapped Property doesn't exist");
351 assertNull(dynaMap.get(testProperty), "Check Map is null");
352
353
354 dynaMap.add(testProperty, TreeMap.class);
355 assertTrue(dynaMap.getDynaProperty(testProperty).isMapped(), "Check Property is mapped");
356 assertEquals(TreeMap.class, dynaMap.getDynaProperty(testProperty).getType(), "Check Property is correct type");
357 assertEquals(TreeMap.class, dynaMap.get(testProperty).getClass(), "Check Mapped Property now exists");
358
359
360 dynaMap.set(testProperty, testKey, testInteger1);
361 assertEquals(TreeMap.class, dynaMap.get(testProperty).getClass(), "Check Mapped Property exists");
362 assertEquals(testInteger1, dynaMap.get(testProperty, testKey), "Check First Mapped Value is correct(a)");
363 assertEquals(testInteger1, ((TreeMap<?, ?>) dynaMap.get(testProperty)).get(testKey), "Check First Mapped Value is correct(b)");
364
365
366 dynaMap.set(testProperty, testKey, testInteger2);
367 assertEquals(testInteger2, dynaMap.get(testProperty, testKey), "Check Second Mapped Value is correct(a)");
368 assertEquals(testInteger2, ((TreeMap<?, ?>) dynaMap.get(testProperty)).get(testKey), "Check Second Mapped Value is correct(b)");
369 }
370
371
372
373
374 @Test
375 public void testMappedPropertyUtils() throws Exception {
376 dynaMap.setReturnNull(false);
377
378 assertFalse(dynaMap.isDynaProperty(testProperty), "Check Mapped Property doesn't exist");
379 assertNull(dynaMap.get(testProperty), "Check Map is null");
380 assertNull(dynaMap.get(testProperty, testKey), "Check Mapped Value is null");
381
382 PropertyUtils.setProperty(dynaMap, testProperty + "(" + testKey + ")", testString1);
383
384 assertEquals(testString1, dynaMap.get(testProperty, testKey), "Check Mapped Bean Value is correct");
385 }
386
387
388
389
390 @Test
391 public void testNewInstance() {
392
393
394
395 final LazyDynaMap orig = new LazyDynaMap(new TreeMap<>());
396 orig.set("indexProp", 0, "indexVal0");
397 orig.set("indexProp", 1, "indexVal1");
398 assertEquals(2, ((List<?>) orig.get("indexProp")).size(), "Index prop size");
399
400 final LazyDynaMap newOne = (LazyDynaMap) orig.newInstance();
401 final Map<String, Object> newMap = newOne.getMap();
402 assertEquals(TreeMap.class, newMap.getClass(), "Check Map type");
403
404 final ArrayList<?> indexProp = (ArrayList<?>) newMap.get("indexProp");
405 assertNotNull(indexProp, "Indexed Prop missing");
406 assertEquals(0, indexProp.size(), "Index prop size");
407 }
408
409
410
411
412 @Test
413 public void testSimpleProperty() {
414
415
416 assertNull(dynaMap.getDynaProperty(testProperty), "Check Property doesn't exist");
417 assertNull(dynaMap.get(testProperty), "Check Value is null");
418
419
420 dynaMap.set(testProperty, testInteger1);
421 assertEquals(testInteger1, dynaMap.get(testProperty), "Check First Value is correct");
422 assertEquals(Integer.class, dynaMap.getDynaProperty(testProperty).getType(), "Check Property type is correct");
423
424
425 dynaMap.set(testProperty, testInteger2);
426 assertEquals(testInteger2, dynaMap.get(testProperty), "Check Second Value is correct");
427
428
429 dynaMap.set(testProperty, testString1);
430 assertEquals(testString1, dynaMap.get(testProperty), "Check Third Value is correct");
431
432 }
433
434
435
436
437 @Test
438 public void testSimplePropertyRestricted() {
439
440 dynaMap.setRestricted(true);
441 assertTrue(dynaMap.isRestricted(), "Check MutableDynaClass is restricted");
442
443 assertNull(dynaMap.getDynaProperty(testProperty), "Check Property doesn't exist");
444 assertNull(dynaMap.get(testProperty), "Check Value is null");
445
446 assertThrows(IllegalArgumentException.class, () -> dynaMap.set(testProperty, testString1));
447 }
448
449 }