1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package com.codebox.bean;
16
17 import java.io.ByteArrayInputStream;
18 import java.io.ByteArrayOutputStream;
19 import java.io.NotSerializableException;
20 import java.io.ObjectInputStream;
21 import java.io.ObjectOutputStream;
22
23 import org.junit.jupiter.api.Assertions;
24 import org.junit.jupiter.api.BeforeEach;
25 import org.junit.jupiter.api.Test;
26 import org.powermock.reflect.Whitebox;
27
28
29
30
31 class JavaBeanTesterTest {
32
33
34 private SampleBean sampleBean;
35
36
37 private SampleBean expectedBean;
38
39
40
41
42 @BeforeEach
43 void init() {
44 this.sampleBean = new SampleBean(null);
45 this.expectedBean = new SampleBean(null);
46 }
47
48
49
50
51 @Test
52 void loadFullBean() {
53 JavaBeanTester.builder(SampleBean.class).loadData().testInstance(this.sampleBean);
54 Assertions.assertNotNull(this.sampleBean.getDoubleWrapper());
55 }
56
57
58
59
60 @Test
61 void loadFullBeanEquals() {
62 JavaBeanTester.builder(SampleBean.class).loadData().testInstance(this.sampleBean);
63 JavaBeanTester.builder(SampleBean.class).loadData().testInstance(this.expectedBean);
64
65 this.sampleBean.setSampleDepthBean(new SampleDepthBean());
66 this.expectedBean.setSampleDepthBean(new SampleDepthBean());
67 this.sampleBean.setEmptyBean(new EmptyBean());
68 this.expectedBean.setEmptyBean(new EmptyBean());
69 JavaBeanTester.builder(SampleDepthBean.class).loadData().testInstance(this.sampleBean.getSampleDepthBean());
70 JavaBeanTester.builder(SampleDepthBean.class).loadData().testInstance(this.expectedBean.getSampleDepthBean());
71
72 JavaBeanTester.builder(SampleBean.class).loadData().testEquals(this.sampleBean, this.expectedBean);
73 }
74
75
76
77
78 @Test
79 void loadFullBeanEqualsShort() {
80 JavaBeanTester.builder(SampleBean.class).loadData().testInstance(this.sampleBean);
81 JavaBeanTester.builder(SampleBean.class).loadData().testInstance(this.expectedBean);
82 JavaBeanTester.builder(SampleBean.class).loadData().testEquals(this.sampleBean, this.expectedBean);
83 }
84
85
86
87
88 @Test
89 void loadFullBeanEqualsSkipUnderlying() {
90 JavaBeanTester.builder(SampleBean.class).testInstance(this.sampleBean);
91 JavaBeanTester.builder(SampleBean.class).testInstance(this.expectedBean);
92 JavaBeanTester.builder(SampleBean.class).testEquals(this.sampleBean, this.expectedBean);
93 }
94
95
96
97
98 @Test
99 void loadFullBeanSkipUnderlyingData() {
100 JavaBeanTester.builder(SampleBean.class).testInstance(this.sampleBean);
101 Assertions.assertNotNull(this.sampleBean.getDoubleWrapper());
102 }
103
104
105
106
107 @Test
108 void loadPartialBeanEquals() {
109 JavaBeanTester.builder(SampleBean.class).loadData().testInstance(this.sampleBean);
110 JavaBeanTester.builder(SampleBean.class).loadData().testInstance(this.expectedBean);
111
112 this.sampleBean.setSampleDepthBean(new SampleDepthBean());
113 this.expectedBean.setSampleDepthBean(new SampleDepthBean());
114 JavaBeanTester.builder(SampleDepthBean.class).loadData().testInstance(this.sampleBean.getSampleDepthBean());
115 JavaBeanTester.builder(SampleDepthBean.class).loadData().testInstance(this.expectedBean.getSampleDepthBean());
116
117 JavaBeanTester.builder(SampleBean.class).loadData().testEquals(this.sampleBean, this.expectedBean);
118 }
119
120
121
122
123 @Test
124 void loadSkipBeanProperties() {
125 JavaBeanTester.builder(SampleBean.class).loadData().skip("string").testInstance(this.sampleBean);
126 Assertions.assertNotNull(this.sampleBean.getDoubleWrapper());
127 Assertions.assertNull(this.sampleBean.getString());
128 }
129
130
131
132
133 @Test
134 void testFullBean() {
135 JavaBeanTester.builder(SampleBean.class).checkEquals().loadData().test();
136 }
137
138
139
140
141 @Test
142 void testFullBeanWithExtension() {
143 JavaBeanTester.builder(SampleBean.class, SampleExtensionBean.class).checkEquals().loadData().test();
144 }
145
146
147
148
149 @Test
150 void testFullBeanNullExt() {
151 JavaBeanTester.builder(SampleBean.class).checkEquals().loadData().test();
152 JavaBeanTester.builder(SampleValueObject.class).checkEquals().loadData().test();
153 }
154
155
156
157
158 @Test
159 void testFullBeanSkipUnderlyingData() {
160 JavaBeanTester.builder(SampleBean.class).checkEquals().test();
161 }
162
163
164
165
166 @Test
167 void testFullBeanSkipUnderlyingDataWithExtension() {
168 JavaBeanTester.builder(SampleBean.class, SampleExtensionBean.class).checkEquals().test();
169 }
170
171
172
173
174 @Test
175 void testSkipBeanProperties() {
176 JavaBeanTester.builder(SampleBean.class).checkEquals().loadData().skip("string").test();
177 }
178
179
180
181
182 @Test
183 void testSkipBeanPropertiesWithExtension() {
184 JavaBeanTester.builder(SampleBean.class, SampleExtensionBean.class).checkEquals().loadData().skip("string")
185 .test();
186 }
187
188
189
190
191 @Test
192 void testSkipBeanPropertiesNull() {
193 JavaBeanTester.builder(SampleBean.class).checkEquals().loadData().skip((String[]) null).test();
194 }
195
196
197
198
199 @Test
200 void testSkipBeanPropertiesNullWithExtension() {
201 JavaBeanTester.builder(SampleBean.class, SampleExtensionBean.class).checkEquals().loadData()
202 .skip((String[]) null).test();
203 }
204
205
206
207
208 @Test
209 void testSkipCanEquals() {
210 JavaBeanTester.builder(SampleBean.class).loadData().test();
211 }
212
213
214
215
216 @Test
217 void testSkipCanEqualsWithExtension() {
218 JavaBeanTester.builder(SampleBean.class, SampleExtensionBean.class).loadData().test();
219 }
220
221
222
223
224 @Test
225 void testSkipCanEqualsFalse() {
226 JavaBeanTester.builder(SampleBean.class).checkEquals(false).checkSerializable(false).loadData(false).test();
227 }
228
229
230
231
232 @Test
233 void testSkipCanEqualsFalseWithExtension() {
234 JavaBeanTester.builder(SampleBean.class, SampleExtensionBean.class).checkEquals(false).checkSerializable(false)
235 .loadData(false).test();
236 }
237
238
239
240
241 @Test
242 void testSerializable() {
243 JavaBeanTester.builder(SerializableBean.class).checkSerializable().test();
244 }
245
246
247
248
249 @Test
250 void testNonSerializableInternallyFails() {
251 JavaBeanTester.builder(NonSerializableBean.class).checkSerializable().skipStrictSerializable().test();
252 }
253
254
255
256
257
258
259
260 @Test
261 void testNonSerializable() throws Exception {
262 final NonDeserializableBean bean = new NonDeserializableBean();
263 bean.getList().add(new Object());
264
265 Assertions.assertThrows(NotSerializableException.class, () -> {
266 JavaBeanTesterTest.serialize(bean);
267 });
268 }
269
270
271
272
273 @Test
274 void testClear() {
275 JavaBeanTester.builder(SerializableBean.class).checkClear().test();
276 }
277
278
279
280
281 @Test
282 void testClearFalse() {
283 JavaBeanTester.builder(SerializableBean.class).checkClear(false).test();
284 }
285
286
287
288
289 @Test
290 void testConstructor() {
291 JavaBeanTester.builder(SerializableBean.class).checkConstructor().test();
292 }
293
294
295
296
297 @Test
298 void testConstructorFalse() {
299 JavaBeanTester.builder(SerializableBean.class).checkConstructor(false).test();
300 }
301
302
303
304
305 @Test
306 void testMultiConstructor() {
307 JavaBeanTester.builder(MultiConstructorBean.class).test();
308 }
309
310
311
312
313
314 @Test
315 void testTemporarySingleMode() {
316 final JavaBeanTesterBuilder<String, Object> builder = new JavaBeanTesterBuilder<>(String.class);
317 final JavaBeanTesterWorker<String, Object> worker = Whitebox.getInternalState(builder, "worker");
318 Assertions.assertEquals(String.class, worker.getClazz());
319 }
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334 @SuppressWarnings("unchecked")
335 private static <T> T serialize(final T object) throws Exception {
336 final ByteArrayOutputStream baos = new ByteArrayOutputStream();
337 new ObjectOutputStream(baos).writeObject(object);
338
339 final ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
340 return (T) new ObjectInputStream(bais).readObject();
341 }
342
343 }