1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.configuration2.builder.combined;
18
19 import static org.junit.jupiter.api.Assertions.assertEquals;
20 import static org.junit.jupiter.api.Assertions.assertFalse;
21 import static org.junit.jupiter.api.Assertions.assertNotNull;
22 import static org.junit.jupiter.api.Assertions.assertNotSame;
23 import static org.junit.jupiter.api.Assertions.assertNull;
24 import static org.junit.jupiter.api.Assertions.assertSame;
25 import static org.junit.jupiter.api.Assertions.assertThrows;
26 import static org.junit.jupiter.api.Assertions.assertTrue;
27 import static org.mockito.Mockito.mock;
28 import static org.mockito.Mockito.verify;
29
30 import java.util.Collections;
31 import java.util.HashMap;
32 import java.util.Map;
33
34 import org.apache.commons.configuration2.ConfigurationAssert;
35 import org.apache.commons.configuration2.XMLConfiguration;
36 import org.apache.commons.configuration2.beanutils.BeanHelper;
37 import org.apache.commons.configuration2.builder.BasicBuilderParameters;
38 import org.apache.commons.configuration2.builder.BasicConfigurationBuilder;
39 import org.apache.commons.configuration2.builder.BuilderParameters;
40 import org.apache.commons.configuration2.builder.ConfigurationBuilder;
41 import org.apache.commons.configuration2.builder.DefaultParametersHandler;
42 import org.apache.commons.configuration2.builder.DefaultParametersManager;
43 import org.apache.commons.configuration2.builder.XMLBuilderParametersImpl;
44 import org.apache.commons.configuration2.builder.fluent.FileBasedBuilderParameters;
45 import org.junit.jupiter.api.Test;
46
47
48
49
50 public class TestCombinedBuilderParametersImpl {
51
52
53
54
55
56
57 @SuppressWarnings("unchecked")
58 private static DefaultParametersHandler<BuilderParameters> createDefaultsHandlerMock() {
59 return mock(DefaultParametersHandler.class);
60 }
61
62
63
64
65 @Test
66 void testClone() {
67 final CombinedBuilderParametersImpl params = new CombinedBuilderParametersImpl();
68 params.setBasePath("some base path");
69 final XMLBuilderParametersImpl defParams = new XMLBuilderParametersImpl();
70 defParams.setSystemID("someSysID");
71 params.setDefinitionBuilderParameters(defParams);
72 final CombinedBuilderParametersImpl clone = params.clone();
73 assertEquals(params.getBasePath(), clone.getBasePath());
74 assertNotSame(params.getDefinitionBuilderParameters(), clone.getDefinitionBuilderParameters());
75 assertEquals(params.getDefinitionBuilderParameters().getParameters().get("systemID"),
76 clone.getDefinitionBuilderParameters().getParameters().get("systemID"));
77 }
78
79
80
81
82 @Test
83 void testFromParametersCreate() {
84 final CombinedBuilderParametersImpl params = CombinedBuilderParametersImpl.fromParameters(new HashMap<>(), true);
85 assertNotNull(params);
86 assertNull(params.getDefinitionBuilder());
87 }
88
89
90
91
92 @Test
93 void testFromParametersExisting() {
94 final CombinedBuilderParametersImpl params = new CombinedBuilderParametersImpl();
95 final Map<String, Object> map = params.getParameters();
96 assertSame(params, CombinedBuilderParametersImpl.fromParameters(map));
97 }
98
99
100
101
102 @Test
103 void testFromParametersNotFound() {
104 assertNull(CombinedBuilderParametersImpl.fromParameters(new HashMap<>()));
105 }
106
107
108
109
110 @Test
111 void testGetChildDefaultParametersManagerSpecific() {
112 final DefaultParametersManager manager = mock(DefaultParametersManager.class);
113 final CombinedBuilderParametersImpl params = new CombinedBuilderParametersImpl();
114 assertSame(params, params.setChildDefaultParametersManager(manager));
115 assertSame(manager, params.getChildDefaultParametersManager());
116 }
117
118
119
120
121 @Test
122 void testGetChildDefaultParametersManagerUndefined() {
123 final CombinedBuilderParametersImpl params = new CombinedBuilderParametersImpl();
124 assertNotNull(params.getChildDefaultParametersManager());
125 }
126
127
128
129
130 @Test
131 void testGetParametersInherited() {
132 final CombinedBuilderParametersImpl params = new CombinedBuilderParametersImpl();
133 params.setThrowExceptionOnMissing(true);
134 final Map<String, Object> map = params.getParameters();
135 assertEquals(Boolean.TRUE, map.get("throwExceptionOnMissing"));
136 }
137
138
139
140
141 @Test
142 void testGetProvidersInitial() {
143 final CombinedBuilderParametersImpl params = new CombinedBuilderParametersImpl();
144 assertEquals(Collections.emptyMap(), params.getProviders());
145 }
146
147
148
149
150 @Test
151 void testGetProvidersModify() {
152 final CombinedBuilderParametersImpl params = new CombinedBuilderParametersImpl();
153 final Map<String, ConfigurationBuilderProvider> providers = params.getProviders();
154 final ConfigurationBuilderProvider provider = mock(ConfigurationBuilderProvider.class);
155 assertThrows(UnsupportedOperationException.class, () -> providers.put("tag", provider));
156 }
157
158
159
160
161 @Test
162 void testInheritFrom() {
163 final DefaultParametersManager manager = mock(DefaultParametersManager.class);
164 final CombinedBuilderParametersImpl params = new CombinedBuilderParametersImpl().setInheritSettings(false).setChildDefaultParametersManager(manager);
165 params.setThrowExceptionOnMissing(true);
166 final CombinedBuilderParametersImpl params2 = new CombinedBuilderParametersImpl();
167
168 params2.inheritFrom(params.getParameters());
169 final Map<String, Object> parameters = params2.getParameters();
170 assertEquals(Boolean.TRUE, parameters.get("throwExceptionOnMissing"));
171 assertEquals(manager, params2.getChildDefaultParametersManager());
172 assertFalse(params2.isInheritSettings());
173 }
174
175
176
177
178 @Test
179 void testInheritFromNoParametersInMap() {
180 final BasicBuilderParameters params = new BasicBuilderParameters().setThrowExceptionOnMissing(true);
181 final CombinedBuilderParametersImpl params2 = new CombinedBuilderParametersImpl();
182
183 params2.inheritFrom(params.getParameters());
184 final Map<String, Object> parameters = params2.getParameters();
185 assertEquals(Boolean.TRUE, parameters.get("throwExceptionOnMissing"));
186 }
187
188
189
190
191 @Test
192 void testProviderForUnknown() {
193 final CombinedBuilderParametersImpl params = new CombinedBuilderParametersImpl();
194 assertNull(params.providerForTag("someTag"));
195 }
196
197
198
199
200 @Test
201 void testRegisterChildDefaultsHandler() {
202 final DefaultParametersManager manager = mock(DefaultParametersManager.class);
203 final DefaultParametersHandler<BuilderParameters> handler = createDefaultsHandlerMock();
204 final CombinedBuilderParametersImpl params = new CombinedBuilderParametersImpl();
205 params.setChildDefaultParametersManager(manager);
206 assertSame(params, params.registerChildDefaultsHandler(BuilderParameters.class, handler));
207
208 verify(manager).registerDefaultsHandler(BuilderParameters.class, handler);
209 }
210
211
212
213
214 @Test
215 void testRegisterChildDefaultsHandlerWithStartClass() {
216 final DefaultParametersManager manager = mock(DefaultParametersManager.class);
217 final DefaultParametersHandler<BuilderParameters> handler = createDefaultsHandlerMock();
218 final CombinedBuilderParametersImpl params = new CombinedBuilderParametersImpl();
219 params.setChildDefaultParametersManager(manager);
220 assertSame(params, params.registerChildDefaultsHandler(BuilderParameters.class, handler, FileBasedBuilderParameters.class));
221
222 verify(manager).registerDefaultsHandler(BuilderParameters.class, handler, FileBasedBuilderParameters.class);
223 }
224
225
226
227
228 @Test
229 void testRegisterMissingProviders() {
230 final ConfigurationBuilderProvider provider1 = mock(ConfigurationBuilderProvider.class);
231 final ConfigurationBuilderProvider provider2 = mock(ConfigurationBuilderProvider.class);
232 final ConfigurationBuilderProvider provider3 = mock(ConfigurationBuilderProvider.class);
233 final String tagPrefix = "testTag";
234 final CombinedBuilderParametersImpl params = new CombinedBuilderParametersImpl();
235 params.registerProvider(tagPrefix, provider1);
236 final Map<String, ConfigurationBuilderProvider> map = new HashMap<>();
237 map.put(tagPrefix, provider2);
238 map.put(tagPrefix + 1, provider3);
239 assertSame(params, params.registerMissingProviders(map));
240 assertEquals(2, params.getProviders().size());
241 assertSame(provider1, params.providerForTag(tagPrefix));
242 assertSame(provider3, params.providerForTag(tagPrefix + 1));
243 }
244
245
246
247
248 @Test
249 void testRegisterMissingProvidersNullEntry() {
250 final Map<String, ConfigurationBuilderProvider> map = new HashMap<>();
251 map.put("tag", null);
252 final CombinedBuilderParametersImpl builderParameters = new CombinedBuilderParametersImpl();
253 assertThrows(IllegalArgumentException.class, () -> builderParameters.registerMissingProviders(map));
254 }
255
256
257
258
259 @Test
260 void testRegisterMissingProvidersNullMap() {
261 final Map<String, ConfigurationBuilderProvider> map = null;
262 final CombinedBuilderParametersImpl builderParameters = new CombinedBuilderParametersImpl();
263 assertThrows(IllegalArgumentException.class, () -> builderParameters.registerMissingProviders(map));
264 }
265
266
267
268
269 @Test
270 void testRegisterMissingProvidersParams() {
271 final ConfigurationBuilderProvider provider1 = mock(ConfigurationBuilderProvider.class);
272 final ConfigurationBuilderProvider provider2 = mock(ConfigurationBuilderProvider.class);
273 final ConfigurationBuilderProvider provider3 = mock(ConfigurationBuilderProvider.class);
274 final String tagPrefix = "testTag";
275 final CombinedBuilderParametersImpl params = new CombinedBuilderParametersImpl();
276 final CombinedBuilderParametersImpl params2 = new CombinedBuilderParametersImpl();
277 params.registerProvider(tagPrefix, provider1);
278 params2.registerProvider(tagPrefix, provider2);
279 params2.registerProvider(tagPrefix + 1, provider3);
280 assertSame(params, params.registerMissingProviders(params2));
281 assertEquals(2, params.getProviders().size());
282 assertSame(provider1, params.providerForTag(tagPrefix));
283 assertSame(provider3, params.providerForTag(tagPrefix + 1));
284 }
285
286
287
288
289 @Test
290 void testRegisterMissingProvidersParamsNull() {
291 final CombinedBuilderParametersImpl builderParameters = new CombinedBuilderParametersImpl();
292 assertThrows(IllegalArgumentException.class, () -> builderParameters.registerMissingProviders((CombinedBuilderParametersImpl) null));
293 }
294
295
296
297
298 @Test
299 void testRegisterProvider() {
300 final ConfigurationBuilderProvider provider = mock(ConfigurationBuilderProvider.class);
301 final String tagName = "testTag";
302 final CombinedBuilderParametersImpl params = new CombinedBuilderParametersImpl();
303 assertSame(params, params.registerProvider(tagName, provider));
304 final Map<String, ConfigurationBuilderProvider> providers = params.getProviders();
305 assertEquals(1, providers.size());
306 assertSame(provider, providers.get(tagName));
307 assertSame(provider, params.providerForTag(tagName));
308 }
309
310
311
312
313 @Test
314 void testRegisterProviderNoProvider() {
315 final CombinedBuilderParametersImpl builderParameters = new CombinedBuilderParametersImpl();
316 assertThrows(IllegalArgumentException.class, () -> builderParameters.registerProvider("aTag", null));
317 }
318
319
320
321
322 @Test
323 void testRegisterProviderNoTag() {
324 final CombinedBuilderParametersImpl builderParameters = new CombinedBuilderParametersImpl();
325 final ConfigurationBuilderProvider provider = mock(ConfigurationBuilderProvider.class);
326 assertThrows(IllegalArgumentException.class, () -> builderParameters.registerProvider(null, provider));
327 }
328
329
330
331
332 @Test
333 void testSetBasePath() {
334 final CombinedBuilderParametersImpl params = new CombinedBuilderParametersImpl();
335 final String basePath = ConfigurationAssert.OUT_DIR.getAbsolutePath();
336 assertSame(params, params.setBasePath(basePath));
337 assertEquals(basePath, params.getBasePath());
338 }
339
340
341
342
343 @Test
344 void testSetBeanProperties() throws Exception {
345 final BuilderParameters defparams = mock(BuilderParameters.class);
346 final CombinedBuilderParametersImpl params = new CombinedBuilderParametersImpl();
347 BeanHelper.setProperty(params, "basePath", "testPath");
348 BeanHelper.setProperty(params, "definitionBuilderParameters", defparams);
349 BeanHelper.setProperty(params, "inheritSettings", false);
350 assertEquals("testPath", params.getBasePath());
351 assertSame(defparams, params.getDefinitionBuilderParameters());
352 assertFalse(params.isInheritSettings());
353 }
354
355
356
357
358 @Test
359 void testSetDefinitionBuilder() {
360 final CombinedBuilderParametersImpl params = new CombinedBuilderParametersImpl();
361 assertNull(params.getDefinitionBuilder());
362 final ConfigurationBuilder<XMLConfiguration> builder = new BasicConfigurationBuilder<>(XMLConfiguration.class);
363 assertSame(params, params.setDefinitionBuilder(builder));
364 assertSame(builder, params.getDefinitionBuilder());
365 }
366
367
368
369
370 @Test
371 void testSetDefinitionBuilderParameters() {
372 final BuilderParameters defparams = mock(BuilderParameters.class);
373 final CombinedBuilderParametersImpl params = new CombinedBuilderParametersImpl();
374 assertSame(params, params.setDefinitionBuilderParameters(defparams));
375 assertSame(defparams, params.getDefinitionBuilderParameters());
376 }
377
378
379
380
381 @Test
382 void testSetInheritSettings() {
383 final CombinedBuilderParametersImpl params = new CombinedBuilderParametersImpl();
384 assertTrue(params.isInheritSettings());
385 assertSame(params, params.setInheritSettings(false));
386 assertFalse(params.isInheritSettings());
387 }
388 }