1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.configuration2.spring;
18
19 import static org.junit.jupiter.api.Assertions.assertArrayEquals;
20 import static org.junit.jupiter.api.Assertions.assertEquals;
21 import static org.junit.jupiter.api.Assertions.assertNotNull;
22 import static org.junit.jupiter.api.Assertions.assertNull;
23 import static org.junit.jupiter.api.Assertions.assertThrows;
24
25 import java.io.StringReader;
26 import java.util.Properties;
27
28 import org.apache.commons.configuration2.BaseConfiguration;
29 import org.apache.commons.configuration2.Configuration;
30 import org.apache.commons.configuration2.PropertiesConfiguration;
31 import org.apache.commons.configuration2.PropertiesConfigurationLayout;
32 import org.apache.commons.configuration2.XMLConfiguration;
33 import org.junit.jupiter.api.BeforeEach;
34 import org.junit.jupiter.api.Test;
35 import org.springframework.core.io.ClassPathResource;
36 import org.springframework.core.io.Resource;
37
38
39
40
41 public class TestConfigurationPropertiesFactoryBean {
42
43 private ConfigurationPropertiesFactoryBean configurationFactory;
44
45 @BeforeEach
46 public void setUp() {
47 configurationFactory = new ConfigurationPropertiesFactoryBean();
48 }
49
50 @Test
51 public void testAfterPropertiesSet() throws Exception {
52 assertThrows(IllegalArgumentException.class, configurationFactory::afterPropertiesSet);
53 }
54
55 @Test
56 public void testGetConfigurationDefensiveCopy() {
57 final Configuration[] configs = {new PropertiesConfiguration(), new XMLConfiguration()};
58 configurationFactory.setConfigurations(configs);
59
60 final Configuration[] configsGet = configurationFactory.getConfigurations();
61 configsGet[0] = null;
62 assertArrayEquals(configs, configurationFactory.getConfigurations());
63 }
64
65 @Test
66 public void testGetLocationsDefensiveCopy() {
67 final Resource[] locations = {new ClassPathResource("f1"), new ClassPathResource("f2")};
68 configurationFactory.setLocations(locations);
69
70 final Resource[] locationsGet = configurationFactory.getLocations();
71 locationsGet[1] = null;
72 assertArrayEquals(locations, configurationFactory.getLocations());
73 }
74
75 @Test
76 public void testGetObject() throws Exception {
77 configurationFactory.setConfigurations(new BaseConfiguration());
78 assertNull(configurationFactory.getObject());
79 configurationFactory.afterPropertiesSet();
80 assertNotNull(configurationFactory.getObject());
81 }
82
83 @Test
84 public void testInitialConfiguration() throws Exception {
85 configurationFactory = new ConfigurationPropertiesFactoryBean(new BaseConfiguration());
86 configurationFactory.afterPropertiesSet();
87 assertNotNull(configurationFactory.getConfiguration());
88 }
89
90 @Test
91 public void testLoadResources() throws Exception {
92 configurationFactory.setLocations(new ClassPathResource("testConfigurationFactoryBean.file"));
93 configurationFactory.setConfigurations(new BaseConfiguration());
94 configurationFactory.afterPropertiesSet();
95
96 final Properties props = configurationFactory.getObject();
97 assertEquals("duke", props.getProperty("java"));
98 }
99
100 @Test
101 public void testMergeConfigurations() throws Exception {
102 final Configuration one = new BaseConfiguration();
103 one.setProperty("foo", "bar");
104 final String properties = "## some header \n" + "foo = bar1\n" + "bar = foo\n";
105
106 final PropertiesConfiguration two = new PropertiesConfiguration();
107 final PropertiesConfigurationLayout layout = new PropertiesConfigurationLayout();
108 layout.load(two, new StringReader(properties));
109
110 configurationFactory.setConfigurations(one, two);
111 configurationFactory.afterPropertiesSet();
112 final Properties props = configurationFactory.getObject();
113 assertEquals("foo", props.getProperty("bar"));
114 assertEquals("bar", props.getProperty("foo"));
115 }
116
117 @Test
118 public void testSetConfigurationsDefensiveCopy() {
119 final Configuration[] configs = {new PropertiesConfiguration(), new XMLConfiguration()};
120 final Configuration[] configsUpdate = configs.clone();
121
122 configurationFactory.setConfigurations(configsUpdate);
123 configsUpdate[0] = null;
124 assertArrayEquals(configs, configurationFactory.getConfigurations());
125 }
126
127 @Test
128 public void testSetLocationsDefensiveCopy() {
129 final Resource[] locations = {new ClassPathResource("f1"), new ClassPathResource("f2")};
130 final Resource[] locationsUpdate = locations.clone();
131
132 configurationFactory.setLocations(locationsUpdate);
133 locationsUpdate[0] = new ClassPathResource("other");
134 assertArrayEquals(locations, configurationFactory.getLocations());
135 }
136
137 @Test
138 public void testSetLocationsNull() {
139 configurationFactory.setLocations(null);
140 assertNull(configurationFactory.getLocations());
141 }
142 }