1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.configuration.event;
18
19 import java.util.ArrayList;
20 import java.util.Collection;
21
22 import org.apache.commons.configuration.AbstractConfiguration;
23 import org.apache.commons.configuration.HierarchicalConfiguration;
24 import org.apache.commons.configuration.SubnodeConfiguration;
25 import org.apache.commons.configuration.tree.DefaultConfigurationNode;
26
27 /***
28 * Test class for the events generated by hierarchical configurations.
29 *
30 * @version $Id: TestHierarchicalConfigurationEvents.java 531254 2007-04-22 18:54:57Z oheger $
31 */
32 public class TestHierarchicalConfigurationEvents extends
33 AbstractTestConfigurationEvents
34 {
35 protected AbstractConfiguration createConfiguration()
36 {
37 return new HierarchicalConfiguration();
38 }
39
40 /***
41 * Tests events generated by the clearTree() method.
42 */
43 public void testClearTreeEvent()
44 {
45 HierarchicalConfiguration hc = (HierarchicalConfiguration) config;
46 String key = EXIST_PROPERTY.substring(0, EXIST_PROPERTY.indexOf('.'));
47 Collection nodes = hc.getExpressionEngine()
48 .query(hc.getRootNode(), key);
49 hc.clearTree(key);
50 l.checkEvent(HierarchicalConfiguration.EVENT_CLEAR_TREE, key, null,
51 true);
52 l.checkEvent(HierarchicalConfiguration.EVENT_CLEAR_TREE, key, nodes,
53 false);
54 l.done();
55 }
56
57 /***
58 * Tests events generated by the addNodes() method.
59 */
60 public void testAddNodesEvent()
61 {
62 HierarchicalConfiguration hc = (HierarchicalConfiguration) config;
63 Collection nodes = new ArrayList(1);
64 nodes.add(new DefaultConfigurationNode("a_key", TEST_PROPVALUE));
65 hc.addNodes(TEST_PROPNAME, nodes);
66 l.checkEvent(HierarchicalConfiguration.EVENT_ADD_NODES, TEST_PROPNAME,
67 nodes, true);
68 l.checkEvent(HierarchicalConfiguration.EVENT_ADD_NODES, TEST_PROPNAME,
69 nodes, false);
70 l.done();
71 }
72
73 /***
74 * Tests events generated by addNodes() when the list of nodes is empty. In
75 * this case no events should be generated.
76 */
77 public void testAddNodesEmptyEvent()
78 {
79 ((HierarchicalConfiguration) config).addNodes(TEST_PROPNAME,
80 new ArrayList());
81 l.done();
82 }
83
84 /***
85 * Tests whether manipulations of a subnode configuration trigger correct
86 * events.
87 */
88 public void testSubnodeChangedEvent()
89 {
90 SubnodeConfiguration sub = ((HierarchicalConfiguration) config)
91 .configurationAt(EXIST_PROPERTY);
92 sub.addProperty("newProp", "newValue");
93 checkSubnodeEvent(l
94 .nextEvent(HierarchicalConfiguration.EVENT_SUBNODE_CHANGED),
95 true);
96 checkSubnodeEvent(l
97 .nextEvent(HierarchicalConfiguration.EVENT_SUBNODE_CHANGED),
98 false);
99 l.done();
100 }
101
102 /***
103 * Tests whether a received event contains a correct subnode event.
104 *
105 * @param event the event object
106 * @param before the expected before flag
107 */
108 private void checkSubnodeEvent(ConfigurationEvent event, boolean before)
109 {
110 assertEquals("Wrong before flag of nesting event", before, event
111 .isBeforeUpdate());
112 assertTrue("No subnode event found in value",
113 event.getPropertyValue() instanceof ConfigurationEvent);
114 ConfigurationEvent evSub = (ConfigurationEvent) event
115 .getPropertyValue();
116 assertEquals("Wrong event type",
117 HierarchicalConfiguration.EVENT_ADD_PROPERTY, evSub.getType());
118 assertEquals("Wrong property name", "newProp", evSub.getPropertyName());
119 assertEquals("Wrong property value", "newValue", evSub
120 .getPropertyValue());
121 assertEquals("Wrong before flag", before, evSub.isBeforeUpdate());
122 }
123 }