1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.configuration2.tree;
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.assertNull;
22
23 import java.util.List;
24
25 import org.apache.commons.configuration2.BaseHierarchicalConfiguration;
26 import org.apache.commons.configuration2.HierarchicalConfiguration;
27 import org.apache.commons.configuration2.ex.ConfigurationException;
28 import org.apache.commons.configuration2.tree.xpath.XPathExpressionEngine;
29 import org.junit.jupiter.api.Test;
30
31
32
33
34 public class TestMergeCombiner extends AbstractCombinerTest {
35
36
37
38
39
40
41
42 private ImmutableNode checkTable(final HierarchicalConfiguration<ImmutableNode> config) {
43 assertEquals(1, config.getMaxIndex("database.tables.table"));
44 final HierarchicalConfiguration<ImmutableNode> c = config.configurationAt("database.tables.table(0)");
45 assertEquals("documents", c.getString("name"));
46 assertEquals(2, c.getMaxIndex("fields.field.name"));
47 assertEquals("docname", c.getString("fields.field(1).name"));
48
49 final NodeHandler<ImmutableNode> nodeHandler = config.getNodeModel().getNodeHandler();
50 final List<QueryResult<ImmutableNode>> nds = config.getExpressionEngine().query(nodeHandler.getRootNode(), "database.tables.table", nodeHandler);
51 assertFalse(nds.isEmpty());
52 assertFalse(nds.get(0).isAttributeResult());
53 return nds.get(0).getNode();
54 }
55
56
57
58
59
60
61 @Override
62 protected NodeCombiner createCombiner() {
63 return new MergeCombiner();
64 }
65
66
67
68
69 @Test
70 void testAttributes() throws ConfigurationException {
71 final BaseHierarchicalConfiguration config = createCombinedConfiguration();
72 assertEquals(1, config.getInt("gui.level[@min]"));
73 assertEquals(2, config.getInt("gui.level[@default]"));
74 assertEquals(0, config.getMaxIndex("database.tables.table(0)[@id]"));
75 assertEquals(1, config.getInt("database.tables.table(0)[@id]"));
76 }
77
78
79
80
81 @Test
82 void testCombinedTable() throws ConfigurationException {
83 checkTable(createCombinedConfiguration());
84 }
85
86
87
88
89 @Test
90 void testListFromFirstStructure() throws ConfigurationException {
91 final BaseHierarchicalConfiguration config = createCombinedConfiguration();
92 assertEquals(0, config.getMaxIndex("net.service.url"));
93 assertEquals("http://service1.org", config.getString("net.service.url"));
94 assertFalse(config.containsKey("net.service.url[@type]"));
95 }
96
97
98
99
100 @Test
101 void testListFromSecondStructure() throws ConfigurationException {
102 final BaseHierarchicalConfiguration config = createCombinedConfiguration();
103 assertEquals(3, config.getMaxIndex("net.server.url"));
104 assertEquals("http://testsvr.com", config.getString("net.server.url(2)"));
105 }
106
107 @Test
108 void testMerge() throws ConfigurationException {
109
110 final BaseHierarchicalConfiguration config = createCombinedConfiguration();
111 config.setExpressionEngine(new XPathExpressionEngine());
112 assertEquals(3, config.getMaxIndex("Channels/Channel"));
113 assertEquals("My Channel", config.getString("Channels/Channel[@id='1']/Name"));
114 assertEquals("half", config.getString("Channels/Channel[@id='1']/@type"));
115 assertEquals("Channel 2", config.getString("Channels/Channel[@id='2']/Name"));
116 assertEquals("full", config.getString("Channels/Channel[@id='2']/@type"));
117 assertEquals("test 1 data", config.getString("Channels/Channel[@id='1']/ChannelData"));
118 assertEquals("test 2 data", config.getString("Channels/Channel[@id='2']/ChannelData"));
119 assertEquals("more test 2 data", config.getString("Channels/Channel[@id='2']/MoreChannelData"));
120
121 }
122
123
124
125
126 @Test
127 void testOverrideValues() throws ConfigurationException {
128 final BaseHierarchicalConfiguration config = createCombinedConfiguration();
129 assertEquals("Admin", config.getString("base.services.security.login.user"));
130 assertEquals("default", config.getString("base.services.security.login.user[@type]"));
131 assertNull(config.getString("base.services.security.login.passwd"));
132 assertEquals("secret", config.getString("base.services.security.login.passwd[@type]"));
133 }
134
135
136
137
138 @Test
139 void testSimpleValues() throws ConfigurationException {
140 final BaseHierarchicalConfiguration config = createCombinedConfiguration();
141 assertEquals(0, config.getMaxIndex("gui.bgcolor"));
142 assertEquals("green", config.getString("gui.bgcolor"));
143 assertEquals("yellow", config.getString("gui.selcolor"));
144 assertEquals("blue", config.getString("gui.fgcolor"));
145 assertEquals(1, config.getInt("gui.level"));
146 }
147 }