1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.commons.beanutils2;
19
20 import static org.junit.jupiter.api.Assertions.assertEquals;
21 import static org.junit.jupiter.api.Assertions.assertInstanceOf;
22 import static org.junit.jupiter.api.Assertions.assertNotSame;
23 import static org.junit.jupiter.api.Assertions.assertSame;
24 import static org.junit.jupiter.api.Assertions.assertThrows;
25
26 import java.io.ByteArrayInputStream;
27 import java.io.ByteArrayOutputStream;
28 import java.io.IOException;
29 import java.io.NotSerializableException;
30 import java.io.ObjectInputStream;
31 import java.io.ObjectOutputStream;
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
43 public class WrapDynaBeanTest extends BasicDynaBeanTest {
44
45
46
47
48 private void checkSimplePropertyAccess() {
49
50 assertThrows(IllegalArgumentException.class, () -> bean.get("invalidProperty"));
51
52
53 assertThrows(IllegalArgumentException.class, () -> bean.set("invalidProperty", "XYZ"));
54
55
56 String testValue = "Original Value";
57 final String testProperty = "stringProperty";
58 final TestBean instance = (TestBean) ((WrapDynaBean) bean).getInstance();
59 instance.setStringProperty(testValue);
60 assertEquals(testValue, instance.getStringProperty(), "Check String property");
61
62
63 testValue = "Some new value";
64 bean.set(testProperty, testValue);
65 assertEquals(testValue, instance.getStringProperty(), "Test Set");
66 assertEquals(testValue, bean.get(testProperty), "Test Get");
67 }
68
69
70
71
72 private Object serializeDeserialize(final Object target, final String text) throws IOException, ClassNotFoundException {
73
74 final ByteArrayOutputStream baos = new ByteArrayOutputStream();
75 try (final ObjectOutputStream oos = new ObjectOutputStream(baos)) {
76 oos.writeObject(target);
77 oos.flush();
78 }
79
80 Object result = null;
81 try (final ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
82 final ObjectInputStream ois = new ObjectInputStream(bais)) {
83 result = ois.readObject();
84 }
85 return result;
86 }
87
88
89
90
91 @Override
92 @BeforeEach
93 public void setUp() throws Exception {
94 bean = new WrapDynaBean(new TestBean());
95 }
96
97
98
99
100 @Override
101 @AfterEach
102 public void tearDown() {
103 bean = null;
104 }
105
106
107 @Test
108 public void testGetInstance() {
109 final AlphaBean alphaBean = new AlphaBean("Now On Air... John Peel");
110 final WrapDynaBean dynaBean = new WrapDynaBean(alphaBean);
111 final Object wrappedInstance = dynaBean.getInstance();
112 assertInstanceOf(AlphaBean.class, wrappedInstance, "Object type is AlphaBean");
113 final AlphaBean wrappedAlphaBean = (AlphaBean) wrappedInstance;
114 assertSame(wrappedAlphaBean, alphaBean, "Same Object");
115 }
116
117
118
119
120 @Test
121 public void testGetWrapDynaClassFromCache() {
122 final WrapDynaClass clazz = WrapDynaClass.createDynaClass(TestBean.class);
123 assertSame(clazz, WrapDynaClass.createDynaClass(TestBean.class), "Instance not cached");
124 }
125
126
127
128
129 @Test
130 public void testGetWrapDynaClassFromCacheWithPropUtils() {
131 final WrapDynaClass clazz = WrapDynaClass.createDynaClass(TestBean.class);
132 final PropertyUtilsBean pu = new PropertyUtilsBean();
133 final WrapDynaClass clazz2 = WrapDynaClass.createDynaClass(TestBean.class, pu);
134 assertNotSame(clazz, clazz2, "Got same instance from cache");
135 }
136
137
138
139
140 @Test
141 public void testIndexedProperties() {
142
143
144 assertThrows(IllegalArgumentException.class, () -> bean.get("invalidProperty", 0));
145
146
147 assertThrows(IllegalArgumentException.class, () -> bean.set("invalidProperty", 0, "XYZ"));
148
149
150 String testValue = "Original Value";
151 final String testProperty = "stringIndexed";
152 final TestBean instance = (TestBean) ((WrapDynaBean) bean).getInstance();
153 instance.setStringIndexed(0, testValue);
154 assertEquals(testValue, instance.getStringIndexed(0), "Check String property");
155
156
157 testValue = "Some new value";
158 bean.set(testProperty, 0, testValue);
159 assertEquals(testValue, instance.getStringIndexed(0), "Test Set");
160 assertEquals(testValue, bean.get(testProperty, 0), "Test Get");
161 }
162
163
164
165
166 @Test
167 public void testInitWithDynaClass() {
168 final WrapDynaClass clazz = WrapDynaClass.createDynaClass(TestBean.class);
169 bean = new WrapDynaBean(new TestBean(), clazz);
170 assertSame(clazz, bean.getDynaClass(), "Wrong DynaClass");
171 checkSimplePropertyAccess();
172 }
173
174
175
176
177 @Test
178 public void testIntrospectionWithCustomPropUtils() {
179 final PropertyUtilsBean pu = new PropertyUtilsBean();
180 pu.addBeanIntrospector(new FluentPropertyBeanIntrospector());
181 final WrapDynaClass dynaClass = WrapDynaClass.createDynaClass(FluentIntrospectionTestBean.class, pu);
182 final FluentIntrospectionTestBean obj = new FluentIntrospectionTestBean();
183 bean = new WrapDynaBean(obj, dynaClass);
184 bean.set("fluentProperty", "testvalue");
185 assertEquals("testvalue", obj.getStringProperty(), "Property not set");
186 }
187
188
189
190
191 @Override
192 @Test
193 public void testMappedContains() {
194 assertThrows(UnsupportedOperationException.class, () -> bean.contains("mappedProperty", "First Key"));
195 assertThrows(UnsupportedOperationException.class, () -> bean.contains("mappedProperty", "Unknown Key"));
196 }
197
198
199
200
201 @Override
202 @Test
203 public void testMappedRemove() {
204
205 assertThrows(UnsupportedOperationException.class, () -> bean.contains("mappedProperty", "First Key"));
206 assertThrows(UnsupportedOperationException.class, () -> bean.remove("mappedProperty", "First Key"));
207
208 assertThrows(UnsupportedOperationException.class, () -> bean.contains("mappedProperty", "Unknown Key"));
209 assertThrows(UnsupportedOperationException.class, () -> bean.remove("mappedProperty", "Unknown Key"));
210
211 }
212
213
214 @Test
215 public void testNewInstance() throws Exception {
216 final WrapDynaClass dynaClass = WrapDynaClass.createDynaClass(AlphaBean.class);
217 final Object createdInstance = dynaClass.newInstance();
218 assertInstanceOf(WrapDynaBean.class, createdInstance, "Object type is WrapDynaBean");
219 final WrapDynaBean dynaBean = (WrapDynaBean) createdInstance;
220 assertInstanceOf(AlphaBean.class, dynaBean.getInstance(), "Object type is AlphaBean");
221 }
222
223
224
225
226 @Override
227 @Test
228 public void testNotSerializableException() throws Exception {
229
230 final WrapDynaBean origBean = new WrapDynaBean(new TestBean());
231 final Integer newValue = Integer.valueOf(789);
232 assertEquals(Integer.valueOf(123), origBean.get("intProperty"), "origBean default");
233 origBean.set("intProperty", newValue);
234 assertEquals(newValue, origBean.get("intProperty"), "origBean new value");
235
236 assertThrows(NotSerializableException.class, () -> serializeDeserialize(origBean, "First Test"));
237 }
238
239
240
241
242 @Test
243 public void testSimpleProperties() {
244
245 checkSimplePropertyAccess();
246
247 }
248 }