View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *     https://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
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   * Spring FactoryBean test.
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      void testAfterPropertiesSet() throws Exception {
52          assertThrows(IllegalArgumentException.class, configurationFactory::afterPropertiesSet);
53      }
54  
55      @Test
56      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      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      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      void testInitialConfiguration() throws Exception {
85          configurationFactory = new ConfigurationPropertiesFactoryBean(new BaseConfiguration());
86          configurationFactory.afterPropertiesSet();
87          assertNotNull(configurationFactory.getConfiguration());
88      }
89  
90      @Test
91      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     void testMergeConfigurations() throws Exception {
102         final Configuration one = new BaseConfiguration();
103         one.setProperty("foo", "bar");
104         // @formatter:off
105         final String properties = "## some header \n"
106                 + "foo = bar1\n"
107                 + "bar = foo\n";
108         // @formatter:on
109 
110         final PropertiesConfiguration two = new PropertiesConfiguration();
111         final PropertiesConfigurationLayout layout = new PropertiesConfigurationLayout();
112         layout.load(two, new StringReader(properties));
113 
114         configurationFactory.setConfigurations(one, two);
115         configurationFactory.afterPropertiesSet();
116         final Properties props = configurationFactory.getObject();
117         assertEquals("foo", props.getProperty("bar"));
118         assertEquals("bar", props.getProperty("foo"));
119     }
120 
121     @Test
122     void testSetConfigurationsDefensiveCopy() {
123         final Configuration[] configs = {new PropertiesConfiguration(), new XMLConfiguration()};
124         final Configuration[] configsUpdate = configs.clone();
125 
126         configurationFactory.setConfigurations(configsUpdate);
127         configsUpdate[0] = null;
128         assertArrayEquals(configs, configurationFactory.getConfigurations());
129     }
130 
131     @Test
132     void testSetLocationsDefensiveCopy() {
133         final Resource[] locations = {new ClassPathResource("f1"), new ClassPathResource("f2")};
134         final Resource[] locationsUpdate = locations.clone();
135 
136         configurationFactory.setLocations(locationsUpdate);
137         locationsUpdate[0] = new ClassPathResource("other");
138         assertArrayEquals(locations, configurationFactory.getLocations());
139     }
140 
141     @Test
142     void testSetLocationsNull() {
143         configurationFactory.setLocations(null);
144         assertNull(configurationFactory.getLocations());
145     }
146 }