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
41 private static ConfigurationDeclaration createDeclaration(final HierarchicalConfiguration<?> conf) {
42 final HierarchicalConfiguration<?> config = conf != null ? conf : new BaseHierarchicalConfiguration();
43 return new ConfigurationDeclaration(null, config);
44 }
45
46
47
48
49
50
51
52
53 private void checkOldReservedAttribute(final String name) {
54 final String prefixName = "config-" + name;
55 final BaseHierarchicalConfiguration config = new BaseHierarchicalConfiguration();
56 config.addProperty(String.format("[@%s]", prefixName), Boolean.TRUE);
57 final ConfigurationDeclaration decl = createDeclaration(config);
58 assertTrue(decl.isReservedAttributeName(prefixName), prefixName + " attribute not recognized");
59 config.addProperty(String.format("[@%s]", name), Boolean.TRUE);
60 assertFalse(decl.isReservedAttributeName(name), name + " is reserved though config- exists");
61 assertTrue(decl.isReservedAttributeName(prefixName), "config- attribute not recognized when " + name + " exists");
62 }
63
64
65
66
67 @Test
68 void testConfigurationDeclarationGetAttributes() {
69 final HierarchicalConfiguration<?> config = new BaseHierarchicalConfiguration();
70 config.addProperty("xml.fileName", "test.xml");
71 ConfigurationDeclaration decl = createDeclaration(config.configurationAt("xml"));
72 assertNull(decl.getAt());
73 assertFalse(decl.isOptional());
74 config.addProperty("xml[@config-at]", "test1");
75 decl = createDeclaration(config.configurationAt("xml"));
76 assertEquals("test1", decl.getAt());
77 config.addProperty("xml[@at]", "test2");
78 decl = createDeclaration(config.configurationAt("xml"));
79 assertEquals("test1", decl.getAt());
80 config.clearProperty("xml[@config-at]");
81 decl = createDeclaration(config.configurationAt("xml"));
82 assertEquals("test2", decl.getAt());
83 config.addProperty("xml[@config-optional]", "true");
84 decl = createDeclaration(config.configurationAt("xml"));
85 assertTrue(decl.isOptional());
86 config.addProperty("xml[@optional]", "false");
87 decl = createDeclaration(config.configurationAt("xml"));
88 assertTrue(decl.isOptional());
89 config.clearProperty("xml[@config-optional]");
90 config.setProperty("xml[@optional]", Boolean.TRUE);
91 decl = createDeclaration(config.configurationAt("xml"));
92 assertTrue(decl.isOptional());
93 }
94
95
96
97
98 @Test
99 void testConfigurationDeclarationIsReserved() {
100 final ConfigurationDeclaration decl = createDeclaration(null);
101 assertTrue(decl.isReservedAttributeName("at"));
102 assertTrue(decl.isReservedAttributeName("optional"));
103 assertTrue(decl.isReservedAttributeName("config-class"));
104 assertFalse(decl.isReservedAttributeName("different"));
105 }
106
107
108
109
110 @Test
111 void testConfigurationDeclarationIsReservedAt() {
112 checkOldReservedAttribute("at");
113 }
114
115
116
117
118 @Test
119 void testConfigurationDeclarationIsReservedOptional() {
120 checkOldReservedAttribute("optional");
121 }
122
123
124
125
126 @Test
127 void testConfigurationDeclarationOptionalAttributeInvalid() {
128 final HierarchicalConfiguration<?> factory = new BaseHierarchicalConfiguration();
129 factory.addProperty("xml.fileName", "test.xml");
130 factory.setProperty("xml[@optional]", "invalid value");
131 final ConfigurationDeclaration decl = createDeclaration(factory.configurationAt("xml"));
132 assertThrows(ConfigurationRuntimeException.class, decl::isOptional);
133 }
134 }