1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.commons.configuration2;
19
20 import static org.junit.jupiter.api.Assertions.assertArrayEquals;
21 import static org.junit.jupiter.api.Assertions.assertEquals;
22 import static org.junit.jupiter.api.Assertions.assertFalse;
23 import static org.junit.jupiter.api.Assertions.assertNotEquals;
24 import static org.junit.jupiter.api.Assertions.assertTrue;
25
26 import java.util.Iterator;
27 import java.util.List;
28
29 import org.apache.commons.configuration2.builder.FileBasedBuilderParametersImpl;
30 import org.apache.commons.configuration2.builder.combined.CombinedConfigurationBuilder;
31 import org.apache.commons.configuration2.ex.ConfigurationException;
32 import org.apache.commons.configuration2.io.FileHandler;
33 import org.junit.jupiter.api.Test;
34
35
36
37
38 public class TestEqualBehavior {
39
40
41
42
43 private void checkEquality(final String msg, final Configuration c1, final Configuration c2) {
44 final Iterator<String> it1 = c1.getKeys();
45 final Iterator<String> it2 = c2.getKeys();
46
47 while (it1.hasNext() && it2.hasNext()) {
48 final String key1 = it1.next();
49 final String key2 = it2.next();
50 assertEquals(key1, key2, msg + ", Keys: ");
51 assertEquals(c1.containsKey(key1), c2.containsKey(key2), msg + ", Contains: ");
52 }
53 assertEquals(it1.hasNext(), it2.hasNext(), msg + ", Iterator: ");
54 }
55
56
57
58
59 private void checkSameKey(final String msg, final String key, final Configuration c1, final Configuration c2) {
60 final String[] s1 = c1.getStringArray(key);
61 final String[] s2 = c2.getStringArray(key);
62
63 assertArrayEquals(s1, s2, msg + ", String Array: ");
64
65 final List<Object> list1 = c1.getList(key);
66 final List<Object> list2 = c2.getList(key);
67
68 assertEquals(list1, list2, msg + ", List: ");
69 }
70
71 private Configuration setupCompositeConfiguration() throws ConfigurationException {
72 final CombinedConfigurationBuilder builder = new CombinedConfigurationBuilder();
73 builder.configure(new FileBasedBuilderParametersImpl().setFile(ConfigurationAssert.getTestFile("testEqualDigester.xml")));
74 return builder.getConfiguration();
75 }
76
77 private Configuration setupSimpleConfiguration() throws Exception {
78 final String simpleConfigurationFile = ConfigurationAssert.getTestFile("testEqual.properties").getAbsolutePath();
79 final PropertiesConfiguration c = new PropertiesConfiguration();
80 final FileHandler handler = new FileHandler(c);
81 handler.setFileName(simpleConfigurationFile);
82 handler.load();
83 return c;
84 }
85
86
87
88
89 @Test
90 public void testAddingSet() throws Exception {
91 final Configuration simple = setupSimpleConfiguration();
92 final Configuration composite = setupCompositeConfiguration();
93
94 final String key = "existing.property";
95 final String value = "new value";
96
97 assertTrue(simple.containsKey(key));
98 assertEquals(simple.containsKey(key), composite.containsKey(key));
99
100 simple.addProperty(key, value);
101 composite.addProperty(key, value);
102
103 assertTrue(simple.containsKey(key));
104 assertEquals(simple.containsKey(key), composite.containsKey(key));
105
106 checkSameKey("testAddingSet", key, simple, composite);
107 checkEquality("testAddingSet", simple, composite);
108 }
109
110
111
112
113 @Test
114 public void testAddingUnset() throws Exception {
115 final Configuration simple = setupSimpleConfiguration();
116 final Configuration composite = setupCompositeConfiguration();
117
118 final String key = "nonexisting.property";
119 final String value = "new value";
120
121 assertFalse(simple.containsKey(key));
122 assertEquals(simple.containsKey(key), composite.containsKey(key));
123
124 simple.addProperty(key, value);
125 composite.addProperty(key, value);
126
127 checkSameKey("testAddingUnset", key, simple, composite);
128 checkEquality("testAddingUnset", simple, composite);
129 }
130
131
132
133
134 @Test
135 public void testDeletingExisting() throws Exception {
136 final Configuration simple = setupSimpleConfiguration();
137 final Configuration composite = setupCompositeConfiguration();
138
139 final String key = "clear.property";
140
141 assertTrue(simple.containsKey(key));
142 assertEquals(simple.containsKey(key), composite.containsKey(key));
143
144 simple.clearProperty(key);
145 composite.clearProperty(key);
146
147 assertFalse(simple.containsKey(key));
148 assertEquals(simple.containsKey(key), composite.containsKey(key));
149
150 checkEquality("testDeletingExisting", simple, composite);
151 }
152
153 @Test
154 public void testDeletingNonExisting() throws Exception {
155 final Configuration simple = setupSimpleConfiguration();
156 final Configuration composite = setupCompositeConfiguration();
157
158 final String key = "nonexisting.clear.property";
159
160 assertFalse(simple.containsKey(key));
161 assertEquals(simple.containsKey(key), composite.containsKey(key));
162
163 simple.clearProperty(key);
164 composite.clearProperty(key);
165
166 assertFalse(simple.containsKey(key));
167 assertEquals(simple.containsKey(key), composite.containsKey(key));
168
169 checkEquality("testDeletingNonExisting", simple, composite);
170 }
171
172
173
174
175 @Test
176 public void testLoading() throws Exception {
177 final Configuration simple = setupSimpleConfiguration();
178 final Configuration composite = setupCompositeConfiguration();
179
180 checkEquality("testLoading", simple, composite);
181 }
182
183 @Test
184 public void testSettingExisting() throws Exception {
185 final Configuration simple = setupSimpleConfiguration();
186 final Configuration composite = setupCompositeConfiguration();
187
188 final String key = "existing.property";
189 final String value = "new value";
190
191 assertTrue(simple.containsKey(key));
192 assertNotEquals(value, simple.getString(key));
193 assertEquals(simple.containsKey(key), composite.containsKey(key));
194
195 simple.setProperty(key, value);
196 composite.setProperty(key, value);
197
198 assertTrue(simple.containsKey(key));
199 assertEquals(simple.getString(key), value);
200 assertEquals(simple.containsKey(key), composite.containsKey(key));
201
202 checkSameKey("testSettingExisting", key, simple, composite);
203 checkEquality("testSettingExisting", simple, composite);
204 }
205
206
207
208
209 @Test
210 public void testSettingNonExisting() throws Exception {
211 final Configuration simple = setupSimpleConfiguration();
212 final Configuration composite = setupCompositeConfiguration();
213
214 final String key = "nonexisting.property";
215 final String value = "new value";
216
217 assertFalse(simple.containsKey(key));
218 assertEquals(simple.containsKey(key), composite.containsKey(key));
219
220 simple.setProperty(key, value);
221 composite.setProperty(key, value);
222
223 assertTrue(simple.containsKey(key));
224 assertEquals(simple.containsKey(key), composite.containsKey(key));
225
226 checkSameKey("testSettingNonExisting", key, simple, composite);
227 checkEquality("testSettingNonExisting", simple, composite);
228 }
229 }