1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.configuration2.builder;
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.assertNull;
22 import static org.junit.jupiter.api.Assertions.assertSame;
23 import static org.junit.jupiter.api.Assertions.assertThrows;
24 import static org.mockito.Mockito.mock;
25
26 import java.nio.charset.StandardCharsets;
27 import java.util.Map;
28
29 import org.apache.commons.configuration2.builder.fluent.FileBasedBuilderParameters;
30 import org.apache.commons.configuration2.builder.fluent.Parameters;
31 import org.apache.commons.configuration2.builder.fluent.PropertiesBuilderParameters;
32 import org.apache.commons.configuration2.builder.fluent.XMLBuilderParameters;
33 import org.apache.commons.configuration2.convert.ListDelimiterHandler;
34 import org.apache.commons.configuration2.tree.ExpressionEngine;
35 import org.junit.jupiter.api.BeforeAll;
36 import org.junit.jupiter.api.BeforeEach;
37 import org.junit.jupiter.api.Test;
38
39
40
41
42 public class TestDefaultParametersManager {
43
44
45
46
47
48 private static final class FileBasedDefaultsHandler implements DefaultParametersHandler<FileBasedBuilderParameters> {
49 @Override
50 public void initializeDefaults(final FileBasedBuilderParameters parameters) {
51 parameters.setThrowExceptionOnMissing(true).setEncoding(DEF_ENCODING).setListDelimiterHandler(listHandler);
52 }
53 }
54
55
56 private static final String DEF_ENCODING = StandardCharsets.UTF_8.name();
57
58
59 private static ListDelimiterHandler listHandler;
60
61
62
63
64
65
66 private static void checkDefaultValues(final Map<String, Object> map) {
67 assertEquals(listHandler, map.get("listDelimiterHandler"));
68 assertEquals(Boolean.TRUE, map.get("throwExceptionOnMissing"));
69 final FileBasedBuilderParametersImpl fbparams = FileBasedBuilderParametersImpl.fromParameters(map);
70 assertEquals(DEF_ENCODING, fbparams.getFileHandler().getEncoding());
71 }
72
73
74
75
76
77
78 private static void checkNoDefaultValues(final Map<String, Object> map) {
79 assertFalse(map.containsKey("throwExceptionOnMissing"));
80 final FileBasedBuilderParametersImpl fbParams = FileBasedBuilderParametersImpl.fromParameters(map, true);
81 assertNull(fbParams.getFileHandler().getEncoding());
82 }
83
84 @BeforeAll
85 public static void setUpBeforeClass() throws Exception {
86 listHandler = mock(ListDelimiterHandler.class);
87 }
88
89
90 private Parameters parameters;
91
92
93 private DefaultParametersManager manager;
94
95 @BeforeEach
96 public void setUp() throws Exception {
97 parameters = new Parameters();
98 manager = new DefaultParametersManager();
99 }
100
101
102
103
104 @Test
105 void testApplyDefaults() {
106 manager.registerDefaultsHandler(FileBasedBuilderParameters.class, new FileBasedDefaultsHandler());
107 final FileBasedBuilderParameters params = parameters.fileBased();
108 manager.initializeParameters(params);
109 final Map<String, Object> map = params.getParameters();
110 checkDefaultValues(map);
111 }
112
113
114
115
116
117 @Test
118 void testApplyDefaultsMultipleHandlers() {
119 final ExpressionEngine engine = mock(ExpressionEngine.class);
120 manager.registerDefaultsHandler(XMLBuilderParameters.class, parameters -> parameters.setThrowExceptionOnMissing(false)
121 .setListDelimiterHandler(mock(ListDelimiterHandler.class)).setExpressionEngine(engine));
122 manager.registerDefaultsHandler(FileBasedBuilderParameters.class, new FileBasedDefaultsHandler());
123 final XMLBuilderParameters params = parameters.xml();
124 manager.initializeParameters(params);
125 final Map<String, Object> map = params.getParameters();
126 checkDefaultValues(map);
127 assertSame(engine, map.get("expressionEngine"));
128 }
129
130
131
132
133 @Test
134 void testApplyDefaultsOnSubClass() {
135 manager.registerDefaultsHandler(FileBasedBuilderParameters.class, new FileBasedDefaultsHandler());
136 final XMLBuilderParameters params = parameters.xml();
137 manager.initializeParameters(params);
138 final Map<String, Object> map = params.getParameters();
139 checkDefaultValues(map);
140 }
141
142
143
144
145 @Test
146 void testApplyDefaultsStartClass() {
147 manager.registerDefaultsHandler(FileBasedBuilderParameters.class, new FileBasedDefaultsHandler(), XMLBuilderParameters.class);
148 final XMLBuilderParameters paramsXml = parameters.xml();
149 manager.initializeParameters(paramsXml);
150 Map<String, Object> map = paramsXml.getParameters();
151 checkDefaultValues(map);
152 final PropertiesBuilderParameters paramsProps = parameters.properties();
153 manager.initializeParameters(paramsProps);
154 map = paramsProps.getParameters();
155 checkNoDefaultValues(map);
156 }
157
158
159
160
161 @Test
162 void testInitializeParametersNull() {
163 manager.registerDefaultsHandler(FileBasedBuilderParameters.class, new FileBasedDefaultsHandler());
164 manager.initializeParameters(null);
165 }
166
167
168
169
170 @Test
171 void testRegisterDefaultsHandlerNoClass() {
172 final FileBasedDefaultsHandler handler = new FileBasedDefaultsHandler();
173 assertThrows(IllegalArgumentException.class, () -> manager.registerDefaultsHandler(null, handler));
174 }
175
176
177
178
179 @Test
180 void testRegisterDefaultsHandlerNoHandler() {
181 assertThrows(IllegalArgumentException.class, () -> manager.registerDefaultsHandler(BasicBuilderProperties.class, null));
182 }
183
184
185
186
187 @Test
188 void testUnregisterDefaultsHandlerAll() {
189 final FileBasedDefaultsHandler handler = new FileBasedDefaultsHandler();
190 manager.registerDefaultsHandler(FileBasedBuilderParameters.class, handler, XMLBuilderParameters.class);
191 manager.registerDefaultsHandler(FileBasedBuilderParameters.class, handler, PropertiesBuilderParameters.class);
192 manager.unregisterDefaultsHandler(handler);
193
194 final XMLBuilderParameters paramsXml = parameters.xml();
195 manager.initializeParameters(paramsXml);
196 checkNoDefaultValues(paramsXml.getParameters());
197 final PropertiesBuilderParameters paramsProps = parameters.properties();
198 manager.initializeParameters(paramsProps);
199 checkNoDefaultValues(paramsProps.getParameters());
200 }
201
202
203
204
205 @Test
206 void testUnregisterDefaultsHandlerSpecific() {
207 final FileBasedDefaultsHandler handler = new FileBasedDefaultsHandler();
208 manager.registerDefaultsHandler(FileBasedBuilderParameters.class, handler, XMLBuilderParameters.class);
209 manager.registerDefaultsHandler(FileBasedBuilderParameters.class, handler, PropertiesBuilderParameters.class);
210 manager.unregisterDefaultsHandler(handler, PropertiesBuilderParameters.class);
211 final XMLBuilderParameters paramsXml = parameters.xml();
212 manager.initializeParameters(paramsXml);
213 checkDefaultValues(paramsXml.getParameters());
214 final PropertiesBuilderParameters paramsProps = parameters.properties();
215 manager.initializeParameters(paramsProps);
216 checkNoDefaultValues(paramsProps.getParameters());
217 }
218 }