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.assertNotNull;
23 import static org.junit.jupiter.api.Assertions.assertNull;
24 import static org.junit.jupiter.api.Assertions.assertThrows;
25 import static org.junit.jupiter.api.Assertions.assertTrue;
26
27 import java.lang.reflect.Constructor;
28 import java.lang.reflect.Modifier;
29
30 import org.junit.jupiter.api.AfterEach;
31 import org.junit.jupiter.api.BeforeEach;
32 import org.junit.jupiter.api.Test;
33
34
35
36
37
38
39 public class ConstructorUtilsTest {
40
41
42
43
44 @BeforeEach
45 public void setUp() throws Exception {
46 }
47
48
49
50
51 @AfterEach
52 public void tearDown() throws Exception {
53 }
54
55 @Test
56 public void testGetAccessibleConstructor() throws Exception {
57 {
58 final Constructor<?> ctor = ConstructorUtils.getAccessibleConstructor(TestBean.class, String.class);
59 assertNotNull(ctor);
60 assertTrue(Modifier.isPublic(ctor.getModifiers()));
61 }
62 {
63 final Constructor<?> ctor = ConstructorUtils.getAccessibleConstructor(TestBean.class, Integer.class);
64 assertNotNull(ctor);
65 assertTrue(Modifier.isPublic(ctor.getModifiers()));
66 }
67 {
68 final Constructor<?> ctor = ConstructorUtils.getAccessibleConstructor(TestBean.class, Integer.TYPE);
69 assertNull(ctor);
70 }
71 }
72
73 @Test
74 public void testGetAccessibleConstructorWithConstructorArg() throws Exception {
75 {
76 final Class<?>[] types = { Integer.class };
77 final Constructor<?> c1 = TestBean.class.getConstructor(types);
78 final Constructor<?> ctor = ConstructorUtils.getAccessibleConstructor(c1);
79 assertNotNull(ctor);
80 assertTrue(Modifier.isPublic(ctor.getModifiers()));
81 }
82 {
83 final Class<?>[] types = { Integer.class };
84 final Constructor<?> c1 = TestBean.class.getDeclaredConstructor(types);
85 final Constructor<?> ctor = ConstructorUtils.getAccessibleConstructor(c1);
86 assertNotNull(ctor);
87 assertTrue(Modifier.isPublic(ctor.getModifiers()));
88 }
89 {
90 final Class<?>[] types = { Integer.TYPE };
91 final Constructor<?> c1 = TestBean.class.getDeclaredConstructor(types);
92 final Constructor<?> ctor = ConstructorUtils.getAccessibleConstructor(c1);
93 assertNull(ctor);
94 }
95 }
96
97 @Test
98 public void testGetAccessibleConstructorWithTypeArray() throws Exception {
99 {
100 final Class<?>[] types = { Boolean.TYPE, String.class };
101 final Constructor<?> ctor = ConstructorUtils.getAccessibleConstructor(TestBean.class, types);
102 assertNotNull(ctor);
103 assertTrue(Modifier.isPublic(ctor.getModifiers()));
104 }
105 {
106 final Class<?>[] types = { Boolean.TYPE, Boolean.TYPE, String.class };
107 final Constructor<?> ctor = ConstructorUtils.getAccessibleConstructor(TestBean.class, types);
108 assertNull(ctor);
109 }
110 }
111
112 @Test
113 public void testInvokeConstructor() throws Exception {
114 {
115 final Object obj = ConstructorUtils.invokeConstructor(TestBean.class, "TEST");
116 assertNotNull(obj);
117 assertInstanceOf(TestBean.class, obj);
118 assertEquals("TEST", ((TestBean) obj).getStringProperty());
119 }
120 {
121 final Object obj = ConstructorUtils.invokeConstructor(TestBean.class, Float.valueOf(17.3f));
122 assertNotNull(obj);
123 assertInstanceOf(TestBean.class, obj);
124 assertEquals(17.3f, ((TestBean) obj).getFloatProperty(), 0.0f);
125 }
126 }
127
128 @Test
129 public void testInvokeConstructorNull() throws Exception {
130 final Object obj = ConstructorUtils.invokeConstructor(TestBean.class, (Object) null);
131 assertNotNull(obj);
132 assertInstanceOf(TestBean.class, obj);
133 }
134
135 @Test
136 public void testInvokeConstructorWithArgArray() throws Exception {
137 final Object[] args = { Float.valueOf(17.3f), "TEST" };
138 final Object obj = ConstructorUtils.invokeConstructor(TestBean.class, args);
139 assertNotNull(obj);
140 assertInstanceOf(TestBean.class, obj);
141 assertEquals(17.3f, ((TestBean) obj).getFloatProperty(), 0.0f);
142 assertEquals("TEST", ((TestBean) obj).getStringProperty());
143 }
144
145 @Test
146 public void testInvokeConstructorWithTypeArray() throws Exception {
147 {
148 final Object[] args = { Boolean.TRUE, "TEST" };
149 final Class<?>[] types = { Boolean.TYPE, String.class };
150 final Object obj = ConstructorUtils.invokeConstructor(TestBean.class, args, types);
151 assertNotNull(obj);
152 assertInstanceOf(TestBean.class, obj);
153 assertTrue(((TestBean) obj).getBooleanProperty());
154 assertEquals("TEST", ((TestBean) obj).getStringProperty());
155 }
156 {
157 final Object[] args = { Boolean.TRUE, "TEST" };
158 final Class<?>[] types = { Boolean.class, String.class };
159 final Object obj = ConstructorUtils.invokeConstructor(TestBean.class, args, types);
160 assertNotNull(obj);
161 assertInstanceOf(TestBean.class, obj);
162 assertTrue(((TestBean) obj).isBooleanSecond());
163 assertEquals("TEST", ((TestBean) obj).getStringProperty());
164 }
165 }
166
167 @Test
168 public void testInvokeExactConstructor() throws Exception {
169 {
170 final Object obj = ConstructorUtils.invokeExactConstructor(TestBean.class, "TEST");
171 assertNotNull(obj);
172 assertInstanceOf(TestBean.class, obj);
173 assertEquals("TEST", ((TestBean) obj).getStringProperty());
174 }
175 assertThrows(NoSuchMethodException.class, () -> ConstructorUtils.invokeExactConstructor(TestBean.class, Float.valueOf(17.3f)));
176 {
177 final Object obj = ConstructorUtils.invokeExactConstructor(TestBean.class, Boolean.TRUE);
178 assertNotNull(obj);
179 assertInstanceOf(TestBean.class, obj);
180 assertTrue(((TestBean) obj).isBooleanSecond());
181 }
182 }
183
184 @Test
185 public void testInvokeExactConstructorWithArgArray() throws Exception {
186 {
187 final Object[] args = { Float.valueOf(17.3f), "TEST" };
188 assertThrows(NoSuchMethodException.class, () -> ConstructorUtils.invokeExactConstructor(TestBean.class, args));
189 }
190 {
191 final Object[] args = { Boolean.TRUE, "TEST" };
192 final Object obj = ConstructorUtils.invokeExactConstructor(TestBean.class, args);
193 assertNotNull(obj);
194 assertInstanceOf(TestBean.class, obj);
195 assertTrue(((TestBean) obj).isBooleanSecond());
196 assertEquals("TEST", ((TestBean) obj).getStringProperty());
197 }
198 }
199
200 @Test
201 public void testInvokeExactConstructorWithNull() throws Exception {
202 final Object obj = ConstructorUtils.invokeExactConstructor(TestBean.class, (Object) null);
203 assertNotNull(obj);
204 assertInstanceOf(TestBean.class, obj);
205 }
206
207 @Test
208 public void testInvokeExactConstructorWithTypeArray() throws Exception {
209 {
210 final Object[] args = { Boolean.TRUE, "TEST" };
211 final Class<?>[] types = { Boolean.TYPE, String.class };
212 final Object obj = ConstructorUtils.invokeExactConstructor(TestBean.class, args, types);
213 assertNotNull(obj);
214 assertInstanceOf(TestBean.class, obj);
215 assertTrue(((TestBean) obj).getBooleanProperty());
216 assertEquals("TEST", ((TestBean) obj).getStringProperty());
217 }
218 {
219 final Object[] args = { Boolean.TRUE, "TEST" };
220 final Class<?>[] types = { Boolean.class, String.class };
221 final Object obj = ConstructorUtils.invokeExactConstructor(TestBean.class, args, types);
222 assertNotNull(obj);
223 assertInstanceOf(TestBean.class, obj);
224 assertTrue(((TestBean) obj).isBooleanSecond());
225 assertEquals("TEST", ((TestBean) obj).getStringProperty());
226 }
227 {
228 final Object[] args = { Float.valueOf(17.3f), "TEST" };
229 final Class<?>[] types = { Float.TYPE, String.class };
230 final Object obj = ConstructorUtils.invokeExactConstructor(TestBean.class, args, types);
231 assertNotNull(obj);
232 assertInstanceOf(TestBean.class, obj);
233 assertEquals(17.3f, ((TestBean) obj).getFloatProperty(), 0.0f);
234 assertEquals("TEST", ((TestBean) obj).getStringProperty());
235 }
236 {
237 final Object[] args = { Float.valueOf(17.3f), "TEST" };
238 final Class<?>[] types = { Float.class, String.class };
239 assertThrows(NoSuchMethodException.class, () -> ConstructorUtils.invokeExactConstructor(TestBean.class, args, types));
240 }
241 }
242
243 }