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