1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.configuration2.builder.fluent;
18
19 import static org.junit.jupiter.api.Assertions.assertEquals;
20 import static org.junit.jupiter.api.Assertions.assertInstanceOf;
21 import static org.junit.jupiter.api.Assertions.assertNotEquals;
22 import static org.junit.jupiter.api.Assertions.assertNotNull;
23 import static org.junit.jupiter.api.Assertions.assertSame;
24 import static org.junit.jupiter.api.Assertions.assertTrue;
25 import static org.mockito.ArgumentMatchers.any;
26 import static org.mockito.Mockito.doAnswer;
27 import static org.mockito.Mockito.mock;
28 import static org.mockito.Mockito.verify;
29 import static org.mockito.Mockito.verifyNoMoreInteractions;
30
31 import java.nio.charset.StandardCharsets;
32 import java.util.ArrayList;
33 import java.util.List;
34 import java.util.Map;
35
36 import org.apache.commons.configuration2.ConfigurationConsumer;
37 import org.apache.commons.configuration2.PropertiesConfiguration;
38 import org.apache.commons.configuration2.builder.BasicBuilderParameters;
39 import org.apache.commons.configuration2.builder.BasicBuilderProperties;
40 import org.apache.commons.configuration2.builder.BuilderParameters;
41 import org.apache.commons.configuration2.builder.DefaultParametersHandler;
42 import org.apache.commons.configuration2.builder.DefaultParametersManager;
43 import org.apache.commons.configuration2.builder.FileBasedBuilderParametersImpl;
44 import org.apache.commons.configuration2.builder.combined.CombinedBuilderParametersImpl;
45 import org.apache.commons.configuration2.builder.combined.MultiFileBuilderParametersImpl;
46 import org.apache.commons.configuration2.convert.ListDelimiterHandler;
47 import org.apache.commons.configuration2.ex.ConfigurationException;
48 import org.apache.commons.configuration2.tree.ExpressionEngine;
49 import org.junit.jupiter.api.BeforeAll;
50 import org.junit.jupiter.api.Test;
51
52
53
54
55 public class TestParameters {
56
57
58 private static final String DEF_ENCODING = StandardCharsets.UTF_8.name();
59
60
61 private static ListDelimiterHandler listHandler;
62
63
64
65
66
67
68 private static void checkBasicProperties(final Map<String, Object> map) {
69 assertEquals(listHandler, map.get("listDelimiterHandler"));
70 assertEquals(Boolean.TRUE, map.get("throwExceptionOnMissing"));
71 }
72
73
74
75
76
77
78
79 private static void checkInheritance(final Object params, final Class<?>... ifcClasses) {
80 assertInstanceOf(BasicBuilderProperties.class, params);
81 for (final Class<?> c : ifcClasses) {
82 assertInstanceOf(c, params);
83 }
84 }
85
86
87
88
89
90
91 @SuppressWarnings("unchecked")
92 private static DefaultParametersHandler<XMLBuilderParameters> createHandlerMock() {
93 return mock(DefaultParametersHandler.class);
94 }
95
96 @BeforeAll
97 public static void setUpBeforeClass() throws Exception {
98 listHandler = mock(ListDelimiterHandler.class);
99 }
100
101
102
103
104 @Test
105 void testApplyDefaults() {
106 final DefaultParametersManager manager = mock(DefaultParametersManager.class);
107 final List<Object> initializedParams = new ArrayList<>(1);
108
109 doAnswer(invocation -> {
110 initializedParams.add(invocation.getArgument(0));
111 return null;
112 }).when(manager).initializeParameters(any());
113
114 final Parameters params = new Parameters(manager);
115 final XMLBuilderParameters xmlParams = params.xml();
116 assertEquals(1, initializedParams.size());
117 assertSame(xmlParams, initializedParams.get(0));
118
119 verify(manager).initializeParameters(any());
120 verifyNoMoreInteractions(manager);
121 }
122
123
124
125
126 @Test
127 void testBasic() {
128 final BasicBuilderParameters basic = new Parameters().basic();
129 assertNotNull(basic);
130 }
131
132
133
134
135 @Test
136 void testCombined() {
137 final Map<String, Object> map = new Parameters().combined().setThrowExceptionOnMissing(true).setBasePath("test").setListDelimiterHandler(listHandler)
138 .getParameters();
139 final CombinedBuilderParametersImpl cparams = CombinedBuilderParametersImpl.fromParameters(map);
140 assertEquals("test", cparams.getBasePath());
141 checkBasicProperties(map);
142 }
143
144
145
146
147 @Test
148 void testDatabase() {
149 final Map<String, Object> map = new Parameters().database().setThrowExceptionOnMissing(true).setAutoCommit(true).setTable("table")
150 .setListDelimiterHandler(listHandler).setKeyColumn("keyColumn").getParameters();
151 checkBasicProperties(map);
152 assertEquals("table", map.get("table"));
153 assertEquals("keyColumn", map.get("keyColumn"));
154 assertEquals(Boolean.TRUE, map.get("autoCommit"));
155 }
156
157
158
159
160 @Test
161 void testDefaultParametersManager() {
162 final Parameters parameters = new Parameters();
163 assertNotNull(parameters.getDefaultParametersManager());
164 }
165
166
167
168
169 @Test
170 void testFileBased() {
171 final Map<String, Object> map = new Parameters().fileBased().setThrowExceptionOnMissing(true).setEncoding(DEF_ENCODING)
172 .setListDelimiterHandler(listHandler).setFileName("test.xml").getParameters();
173 final FileBasedBuilderParametersImpl fbparams = FileBasedBuilderParametersImpl.fromParameters(map);
174 assertEquals("test.xml", fbparams.getFileHandler().getFileName());
175 assertEquals(DEF_ENCODING, fbparams.getFileHandler().getEncoding());
176 checkBasicProperties(map);
177 }
178
179
180
181
182 @Test
183 void testFileBasedInheritance() {
184 checkInheritance(new Parameters().fileBased());
185 }
186
187
188
189
190 @Test
191 void testHierarchical() {
192 final ExpressionEngine engine = mock(ExpressionEngine.class);
193 final Map<String, Object> map = new Parameters().hierarchical().setThrowExceptionOnMissing(true).setExpressionEngine(engine).setFileName("test.xml")
194 .setListDelimiterHandler(listHandler).getParameters();
195 checkBasicProperties(map);
196 final FileBasedBuilderParametersImpl fbp = FileBasedBuilderParametersImpl.fromParameters(map);
197 assertEquals("test.xml", fbp.getFileHandler().getFileName());
198 assertEquals(engine, map.get("expressionEngine"));
199 }
200
201
202
203
204 @Test
205 void testHierarchicalInheritance() {
206 checkInheritance(new Parameters().hierarchical(), FileBasedBuilderParameters.class);
207 }
208
209
210
211
212
213 @Test
214 void testInheritance() {
215 final Object params = new Parameters().xml();
216 final FileBasedBuilderParameters fbParams = assertInstanceOf(FileBasedBuilderParameters.class, params);
217 fbParams.setListDelimiterHandler(listHandler).setFileName("test.xml").setThrowExceptionOnMissing(true);
218 final ExpressionEngine engine = mock(ExpressionEngine.class);
219 ((HierarchicalBuilderParameters) params).setExpressionEngine(engine);
220 final Map<String, Object> map = fbParams.getParameters();
221 checkBasicProperties(map);
222 assertSame(engine, map.get("expressionEngine"));
223 }
224
225
226
227
228 @Test
229 void testJndi() {
230 final Map<String, Object> map = new Parameters().jndi().setThrowExceptionOnMissing(true).setPrefix("test").setListDelimiterHandler(listHandler)
231 .getParameters();
232 assertEquals("test", map.get("prefix"));
233 checkBasicProperties(map);
234 }
235
236
237
238
239 @Test
240 void testMultiFile() {
241 final BuilderParameters bp = mock(BuilderParameters.class);
242 final String pattern = "a pattern";
243 final Map<String, Object> map = new Parameters().multiFile().setThrowExceptionOnMissing(true).setFilePattern(pattern)
244 .setListDelimiterHandler(listHandler).setManagedBuilderParameters(bp).getParameters();
245 checkBasicProperties(map);
246 final MultiFileBuilderParametersImpl params = MultiFileBuilderParametersImpl.fromParameters(map);
247 assertSame(bp, params.getManagedBuilderParameters());
248 assertEquals(pattern, params.getFilePattern());
249 }
250
251
252
253
254 @Test
255 void testProperties() {
256 final PropertiesConfiguration.IOFactory factory = mock(PropertiesConfiguration.IOFactory.class);
257 @SuppressWarnings("unchecked")
258 final ConfigurationConsumer<ConfigurationException> includeListener = mock(ConfigurationConsumer.class);
259
260 final Map<String, Object> map =
261 new Parameters().properties()
262 .setThrowExceptionOnMissing(true)
263 .setFileName("test.properties")
264 .setIncludeListener(includeListener)
265 .setIOFactory(factory)
266 .setListDelimiterHandler(listHandler)
267 .setIncludesAllowed(false)
268 .getParameters();
269
270 checkBasicProperties(map);
271 final FileBasedBuilderParametersImpl fbp = FileBasedBuilderParametersImpl.fromParameters(map);
272 assertEquals("test.properties", fbp.getFileHandler().getFileName());
273 assertEquals(Boolean.FALSE, map.get("includesAllowed"));
274 assertSame(includeListener, map.get("includeListener"));
275 assertSame(factory, map.get("IOFactory"));
276 }
277
278
279
280
281 @Test
282 void testPropertiesInheritance() {
283 checkInheritance(new Parameters().properties(), FileBasedBuilderParameters.class);
284 }
285
286
287
288
289 @Test
290 void testProxyObjectMethods() {
291 final FileBasedBuilderParameters params = new Parameters().fileBased();
292 final String s = params.toString();
293 assertTrue(s.contains(FileBasedBuilderParametersImpl.class.getSimpleName()));
294 assertNotEquals(0, params.hashCode());
295 }
296
297
298
299
300 @Test
301 void testRegisterDefaultsHandlerNoStartClass() {
302 final DefaultParametersManager manager = mock(DefaultParametersManager.class);
303 final DefaultParametersHandler<XMLBuilderParameters> handler = createHandlerMock();
304
305 final Parameters params = new Parameters(manager);
306 params.registerDefaultsHandler(XMLBuilderParameters.class, handler);
307
308 verify(manager).registerDefaultsHandler(XMLBuilderParameters.class, handler);
309 verifyNoMoreInteractions(manager);
310 }
311
312
313
314
315 @Test
316 void testRegisterDefaultsHandlerWithStartClass() {
317 final DefaultParametersManager manager = mock(DefaultParametersManager.class);
318 final DefaultParametersHandler<XMLBuilderParameters> handler = createHandlerMock();
319
320 final Parameters params = new Parameters(manager);
321 params.registerDefaultsHandler(XMLBuilderParameters.class, handler, FileBasedBuilderParameters.class);
322
323 verify(manager).registerDefaultsHandler(XMLBuilderParameters.class, handler, FileBasedBuilderParameters.class);
324 verifyNoMoreInteractions(manager);
325 }
326
327
328
329
330 @Test
331 void testXml() {
332 final ExpressionEngine engine = mock(ExpressionEngine.class);
333 final Map<String, Object> map = new Parameters().xml().setThrowExceptionOnMissing(true).setFileName("test.xml").setValidating(true)
334 .setExpressionEngine(engine).setListDelimiterHandler(listHandler).setSchemaValidation(true).getParameters();
335 checkBasicProperties(map);
336 final FileBasedBuilderParametersImpl fbp = FileBasedBuilderParametersImpl.fromParameters(map);
337 assertEquals("test.xml", fbp.getFileHandler().getFileName());
338 assertEquals(Boolean.TRUE, map.get("validating"));
339 assertEquals(Boolean.TRUE, map.get("schemaValidation"));
340 assertEquals(engine, map.get("expressionEngine"));
341 }
342
343
344
345
346 @Test
347 void testXmlInheritance() {
348 checkInheritance(new Parameters().xml(), HierarchicalBuilderParameters.class, FileBasedBuilderParameters.class);
349 }
350 }