| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package org.apache.commons.configuration2; |
| |
| import static org.junit.jupiter.api.Assertions.assertEquals; |
| import static org.junit.jupiter.api.Assertions.assertFalse; |
| import static org.junit.jupiter.api.Assertions.assertThrows; |
| import static org.junit.jupiter.api.Assertions.assertTrue; |
| |
| import java.math.BigDecimal; |
| import java.math.BigInteger; |
| import java.time.Duration; |
| import java.util.Collection; |
| import java.util.HashMap; |
| import java.util.Iterator; |
| import java.util.List; |
| import java.util.Map; |
| import java.util.NoSuchElementException; |
| import java.util.Objects; |
| import java.util.Properties; |
| |
| import org.apache.commons.configuration2.ex.ConversionException; |
| import org.junit.jupiter.api.AfterEach; |
| import org.junit.jupiter.api.BeforeEach; |
| import org.junit.jupiter.api.Test; |
| |
| /** |
| * Tests {@link ImmutableConfiguration} default methods. |
| */ |
| public class TestDefaultImmutableConfiguration { |
| |
| /** Tests default methods. This class MUST NOT override the default methods! */ |
| private static final class MapImmutableConfiguration implements ImmutableConfiguration { |
| |
| private Map<String, Object> map = new HashMap<>(); |
| |
| @Override |
| public boolean containsKey(final String key) { |
| // Super is not a default method. |
| return false; |
| } |
| |
| @Override |
| public <T> T get(final Class<T> cls, final String key) { |
| // Super is not a default method. |
| return null; |
| } |
| |
| @Override |
| public <T> T get(final Class<T> cls, final String key, final T defaultValue) { |
| // Super is not a default method. |
| return null; |
| } |
| |
| @Override |
| public Object getArray(final Class<?> cls, final String key) { |
| // Super is not a default method. |
| return null; |
| } |
| |
| @Override |
| public Object getArray(final Class<?> cls, final String key, final Object defaultValue) { |
| // Super is not a default method. |
| return null; |
| } |
| |
| @Override |
| public BigDecimal getBigDecimal(final String key) { |
| // Super is not a default method. |
| return null; |
| } |
| |
| @Override |
| public BigDecimal getBigDecimal(final String key, final BigDecimal defaultValue) { |
| // Super is not a default method. |
| return null; |
| } |
| |
| @Override |
| public BigInteger getBigInteger(final String key) { |
| // Super is not a default method. |
| return null; |
| } |
| |
| @Override |
| public BigInteger getBigInteger(final String key, final BigInteger defaultValue) { |
| // Super is not a default method. |
| return null; |
| } |
| |
| @Override |
| public boolean getBoolean(final String key) { |
| // Super is not a default method. |
| return false; |
| } |
| |
| @Override |
| public boolean getBoolean(final String key, final boolean defaultValue) { |
| // Super is not a default method. |
| return false; |
| } |
| |
| @Override |
| public Boolean getBoolean(final String key, final Boolean defaultValue) { |
| // Super is not a default method. |
| return null; |
| } |
| |
| @Override |
| public byte getByte(final String key) { |
| // Super is not a default method. |
| return 0; |
| } |
| |
| @Override |
| public byte getByte(final String key, final byte defaultValue) { |
| // Super is not a default method. |
| return 0; |
| } |
| |
| @Override |
| public Byte getByte(final String key, final Byte defaultValue) { |
| // Super is not a default method. |
| return null; |
| } |
| |
| @Override |
| public <T> Collection<T> getCollection(final Class<T> cls, final String key, final Collection<T> target) { |
| // Super is not a default method. |
| return null; |
| } |
| |
| @Override |
| public <T> Collection<T> getCollection(final Class<T> cls, final String key, final Collection<T> target, final Collection<T> defaultValue) { |
| // Super is not a default method. |
| return null; |
| } |
| |
| @Override |
| public double getDouble(final String key) { |
| // Super is not a default method. |
| return 0; |
| } |
| |
| @Override |
| public double getDouble(final String key, final double defaultValue) { |
| // Super is not a default method. |
| return 0; |
| } |
| |
| @Override |
| public Double getDouble(final String key, final Double defaultValue) { |
| // Super is not a default method. |
| return null; |
| } |
| |
| @Override |
| public String getEncodedString(final String key) { |
| // Super is not a default method. |
| return null; |
| } |
| |
| @Override |
| public String getEncodedString(final String key, final ConfigurationDecoder decoder) { |
| // Super is not a default method. |
| return null; |
| } |
| |
| @Override |
| public float getFloat(final String key) { |
| // Super is not a default method. |
| return 0; |
| } |
| |
| @Override |
| public float getFloat(final String key, final float defaultValue) { |
| // Super is not a default method. |
| return 0; |
| } |
| |
| @Override |
| public Float getFloat(final String key, final Float defaultValue) { |
| // Super is not a default method. |
| return null; |
| } |
| |
| @Override |
| public int getInt(final String key) { |
| // Super is not a default method. |
| return 0; |
| } |
| |
| @Override |
| public int getInt(final String key, final int defaultValue) { |
| // Super is not a default method. |
| return 0; |
| } |
| |
| @Override |
| public Integer getInteger(final String key, final Integer defaultValue) { |
| // Super is not a default method. |
| return null; |
| } |
| |
| @Override |
| public Iterator<String> getKeys() { |
| return this.map.keySet().iterator(); |
| } |
| |
| @Override |
| public Iterator<String> getKeys(final String prefix) { |
| // Super is not a default method. |
| return null; |
| } |
| |
| @Override |
| public <T> List<T> getList(final Class<T> cls, final String key) { |
| // Super is not a default method. |
| return null; |
| } |
| |
| @Override |
| public <T> List<T> getList(final Class<T> cls, final String key, final List<T> defaultValue) { |
| // Super is not a default method. |
| return null; |
| } |
| |
| @Override |
| public List<Object> getList(final String key) { |
| // Super is not a default method. |
| return null; |
| } |
| |
| @Override |
| public List<Object> getList(final String key, final List<?> defaultValue) { |
| // Super is not a default method. |
| return null; |
| } |
| |
| @Override |
| public long getLong(final String key) { |
| // Super is not a default method. |
| return 0; |
| } |
| |
| @Override |
| public long getLong(final String key, final long defaultValue) { |
| // Super is not a default method. |
| return 0; |
| } |
| |
| @Override |
| public Long getLong(final String key, final Long defaultValue) { |
| // Super is not a default method. |
| return null; |
| } |
| |
| @Override |
| public Properties getProperties(final String key) { |
| // Super is not a default method. |
| return null; |
| } |
| |
| @Override |
| public Object getProperty(final String key) { |
| // Super is not a default method. |
| return map.get(key); |
| } |
| |
| @Override |
| public short getShort(final String key) { |
| // Super is not a default method. |
| return 0; |
| } |
| |
| @Override |
| public short getShort(final String key, final short defaultValue) { |
| // Super is not a default method. |
| return 0; |
| } |
| |
| @Override |
| public Short getShort(final String key, final Short defaultValue) { |
| // Super is not a default method. |
| return null; |
| } |
| |
| @Override |
| public String getString(final String key) { |
| return Objects.toString(map.get(key), null); |
| } |
| |
| @Override |
| public String getString(final String key, final String defaultValue) { |
| // Super is not a default method. |
| return null; |
| } |
| |
| @Override |
| public String[] getStringArray(final String key) { |
| // Super is not a default method. |
| return null; |
| } |
| |
| @Override |
| public ImmutableConfiguration immutableSubset(final String prefix) { |
| // Super is not a default method. |
| return null; |
| } |
| |
| @Override |
| public boolean isEmpty() { |
| // Super is not a default method. |
| return false; |
| } |
| |
| @Override |
| public int size() { |
| // Super is not a default method. |
| return 0; |
| } |
| |
| } |
| |
| private final MapImmutableConfiguration config = new MapImmutableConfiguration(); |
| |
| @BeforeEach |
| @AfterEach |
| public void clearMap() { |
| config.map.clear(); |
| } |
| |
| @Test |
| public void testContainsValueDefaultImplementation() { |
| config.map.put("test", "213123"); |
| assertFalse(config.containsValue("")); |
| assertFalse(config.containsValue(null)); |
| assertTrue(config.containsValue("213123")); |
| } |
| |
| @Test |
| public void testGetDuration() { |
| final Duration d = Duration.ofSeconds(1); |
| config.map.put("durationD", d.toString()); |
| final Duration oneD = Duration.ofSeconds(1); |
| final Duration twoD = Duration.ofSeconds(2); |
| assertEquals(oneD, config.getDuration("durationD")); |
| assertEquals(oneD, config.getDuration("durationD", twoD)); |
| assertEquals(twoD, config.getDuration("numberNotInConfig", twoD)); |
| assertEquals(oneD, config.getDuration("durationD", twoD)); |
| } |
| |
| @Test |
| public void testGetDurationIncompatibleType() { |
| config.map.put("test.empty", ""); |
| assertThrows(ConversionException.class, () -> config.getDuration("test.empty")); |
| } |
| |
| @Test |
| public void testGetDurationUnknown() { |
| assertThrows(NoSuchElementException.class, () -> config.getDuration("numberNotInConfig")); |
| } |
| } |