1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.configuration2;
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.assertThrows;
22 import static org.junit.jupiter.api.Assertions.assertTrue;
23
24 import java.util.HashSet;
25 import java.util.Iterator;
26 import java.util.NoSuchElementException;
27 import java.util.Set;
28
29 import org.apache.commons.configuration2.builder.FileBasedBuilderParametersImpl;
30 import org.apache.commons.configuration2.builder.FileBasedConfigurationBuilder;
31 import org.apache.commons.configuration2.ex.ConfigurationException;
32 import org.junit.jupiter.api.Test;
33
34
35
36
37 public class TestImmutableConfiguration {
38
39 private static final String TEST_FILE = "test.properties";
40
41
42
43
44
45
46
47 private static PropertiesConfiguration createTestConfig() throws ConfigurationException {
48 return new FileBasedConfigurationBuilder<>(PropertiesConfiguration.class)
49 .configure(new FileBasedBuilderParametersImpl().setFile(ConfigurationAssert.getTestFile(TEST_FILE))).getConfiguration();
50 }
51
52
53
54
55
56
57
58 private static Set<String> fetchKeys(final Iterator<String> it) {
59 final Set<String> keys = new HashSet<>();
60 while (it.hasNext()) {
61 keys.add(it.next());
62 }
63 return keys;
64 }
65
66
67
68
69 @Test
70 void testExceptionHandling() {
71 final PropertiesConfiguration config = new PropertiesConfiguration();
72 final String property = "nonExistingProperty";
73 config.setThrowExceptionOnMissing(true);
74 final ImmutableConfiguration ic = ConfigurationUtils.unmodifiableConfiguration(config);
75 final NoSuchElementException e = assertThrows(NoSuchElementException.class, () -> ic.getString(property));
76 assertTrue(e.getMessage().contains(property));
77 }
78
79
80
81
82 @Test
83 void testImmutableSubset() throws ConfigurationException {
84 final ImmutableConfiguration conf = ConfigurationUtils.unmodifiableConfiguration(createTestConfig());
85 final ImmutableConfiguration subset = conf.immutableSubset("test");
86 assertFalse(subset.isEmpty());
87 assertEquals(1000000, subset.getLong("long"));
88 }
89
90
91
92
93 @Test
94 void testUnmodifiableConfigurationAccess() throws ConfigurationException {
95 final Configuration confOrg = createTestConfig();
96 final ImmutableConfiguration conf = ConfigurationUtils.unmodifiableConfiguration(confOrg);
97 assertFalse(conf.isEmpty());
98 for (final Iterator<String> it = confOrg.getKeys(); it.hasNext();) {
99 final String key = it.next();
100 assertTrue(conf.containsKey(key), "Key not contained: " + key);
101 assertEquals(confOrg.getProperty(key), conf.getProperty(key), "Wrong value for " + key);
102 }
103 }
104
105
106
107
108 @Test
109 void testUnmodifiableConfigurationCast() throws ConfigurationException {
110 final ImmutableConfiguration conf = ConfigurationUtils.unmodifiableConfiguration(createTestConfig());
111 assertThrows(ClassCastException.class, () -> {
112 final Configuration mutableConf = (Configuration) conf;
113 mutableConf.clear();
114 });
115 }
116
117
118
119
120 @Test
121 void testUnmodifiableConfigurationIterate() throws ConfigurationException {
122 final Configuration confOrg = createTestConfig();
123 final ImmutableConfiguration conf = ConfigurationUtils.unmodifiableConfiguration(confOrg);
124 assertEquals(fetchKeys(confOrg.getKeys()), fetchKeys(conf.getKeys()));
125 }
126
127
128
129
130 @Test
131 void testUnmodifiableConfigurationIteratorRemove() throws ConfigurationException {
132 final ImmutableConfiguration conf = ConfigurationUtils.unmodifiableConfiguration(createTestConfig());
133 final Iterator<String> it = conf.getKeys();
134 it.next();
135 assertThrows(UnsupportedOperationException.class, it::remove);
136 }
137
138
139
140
141 @Test
142 void testUnmodifiableConfigurationLiveUpdate() throws ConfigurationException {
143 final Configuration confOrg = createTestConfig();
144 final ImmutableConfiguration conf = ConfigurationUtils.unmodifiableConfiguration(confOrg);
145 final String key = "new.property";
146 final String value = "new value";
147 confOrg.addProperty(key, value);
148 assertEquals(value, conf.getString(key));
149 }
150
151
152
153
154 @Test
155 void testUnmodifiableConfigurationNull() {
156 assertThrows(NullPointerException.class, () -> ConfigurationUtils.unmodifiableConfiguration(null));
157 }
158
159
160
161
162 @Test
163 void testUnmodifiableConfigurationOtherTypes() throws ConfigurationException {
164 final ImmutableConfiguration conf = ConfigurationUtils.unmodifiableConfiguration(createTestConfig());
165 assertEquals((byte) 10, conf.getByte("test.byte"));
166 assertTrue(conf.getBoolean("test.boolean"));
167 assertEquals(10.25, conf.getDouble("test.double"), .05);
168 assertEquals(20.25f, conf.getFloat("test.float"), .05);
169 assertEquals(10, conf.getInt("test.integer"));
170 assertEquals(1000000L, conf.getLong("test.long"));
171 assertEquals((short) 1, conf.getShort("test.short"));
172 }
173
174
175
176
177 @Test
178 void testUnmodifiableHierarchicalConfiguration() {
179 final HierarchicalConfiguration<?> conf = new BaseHierarchicalConfiguration();
180 final String key = "test";
181 conf.addProperty(key, Boolean.TRUE);
182 final ImmutableHierarchicalConfiguration ihc = ConfigurationUtils.unmodifiableConfiguration(conf);
183 assertTrue(ihc.getBoolean(key));
184 assertEquals(0, ihc.getMaxIndex(key));
185 }
186 }