1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.configuration2.builder.combined;
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 import static org.junit.jupiter.api.Assertions.assertThrows;
23 import static org.junit.jupiter.api.Assertions.assertTrue;
24
25 import org.apache.commons.configuration2.BaseHierarchicalConfiguration;
26 import org.apache.commons.configuration2.HierarchicalConfiguration;
27 import org.apache.commons.configuration2.ex.ConfigurationRuntimeException;
28 import org.junit.jupiter.api.Test;
29
30
31
32
33 public class TestConfigurationDeclaration {
34
35
36
37
38
39
40 private static ConfigurationDeclaration createDeclaration(final HierarchicalConfiguration<?> conf) {
41 final HierarchicalConfiguration<?> config = conf != null ? conf : new BaseHierarchicalConfiguration();
42 return new ConfigurationDeclaration(null, config);
43 }
44
45
46
47
48
49
50
51
52 private void checkOldReservedAttribute(final String name) {
53 final String prefixName = "config-" + name;
54 final BaseHierarchicalConfiguration config = new BaseHierarchicalConfiguration();
55 config.addProperty(String.format("[@%s]", prefixName), Boolean.TRUE);
56 final ConfigurationDeclaration decl = createDeclaration(config);
57 assertTrue(decl.isReservedAttributeName(prefixName), prefixName + " attribute not recognized");
58 config.addProperty(String.format("[@%s]", name), Boolean.TRUE);
59 assertFalse(decl.isReservedAttributeName(name), name + " is reserved though config- exists");
60 assertTrue(decl.isReservedAttributeName(prefixName), "config- attribute not recognized when " + name + " exists");
61 }
62
63
64
65
66 @Test
67 public void testConfigurationDeclarationGetAttributes() {
68 final HierarchicalConfiguration<?> config = new BaseHierarchicalConfiguration();
69 config.addProperty("xml.fileName", "test.xml");
70 ConfigurationDeclaration decl = createDeclaration(config.configurationAt("xml"));
71 assertNull(decl.getAt());
72 assertFalse(decl.isOptional());
73 config.addProperty("xml[@config-at]", "test1");
74 decl = createDeclaration(config.configurationAt("xml"));
75 assertEquals("test1", decl.getAt());
76 config.addProperty("xml[@at]", "test2");
77 decl = createDeclaration(config.configurationAt("xml"));
78 assertEquals("test1", decl.getAt());
79 config.clearProperty("xml[@config-at]");
80 decl = createDeclaration(config.configurationAt("xml"));
81 assertEquals("test2", decl.getAt());
82 config.addProperty("xml[@config-optional]", "true");
83 decl = createDeclaration(config.configurationAt("xml"));
84 assertTrue(decl.isOptional());
85 config.addProperty("xml[@optional]", "false");
86 decl = createDeclaration(config.configurationAt("xml"));
87 assertTrue(decl.isOptional());
88 config.clearProperty("xml[@config-optional]");
89 config.setProperty("xml[@optional]", Boolean.TRUE);
90 decl = createDeclaration(config.configurationAt("xml"));
91 assertTrue(decl.isOptional());
92 }
93
94
95
96
97 @Test
98 public void testConfigurationDeclarationIsReserved() {
99 final ConfigurationDeclaration decl = createDeclaration(null);
100 assertTrue(decl.isReservedAttributeName("at"));
101 assertTrue(decl.isReservedAttributeName("optional"));
102 assertTrue(decl.isReservedAttributeName("config-class"));
103 assertFalse(decl.isReservedAttributeName("different"));
104 }
105
106
107
108
109 @Test
110 public void testConfigurationDeclarationIsReservedAt() {
111 checkOldReservedAttribute("at");
112 }
113
114
115
116
117 @Test
118 public void testConfigurationDeclarationIsReservedOptional() {
119 checkOldReservedAttribute("optional");
120 }
121
122
123
124
125 @Test
126 public void testConfigurationDeclarationOptionalAttributeInvalid() {
127 final HierarchicalConfiguration<?> factory = new BaseHierarchicalConfiguration();
128 factory.addProperty("xml.fileName", "test.xml");
129 factory.setProperty("xml[@optional]", "invalid value");
130 final ConfigurationDeclaration decl = createDeclaration(factory.configurationAt("xml"));
131 assertThrows(ConfigurationRuntimeException.class, decl::isOptional);
132 }
133 }