blob: 589232a09d6779e7adb0458c3723d89b3f755c84 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.commons.configuration2.builder;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNotSame;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import java.io.File;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.configuration2.ConfigurationAssert;
import org.apache.commons.configuration2.beanutils.BeanHelper;
import org.apache.commons.configuration2.io.FileBased;
import org.apache.commons.configuration2.io.FileHandler;
import org.apache.commons.configuration2.io.FileLocationStrategy;
import org.apache.commons.configuration2.io.FileSystem;
import org.easymock.EasyMock;
import org.junit.Test;
/**
* Test class for {@code FileBasedBuilderParametersImpl}.
*
*/
public class TestFileBasedBuilderParameters
{
/**
* Tests the standard constructor.
*/
@Test
public void testInitDefaults()
{
final FileBasedBuilderParametersImpl params = new FileBasedBuilderParametersImpl();
assertFalse("Got a location", params.getFileHandler()
.isLocationDefined());
assertNull("Got a refresh delay", params.getReloadingRefreshDelay());
}
/**
* Tests whether a file handler is accepted by the constructor.
*/
@Test
public void testInitFileHandler()
{
final FileHandler handler = new FileHandler();
final FileBasedBuilderParametersImpl params =
new FileBasedBuilderParametersImpl(handler);
assertSame("Wrong handler", handler, params.getFileHandler());
}
/**
* Tests whether the refresh delay can be set.
*/
@Test
public void testSetReloadingRefreshDelay()
{
final FileBasedBuilderParametersImpl params = new FileBasedBuilderParametersImpl();
final Long delay = 10000L;
assertSame("Wrong result", params,
params.setReloadingRefreshDelay(delay));
assertEquals("Wrong delay", delay, params.getReloadingRefreshDelay());
}
/**
* Tests whether a factory for reloading detectors can be set.
*/
@Test
public void testSetReloadingDetectorFactory()
{
final ReloadingDetectorFactory factory =
EasyMock.createMock(ReloadingDetectorFactory.class);
EasyMock.replay(factory);
final FileBasedBuilderParametersImpl params =
new FileBasedBuilderParametersImpl();
assertNull("Got a factory", params.getReloadingDetectorFactory());
assertSame("Wrong result", params,
params.setReloadingDetectorFactory(factory));
assertSame("Factory not set", factory,
params.getReloadingDetectorFactory());
}
/**
* Tests whether a file can be set.
*/
@Test
public void testSetFile()
{
final File file =
ConfigurationAssert.getTestFile("test.properties")
.getAbsoluteFile();
final FileBasedBuilderParametersImpl params = new FileBasedBuilderParametersImpl();
assertSame("Wrong result", params, params.setFile(file));
assertEquals("Wrong file", file, params.getFileHandler().getFile());
}
/**
* Tests whether a URL can be set.
*/
@Test
public void testSetURL()
{
final URL url = ConfigurationAssert.getTestURL("test.properties");
final FileBasedBuilderParametersImpl params = new FileBasedBuilderParametersImpl();
assertSame("Wrong result", params, params.setURL(url));
assertEquals("Wrong URL", url.toExternalForm(), params.getFileHandler()
.getURL().toExternalForm());
}
/**
* Tests whether a path can be set.
*/
@Test
public void testSetPath()
{
final String path =
ConfigurationAssert.getTestFile("test.properties")
.getAbsolutePath();
final FileBasedBuilderParametersImpl params = new FileBasedBuilderParametersImpl();
assertSame("Wrong result", params, params.setPath(path));
assertEquals("Wrong path", path, params.getFileHandler().getPath());
}
/**
* Tests whether a file name can be set.
*/
@Test
public void testSetFileName()
{
final String name = "testConfig.xml";
final FileBasedBuilderParametersImpl params = new FileBasedBuilderParametersImpl();
assertSame("Wrong result", params, params.setFileName(name));
assertEquals("Wrong name", name, params.getFileHandler().getFileName());
}
/**
* Tests whether a base path can be set.
*/
@Test
public void testSetBasePath()
{
final String path =
ConfigurationAssert.getTestFile("test.properties").getParentFile()
.getAbsolutePath();
final FileBasedBuilderParametersImpl params = new FileBasedBuilderParametersImpl();
assertSame("Wrong result", params, params.setBasePath(path));
assertEquals("Wrong path", path, params.getFileHandler().getBasePath());
}
/**
* Tests whether a file system can be set.
*/
@Test
public void testSetFileSystem()
{
final FileSystem fs = EasyMock.createMock(FileSystem.class);
EasyMock.replay(fs);
final FileBasedBuilderParametersImpl params = new FileBasedBuilderParametersImpl();
assertSame("Wrong result", params, params.setFileSystem(fs));
assertSame("Wrong file system", fs, params.getFileHandler()
.getFileSystem());
}
/**
* Tests whether a location strategy can be set.
*/
@Test
public void testSetLocationStrategy()
{
final FileLocationStrategy strat =
EasyMock.createMock(FileLocationStrategy.class);
EasyMock.replay(strat);
final FileBasedBuilderParametersImpl params =
new FileBasedBuilderParametersImpl();
assertSame("Wrong result", params, params.setLocationStrategy(strat));
assertSame("Wrong location strategy", strat, params.getFileHandler()
.getLocationStrategy());
}
/**
* Tests whether an encoding can be set.
*/
@Test
public void testSetEncoding()
{
final String enc = "ISO-8859-1";
final FileBasedBuilderParametersImpl params = new FileBasedBuilderParametersImpl();
assertSame("Wrong result", params, params.setEncoding(enc));
assertSame("Wrong encoding", enc, params.getFileHandler().getEncoding());
}
/**
* Tests whether a map with parameters can be queried.
*/
@Test
public void testGetParameters()
{
final FileBasedBuilderParametersImpl params =
new FileBasedBuilderParametersImpl()
.setReloadingRefreshDelay(1000L);
params.setThrowExceptionOnMissing(true);
final Map<String, Object> map = params.getParameters();
assertTrue("Object not stored", map.containsValue(params));
assertEquals("Wrong exception flag", Boolean.TRUE, params
.getParameters().get("throwExceptionOnMissing"));
}
/**
* Tests fromParameters() if the map does not contain an instance.
*/
@Test
public void testFromParametersNotFound()
{
assertNull("Got an instance",
FileBasedBuilderParametersImpl
.fromParameters(new HashMap<>()));
}
/**
* Tests whether fromParameters() can return a default instance if the map
* does not contain an instance.
*/
@Test
public void testFromParametersDefaultInstance()
{
final FileBasedBuilderParametersImpl params =
FileBasedBuilderParametersImpl.fromParameters(
new HashMap<>(), true);
assertFalse("Got a location", params.getFileHandler()
.isLocationDefined());
}
/**
* Tests whether an instance can be extracted from a parameters map.
*/
@Test
public void testFromParametersExtract()
{
final FileBasedBuilderParametersImpl params = new FileBasedBuilderParametersImpl();
final Map<String, Object> map = params.getParameters();
assertSame("Wrong parameters", params,
FileBasedBuilderParametersImpl.fromParameters(map));
}
/**
* Tries to obtain an instance from a null parameters map.
*/
@Test(expected = IllegalArgumentException.class)
public void testFromParametersNull()
{
FileBasedBuilderParametersImpl.fromParameters(null);
}
/**
* Tests whether reflection-based property access through BeanUtils is
* possible.
*/
@Test
public void testBeanPropertiesAccess() throws Exception
{
final FileBasedBuilderParametersImpl params =
new FileBasedBuilderParametersImpl();
BeanHelper.setProperty(params, "throwExceptionOnMissing",
Boolean.TRUE);
BeanHelper.setProperty(params, "fileName", "test.xml");
assertEquals("File name not set", "test.xml", params.getFileHandler()
.getFileName());
final Map<String, Object> map = params.getParameters();
assertEquals("Property not stored", Boolean.TRUE,
map.get("throwExceptionOnMissing"));
}
/**
* Tests a clone operation.
*/
@Test
public void testClone()
{
final FileBased content = EasyMock.createMock(FileBased.class);
EasyMock.replay(content);
final FileHandler fh = new FileHandler(content);
final FileBasedBuilderParametersImpl params =
new FileBasedBuilderParametersImpl(fh);
params.setThrowExceptionOnMissing(true);
params.setFileName("test.xml");
final FileBasedBuilderParametersImpl clone = params.clone();
assertEquals("Wrong exception flag", Boolean.TRUE, clone
.getParameters().get("throwExceptionOnMissing"));
assertEquals("File name not copied", "test.xml", clone.getFileHandler()
.getFileName());
assertSame("Content not copied", content, clone.getFileHandler()
.getContent());
assertNotSame("No copy of file handler", params.getFileHandler(),
clone.getFileHandler());
}
/**
* Tests whether an instance can be created from a map.
*/
@Test
public void testFromMap()
{
final ReloadingDetectorFactory factory =
EasyMock.createMock(ReloadingDetectorFactory.class);
EasyMock.replay(factory);
final Map<String, Object> map = new HashMap<>();
final String fileName = "someFileName";
final String basePath = "someBasePath";
final Long refreshDelay = 20140628222302L;
map.put("basePath", basePath);
map.put("fileName", fileName);
map.put("reloadingDetectorFactory", factory);
map.put("reloadingRefreshDelay", refreshDelay);
final FileBasedBuilderParametersImpl params =
FileBasedBuilderParametersImpl.fromMap(map);
assertEquals("Wrong base path", basePath, params.getFileHandler()
.getBasePath());
assertEquals("Wrong file name", fileName, params.getFileHandler()
.getFileName());
assertEquals("Wrong detector factory", factory,
params.getReloadingDetectorFactory());
assertEquals("Wrong refresh delay", refreshDelay,
params.getReloadingRefreshDelay());
}
/**
* Tests fromMap() for null input.
*/
@Test
public void testFromMapNull()
{
final FileBasedBuilderParametersImpl params =
FileBasedBuilderParametersImpl.fromMap(null);
assertNull("Got refresh delay", params.getReloadingRefreshDelay());
assertNull("Got a file name", params.getFileHandler().getFileName());
}
/**
* Tests whether properties can be inherited from another object.
*/
@Test
public void testInheritFrom()
{
final FileBasedBuilderParametersImpl params =
new FileBasedBuilderParametersImpl();
params.setEncoding("ISO-8856-1");
params.setPath("A path");
params.setReloadingDetectorFactory(
EasyMock.createMock(ReloadingDetectorFactory.class));
params.setFileSystem(EasyMock.createMock(FileSystem.class));
params.setLocationStrategy(EasyMock.createMock(FileLocationStrategy.class));
params.setReloadingRefreshDelay(20160213171737L);
params.setThrowExceptionOnMissing(true);
final FileBasedBuilderParametersImpl params2 =
new FileBasedBuilderParametersImpl();
params2.inheritFrom(params.getParameters());
assertEquals("Encoding not set", params.getFileHandler().getEncoding(),
params2.getFileHandler().getEncoding());
assertEquals("File system not set",
params.getFileHandler().getFileSystem(),
params2.getFileHandler().getFileSystem());
assertEquals("Location strategy not set",
params.getFileHandler().getLocationStrategy(),
params2.getFileHandler().getLocationStrategy());
assertEquals("Detector factory not set",
params.getReloadingDetectorFactory(),
params2.getReloadingDetectorFactory());
assertEquals("Refresh delay not set", params.getReloadingRefreshDelay(),
params2.getReloadingRefreshDelay());
assertNull("Path was copied", params2.getFileHandler().getPath());
assertEquals("Base properties not set", Boolean.TRUE,
params2.getParameters().get("throwExceptionOnMissing"));
}
/**
* Tests that missing properties in the passed in map are skipped by
* inheritFrom().
*/
@Test
public void testInheritFromSkipMissingProperties()
{
final String encoding = "UTF-16";
final ReloadingDetectorFactory factory =
EasyMock.createMock(ReloadingDetectorFactory.class);
final Long refreshDelay = 20160213172611L;
final FileBasedBuilderParametersImpl params =
new FileBasedBuilderParametersImpl().setEncoding(encoding)
.setReloadingDetectorFactory(factory)
.setReloadingRefreshDelay(refreshDelay);
params.inheritFrom(
new FileBasedBuilderParametersImpl().getParameters());
assertEquals("Encoding overwritten", encoding,
params.getFileHandler().getEncoding());
assertEquals("Detector factory overwritten", factory,
params.getReloadingDetectorFactory());
assertEquals("Refresh delay overwritten", refreshDelay,
params.getReloadingRefreshDelay());
}
/**
* Tests inheritFrom() if no parameters object can be found in the map.
*/
@Test
public void testInheritFromNoParametersObject()
{
final FileBasedBuilderParametersImpl params =
new FileBasedBuilderParametersImpl()
.setReloadingRefreshDelay(20160213211429L);
params.inheritFrom(new HashMap<>());
assertNotNull("Properties were overwritten",
params.getReloadingRefreshDelay());
}
}