View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *     http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  
18  package org.apache.commons.configuration2;
19  
20  import static org.junit.jupiter.api.Assertions.assertEquals;
21  import static org.junit.jupiter.api.Assertions.assertThrows;
22  
23  import java.math.BigDecimal;
24  import java.math.BigInteger;
25  import java.time.Duration;
26  import java.util.Collection;
27  import java.util.HashMap;
28  import java.util.Iterator;
29  import java.util.List;
30  import java.util.Map;
31  import java.util.NoSuchElementException;
32  import java.util.Objects;
33  import java.util.Properties;
34  
35  import org.apache.commons.configuration2.ex.ConversionException;
36  import org.junit.jupiter.api.AfterEach;
37  import org.junit.jupiter.api.BeforeEach;
38  import org.junit.jupiter.api.Test;
39  
40  /**
41   * Tests {@link ImmutableConfiguration} default methods.
42   */
43  public class TestDefaultImmutableConfiguration {
44  
45      /** Tests default methods. This class MUST NOT override the default methods! */
46      private static final class MapImmutableConfiguration implements ImmutableConfiguration {
47  
48          Map<String, Object> map = new HashMap<>();
49  
50          @Override
51          public boolean containsKey(final String key) {
52              // Super is not a default method.
53              return false;
54          }
55  
56          @Override
57          public <T> T get(final Class<T> cls, final String key) {
58              // Super is not a default method.
59              return null;
60          }
61  
62          @Override
63          public <T> T get(final Class<T> cls, final String key, final T defaultValue) {
64              // Super is not a default method.
65              return null;
66          }
67  
68          @Override
69          public Object getArray(final Class<?> cls, final String key) {
70              // Super is not a default method.
71              return null;
72          }
73  
74          @Override
75          public Object getArray(final Class<?> cls, final String key, final Object defaultValue) {
76              // Super is not a default method.
77              return null;
78          }
79  
80          @Override
81          public BigDecimal getBigDecimal(final String key) {
82              // Super is not a default method.
83              return null;
84          }
85  
86          @Override
87          public BigDecimal getBigDecimal(final String key, final BigDecimal defaultValue) {
88              // Super is not a default method.
89              return null;
90          }
91  
92          @Override
93          public BigInteger getBigInteger(final String key) {
94              // Super is not a default method.
95              return null;
96          }
97  
98          @Override
99          public BigInteger getBigInteger(final String key, final BigInteger defaultValue) {
100             // Super is not a default method.
101             return null;
102         }
103 
104         @Override
105         public boolean getBoolean(final String key) {
106             // Super is not a default method.
107             return false;
108         }
109 
110         @Override
111         public boolean getBoolean(final String key, final boolean defaultValue) {
112             // Super is not a default method.
113             return false;
114         }
115 
116         @Override
117         public Boolean getBoolean(final String key, final Boolean defaultValue) {
118             // Super is not a default method.
119             return null;
120         }
121 
122         @Override
123         public byte getByte(final String key) {
124             // Super is not a default method.
125             return 0;
126         }
127 
128         @Override
129         public byte getByte(final String key, final byte defaultValue) {
130             // Super is not a default method.
131             return 0;
132         }
133 
134         @Override
135         public Byte getByte(final String key, final Byte defaultValue) {
136             // Super is not a default method.
137             return null;
138         }
139 
140         @Override
141         public <T> Collection<T> getCollection(final Class<T> cls, final String key, final Collection<T> target) {
142             // Super is not a default method.
143             return null;
144         }
145 
146         @Override
147         public <T> Collection<T> getCollection(final Class<T> cls, final String key, final Collection<T> target, final Collection<T> defaultValue) {
148             // Super is not a default method.
149             return null;
150         }
151 
152         @Override
153         public double getDouble(final String key) {
154             // Super is not a default method.
155             return 0;
156         }
157 
158         @Override
159         public double getDouble(final String key, final double defaultValue) {
160             // Super is not a default method.
161             return 0;
162         }
163 
164         @Override
165         public Double getDouble(final String key, final Double defaultValue) {
166             // Super is not a default method.
167             return null;
168         }
169 
170         @Override
171         public String getEncodedString(final String key) {
172             // Super is not a default method.
173             return null;
174         }
175 
176         @Override
177         public String getEncodedString(final String key, final ConfigurationDecoder decoder) {
178             // Super is not a default method.
179             return null;
180         }
181 
182         @Override
183         public float getFloat(final String key) {
184             // Super is not a default method.
185             return 0;
186         }
187 
188         @Override
189         public float getFloat(final String key, final float defaultValue) {
190             // Super is not a default method.
191             return 0;
192         }
193 
194         @Override
195         public Float getFloat(final String key, final Float defaultValue) {
196             // Super is not a default method.
197             return null;
198         }
199 
200         @Override
201         public int getInt(final String key) {
202             // Super is not a default method.
203             return 0;
204         }
205 
206         @Override
207         public int getInt(final String key, final int defaultValue) {
208             // Super is not a default method.
209             return 0;
210         }
211 
212         @Override
213         public Integer getInteger(final String key, final Integer defaultValue) {
214             // Super is not a default method.
215             return null;
216         }
217 
218         @Override
219         public Iterator<String> getKeys() {
220             // Super is not a default method.
221             return null;
222         }
223 
224         @Override
225         public Iterator<String> getKeys(final String prefix) {
226             // Super is not a default method.
227             return null;
228         }
229 
230         @Override
231         public <T> List<T> getList(final Class<T> cls, final String key) {
232             // Super is not a default method.
233             return null;
234         }
235 
236         @Override
237         public <T> List<T> getList(final Class<T> cls, final String key, final List<T> defaultValue) {
238             // Super is not a default method.
239             return null;
240         }
241 
242         @Override
243         public List<Object> getList(final String key) {
244             // Super is not a default method.
245             return null;
246         }
247 
248         @Override
249         public List<Object> getList(final String key, final List<?> defaultValue) {
250             // Super is not a default method.
251             return null;
252         }
253 
254         @Override
255         public long getLong(final String key) {
256             // Super is not a default method.
257             return 0;
258         }
259 
260         @Override
261         public long getLong(final String key, final long defaultValue) {
262             // Super is not a default method.
263             return 0;
264         }
265 
266         @Override
267         public Long getLong(final String key, final Long defaultValue) {
268             // Super is not a default method.
269             return null;
270         }
271 
272         @Override
273         public Properties getProperties(final String key) {
274             // Super is not a default method.
275             return null;
276         }
277 
278         @Override
279         public Object getProperty(final String key) {
280             // Super is not a default method.
281             return map.get(key);
282         }
283 
284         @Override
285         public short getShort(final String key) {
286             // Super is not a default method.
287             return 0;
288         }
289 
290         @Override
291         public short getShort(final String key, final short defaultValue) {
292             // Super is not a default method.
293             return 0;
294         }
295 
296         @Override
297         public Short getShort(final String key, final Short defaultValue) {
298             // Super is not a default method.
299             return null;
300         }
301 
302         @Override
303         public String getString(final String key) {
304             return Objects.toString(map.get(key), null);
305         }
306 
307         @Override
308         public String getString(final String key, final String defaultValue) {
309             // Super is not a default method.
310             return null;
311         }
312 
313         @Override
314         public String[] getStringArray(final String key) {
315             // Super is not a default method.
316             return null;
317         }
318 
319         @Override
320         public ImmutableConfiguration immutableSubset(final String prefix) {
321             // Super is not a default method.
322             return null;
323         }
324 
325         @Override
326         public boolean isEmpty() {
327             // Super is not a default method.
328             return false;
329         }
330 
331         @Override
332         public int size() {
333             // Super is not a default method.
334             return 0;
335         }
336 
337     }
338 
339     private final MapImmutableConfiguration config = new MapImmutableConfiguration();
340 
341     @BeforeEach
342     @AfterEach
343     public void clearMap() {
344         config.map.clear();
345     }
346 
347     @Test
348     public void testGetDuration() {
349         final Duration d = Duration.ofSeconds(1);
350         config.map.put("durationD", d.toString());
351         final Duration oneD = Duration.ofSeconds(1);
352         final Duration twoD = Duration.ofSeconds(2);
353         assertEquals(oneD, config.getDuration("durationD"));
354         assertEquals(oneD, config.getDuration("durationD", twoD));
355         assertEquals(twoD, config.getDuration("numberNotInConfig", twoD));
356         assertEquals(oneD, config.getDuration("durationD", twoD));
357     }
358 
359     @Test
360     public void testGetDurationIncompatibleType() {
361         config.map.put("test.empty", "");
362         assertThrows(ConversionException.class, () -> config.getDuration("test.empty"));
363     }
364 
365     @Test
366     public void testGetDurationUnknown() {
367         assertThrows(NoSuchElementException.class, () -> config.getDuration("numberNotInConfig"));
368     }
369 }