View Javadoc
1   /*
2    * SPDX-License-Identifier: Apache-2.0
3    * See LICENSE file for details.
4    *
5    * Copyright 2012-2026 hazendaz
6    *
7    * Portions of initial baseline code (getter/setter test) by Rob Dawson (CodeBox)
8    */
9   package com.codebox.bean;
10  
11  import com.codebox.enums.CheckClear;
12  import com.codebox.enums.CheckConstructor;
13  import com.codebox.enums.CheckEquals;
14  import com.codebox.enums.CheckSerialize;
15  import com.codebox.enums.LoadData;
16  import com.codebox.enums.SkipStrictSerialize;
17  import com.codebox.instance.ConstructorInstance;
18  
19  import java.util.Arrays;
20  
21  /**
22   * The Class JavaBeanTesterBuilder.
23   *
24   * @param <T>
25   *            the generic type
26   * @param <E>
27   *            the element type
28   */
29  public class JavaBeanTesterBuilder<T, E> {
30  
31      /** The worker. */
32      private final JavaBeanTesterWorker<T, E> worker;
33  
34      /**
35       * Instantiates a new java bean tester builder.
36       *
37       * @param clazz
38       *            the clazz
39       */
40      JavaBeanTesterBuilder(final Class<T> clazz) {
41          this.worker = new JavaBeanTesterWorker<>(clazz);
42      }
43  
44      /**
45       * Instantiates a new java bean tester builder.
46       *
47       * @param clazz
48       *            the clazz
49       * @param extension
50       *            the extension
51       */
52      JavaBeanTesterBuilder(final Class<T> clazz, final Class<E> extension) {
53          this.worker = new JavaBeanTesterWorker<>(clazz, extension);
54      }
55  
56      /**
57       * Check Clear.
58       *
59       * @return the java bean tester builder
60       */
61      public JavaBeanTesterBuilder<T, E> checkClear() {
62          return this.checkClear(true);
63      }
64  
65      /**
66       * Check Clear.
67       *
68       * @param value
69       *            the value
70       *
71       * @return the java bean tester builder
72       */
73      public JavaBeanTesterBuilder<T, E> checkClear(final boolean value) {
74          this.worker.setCheckClear(value ? CheckClear.ON : CheckClear.OFF);
75          return this;
76      }
77  
78      /**
79       * Check Constructor.
80       *
81       * @return the java bean tester builder
82       */
83      public JavaBeanTesterBuilder<T, E> checkConstructor() {
84          return this.checkConstructor(true);
85      }
86  
87      /**
88       * Check Constructor.
89       *
90       * @param value
91       *            the value
92       *
93       * @return the java bean tester builder
94       */
95      public JavaBeanTesterBuilder<T, E> checkConstructor(final boolean value) {
96          this.worker.setCheckConstructor(value ? CheckConstructor.ON : CheckConstructor.OFF);
97          return this;
98      }
99  
100     /**
101      * Check equals.
102      *
103      * @return the java bean tester builder
104      */
105     public JavaBeanTesterBuilder<T, E> checkEquals() {
106         return this.checkEquals(true);
107     }
108 
109     /**
110      * Check equals.
111      *
112      * @param value
113      *            the value
114      *
115      * @return the java bean tester builder
116      */
117     public JavaBeanTesterBuilder<T, E> checkEquals(final boolean value) {
118         this.worker.setCheckEquals(value ? CheckEquals.ON : CheckEquals.OFF);
119         return this;
120     }
121 
122     /**
123      * Check Serializable.
124      *
125      * @return the java bean tester builder
126      */
127     public JavaBeanTesterBuilder<T, E> checkSerializable() {
128         return this.checkSerializable(true);
129     }
130 
131     /**
132      * Check Serializable.
133      *
134      * @param value
135      *            the value
136      *
137      * @return the java bean tester builder
138      */
139     public JavaBeanTesterBuilder<T, E> checkSerializable(final boolean value) {
140         this.worker.setCheckSerializable(value ? CheckSerialize.ON : CheckSerialize.OFF);
141         return this;
142     }
143 
144     /**
145      * Load data.
146      *
147      * @return the java bean tester builder
148      */
149     public JavaBeanTesterBuilder<T, E> loadData() {
150         return this.loadData(true);
151     }
152 
153     /**
154      * Load data.
155      *
156      * @param value
157      *            the value
158      *
159      * @return the java bean tester builder
160      */
161     public JavaBeanTesterBuilder<T, E> loadData(final boolean value) {
162         this.worker.setLoadData(value ? LoadData.ON : LoadData.OFF);
163         return this;
164     }
165 
166     /**
167      * Skip Strict Serializable is intended to relax strict check on serializable objects. For complex objects, strict
168      * checking will result in issues with equals check. Testing has shown this to be generally not a normal use case of
169      * javabean tester as it is normally used with POJOs only. In such a case, caller will get an error and if there is
170      * not actually a code problem they should turn this skip on.
171      *
172      * @return the java bean tester builder
173      */
174     public JavaBeanTesterBuilder<T, E> skipStrictSerializable() {
175         this.worker.setSkipStrictSerializable(SkipStrictSerialize.ON);
176         return this;
177     }
178 
179     /**
180      * Skip.
181      *
182      * @param propertyNames
183      *            the property names
184      *
185      * @return the java bean tester builder
186      */
187     public JavaBeanTesterBuilder<T, E> skip(final String... propertyNames) {
188         if (propertyNames != null) {
189             this.worker.getSkipThese().addAll(Arrays.asList(propertyNames));
190         }
191         return this;
192     }
193 
194     /**
195      * Test.
196      */
197     public void test() {
198         this.worker.test();
199     }
200 
201     /**
202      * Private Constructor Test.
203      */
204     public void testPrivateConstructor() {
205         ConstructorInstance.inaccessible(this.worker.getClazz());
206     }
207 
208     /**
209      * Tests the equals/hashCode/toString methods of the specified class.
210      */
211     public void testObjectMethods() {
212         this.worker.equalsHashCodeToStringSymmetricTest();
213     }
214 
215     /**
216      * Getter Setter Tests.
217      *
218      * @param instance
219      *            the instance of class under test.
220      */
221     public void testInstance(final T instance) {
222         this.worker.getterSetterTests(instance);
223     }
224 
225     /**
226      * Test equals.
227      *
228      * @param instance
229      *            the instance
230      * @param expected
231      *            the expected
232      */
233     public void testEquals(final T instance, final T expected) {
234         this.worker.equalsTests(instance, expected);
235     }
236 
237 }