1 package org.apache.commons.configuration;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 import java.util.ArrayList;
20 import java.util.Collection;
21 import java.util.Iterator;
22 import java.util.List;
23
24 import junit.framework.TestCase;
25
26 /***
27 * Test class for HierarchicalConfiguration.
28 *
29 * @version $Id: TestHierarchicalConfiguration.java,v 1.5 2004/03/13 17:04:04 epugh Exp $
30 */
31 public class TestHierarchicalConfiguration extends TestCase
32 {
33 private static String[] tables = { "users", "documents" };
34
35 private static String[][] fields =
36 {
37 { "uid", "uname", "firstName", "lastName", "email" },
38 { "docid", "name", "creationDate", "authorID", "version" }
39 };
40
41 private HierarchicalConfiguration config;
42
43 protected void setUp() throws Exception
44 {
45 config = new HierarchicalConfiguration();
46 HierarchicalConfiguration.Node nodeTables =
47 new HierarchicalConfiguration.Node("tables");
48 for(int i = 0; i < tables.length; i++)
49 {
50 HierarchicalConfiguration.Node nodeTable =
51 new HierarchicalConfiguration.Node("table");
52 nodeTables.addChild(nodeTable);
53 HierarchicalConfiguration.Node nodeName =
54 new HierarchicalConfiguration.Node("name");
55 nodeName.setValue(tables[i]);
56 nodeTable.addChild(nodeName);
57 HierarchicalConfiguration.Node nodeFields =
58 new HierarchicalConfiguration.Node("fields");
59 nodeTable.addChild(nodeFields);
60 for(int j = 0; j < fields[i].length; j++)
61 {
62 HierarchicalConfiguration.Node nodeField =
63 new HierarchicalConfiguration.Node("field");
64 HierarchicalConfiguration.Node nodeFieldName =
65 new HierarchicalConfiguration.Node("name");
66 nodeFieldName.setValue(fields[i][j]);
67 nodeField.addChild(nodeFieldName);
68 nodeFields.addChild(nodeField);
69 }
70 }
71 config.getRoot().addChild(nodeTables);
72 }
73
74 public void testIsEmpty()
75 {
76 assertFalse(config.isEmpty());
77 HierarchicalConfiguration conf2 = new HierarchicalConfiguration();
78 assertTrue(conf2.isEmpty());
79 HierarchicalConfiguration.Node child1 =
80 new HierarchicalConfiguration.Node("child1");
81 HierarchicalConfiguration.Node child2 =
82 new HierarchicalConfiguration.Node("child2");
83 child1.addChild(child2);
84 conf2.getRoot().addChild(child1);
85 assertTrue(conf2.isEmpty());
86 }
87
88 public void testGetProperty()
89 {
90 assertNull(config.getProperty("tables.table.resultset"));
91 assertNull(config.getProperty("tables.table.fields.field"));
92
93 Object prop = config.getProperty("tables.table(0).fields.field.name");
94 assertNotNull(prop);
95 assertTrue(prop instanceof Collection);
96 assertEquals(5, ((Collection) prop).size());
97
98 prop = config.getProperty("tables.table.fields.field.name");
99 assertNotNull(prop);
100 assertTrue(prop instanceof Collection);
101 assertEquals(10, ((Collection) prop).size());
102
103 prop = config.getProperty("tables.table.fields.field(3).name");
104 assertNotNull(prop);
105 assertTrue(prop instanceof Collection);
106 assertEquals(2, ((Collection) prop).size());
107
108 prop = config.getProperty("tables.table(1).fields.field(2).name");
109 assertNotNull(prop);
110 assertEquals("creationDate", prop.toString());
111 }
112
113 public void testClearProperty()
114 {
115 Object prop = config.getProperty("tables.table(0).fields.field.name");
116 assertNotNull(prop);
117 config.clearProperty("tables.table(0).fields.field(3)");
118 prop = config.getProperty("tables.table(0).fields.field.name");
119 assertNotNull(prop);
120 assertTrue(prop instanceof Collection);
121 assertEquals(4, ((Collection) prop).size());
122
123 config.clearProperty("tables.table(0).fields");
124 assertNull(config.getProperty("tables.table(0).fields.field.name"));
125 prop = config.getProperty("tables.table.fields.field.name");
126 assertNotNull(prop);
127 assertTrue(prop instanceof Collection);
128 assertEquals(5, ((Collection) prop).size());
129
130 config.clearProperty("tables.table(1)");
131 assertNull(config.getProperty("tables.table.fields.field.name"));
132 }
133
134 public void testContainsKey()
135 {
136 assertTrue(config.containsKey("tables.table(0).name"));
137 assertTrue(config.containsKey("tables.table(1).name"));
138 assertFalse(config.containsKey("tables.table(2).name"));
139
140 assertTrue(config.containsKey("tables.table(0).fields.field.name"));
141 assertFalse(config.containsKey("tables.table(0).fields.field"));
142 config.clearProperty("tables.table(0).fields");
143 assertFalse(config.containsKey("tables.table(0).fields.field.name"));
144
145 assertTrue(config.containsKey("tables.table.fields.field.name"));
146 }
147
148 public void testGetKeys()
149 {
150 List keys = new ArrayList();
151 for(Iterator it = config.getKeys(); it.hasNext();)
152 {
153 keys.add(it.next());
154 }
155
156 assertEquals(2, keys.size());
157 assertTrue(keys.contains("tables.table.name"));
158 assertTrue(keys.contains("tables.table.fields.field.name"));
159 }
160
161 public void testAddProperty()
162 {
163 config.addProperty("tables.table(0).fields.field(-1).name", "phone");
164 Object prop = config.getProperty("tables.table(0).fields.field.name");
165 assertNotNull(prop);
166 assertTrue(prop instanceof Collection);
167 assertEquals(6, ((Collection) prop).size());
168
169 config.addProperty("tables.table(0).fields.field.name", "fax");
170 prop = config.getProperty("tables.table.fields.field(5).name");
171 assertNotNull(prop);
172 assertTrue(prop instanceof List);
173 List list = (List) prop;
174 assertEquals("phone", list.get(0));
175 assertEquals("fax", list.get(1));
176
177 config.addProperty("tables.table(-1).name", "config");
178 prop = config.getProperty("tables.table.name");
179 assertNotNull(prop);
180 assertTrue(prop instanceof Collection);
181 assertEquals(3, ((Collection) prop).size());
182 config.addProperty("tables.table(2).fields.field(0).name", "cid");
183 config.addProperty("tables.table(2).fields.field(-1).name",
184 "confName");
185 prop = config.getProperty("tables.table(2).fields.field.name");
186 assertNotNull(prop);
187 assertTrue(prop instanceof Collection);
188 assertEquals(2, ((Collection) prop).size());
189 assertEquals("confName",
190 config.getProperty("tables.table(2).fields.field(1).name"));
191
192 config.addProperty("connection.user", "scott");
193 config.addProperty("connection.passwd", "tiger");
194 assertEquals("tiger", config.getProperty("connection.passwd"));
195
196 ConfigurationKey key = new ConfigurationKey();
197 key.append("tables").append("table").appendIndex(0);
198 key.appendAttribute("tableType");
199 config.addProperty(key.toString(), "system");
200 assertEquals("system", config.getProperty(key.toString()));
201 }
202
203 public void testGetMaxIndex()
204 {
205 assertEquals(4, config.getMaxIndex("tables.table(0).fields.field"));
206 assertEquals(4, config.getMaxIndex("tables.table(1).fields.field"));
207 assertEquals(1, config.getMaxIndex("tables.table"));
208 assertEquals(1, config.getMaxIndex("tables.table.name"));
209 assertEquals(0, config.getMaxIndex("tables.table(0).name"));
210 assertEquals(0, config.getMaxIndex("tables.table(1).fields.field(1)"));
211 assertEquals(-1, config.getMaxIndex("tables.table(2).fields"));
212
213 int maxIdx = config.getMaxIndex("tables.table(0).fields.field.name");
214 for(int i = 0; i <= maxIdx; i++)
215 {
216 ConfigurationKey key = new ConfigurationKey("tables.table(0).fields");
217 key.append("field").appendIndex(i).append("name");
218 assertNotNull(config.getProperty(key.toString()));
219 }
220 }
221
222 public void testSubset()
223 {
224 Configuration conf = config.subset("tables.table(0)");
225 assertEquals("users", conf.getProperty("name"));
226 Object prop = conf.getProperty("fields.field.name");
227 assertNotNull(prop);
228 assertTrue(prop instanceof Collection);
229 assertEquals(5, ((Collection) prop).size());
230
231 for(int i = 0; i < fields[0].length; i++)
232 {
233 ConfigurationKey key = new ConfigurationKey();
234 key.append("fields").append("field").appendIndex(i);
235 key.append("name");
236 assertEquals(fields[0][i], conf.getProperty(key.toString()));
237 }
238
239 assertTrue("subset is not empty", config.subset("tables.table(2)").isEmpty());
240
241 conf = config.subset("tables.table.fields.field");
242 prop = conf.getProperty("name");
243 assertTrue("prop is not a collection", prop instanceof Collection);
244 assertEquals(10, ((Collection) prop).size());
245
246 conf = config.subset("tables.table.fields.field.name");
247 assertTrue("subset is not empty", conf.isEmpty());
248 }
249 }