| /* |
| * 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.combined; |
| |
| import static org.junit.Assert.assertEquals; |
| |
| import java.util.ArrayList; |
| import java.util.Collections; |
| import java.util.Locale; |
| |
| import org.apache.commons.configuration2.PropertiesConfiguration; |
| import org.apache.commons.configuration2.XMLPropertiesConfiguration; |
| import org.apache.commons.configuration2.builder.BasicConfigurationBuilder; |
| import org.apache.commons.configuration2.builder.BuilderParameters; |
| import org.apache.commons.configuration2.builder.FileBasedBuilderParametersImpl; |
| import org.apache.commons.configuration2.builder.ReloadingFileBasedConfigurationBuilder; |
| import org.apache.commons.configuration2.ex.ConfigurationException; |
| import org.easymock.EasyMock; |
| import org.junit.Test; |
| |
| /** |
| * Test class for {@code FileExtensionConfigurationBuilderProvider}. |
| * |
| */ |
| public class TestFileExtensionConfigurationBuilderProvider { |
| /** Constant for the name of the default configuration class. */ |
| private static final String DEF_CLASS = PropertiesConfiguration.class.getName(); |
| |
| /** Constant for the name of the matching class. */ |
| private static final String MATCH_CLASS = XMLPropertiesConfiguration.class.getName(); |
| |
| /** The test file extension. */ |
| private static final String EXT = "xml"; |
| |
| /** |
| * Creates a test instance with default settings. |
| * |
| * @return the test object |
| */ |
| private static FileExtensionConfigurationBuilderProvider setUpProvider() { |
| return new FileExtensionConfigurationBuilderProvider(BasicConfigurationBuilder.class.getName(), null, MATCH_CLASS, DEF_CLASS, EXT, null); |
| } |
| |
| /** |
| * Creates a mock for the configuration declaration. |
| * |
| * @return the mock object |
| */ |
| private ConfigurationDeclaration setUpDecl() { |
| final ConfigurationDeclaration decl = EasyMock.createMock(ConfigurationDeclaration.class); |
| EasyMock.replay(decl); |
| return decl; |
| } |
| |
| /** |
| * Tries to create an instance without the matching configuration class. |
| */ |
| @Test(expected = IllegalArgumentException.class) |
| public void testInitNoMatchingConfigClass() { |
| new FileExtensionConfigurationBuilderProvider(BasicConfigurationBuilder.class.getName(), null, null, DEF_CLASS, EXT, null); |
| } |
| |
| /** |
| * Tries to create an instance without the default configuration class. |
| */ |
| @Test(expected = IllegalArgumentException.class) |
| public void testInitNoDefaultConfigClass() { |
| new FileExtensionConfigurationBuilderProvider(BasicConfigurationBuilder.class.getName(), null, MATCH_CLASS, null, EXT, null); |
| } |
| |
| /** |
| * Tries to create an instance without a file extension. |
| */ |
| @Test(expected = IllegalArgumentException.class) |
| public void testInitNoExt() { |
| new FileExtensionConfigurationBuilderProvider(BasicConfigurationBuilder.class.getName(), null, MATCH_CLASS, DEF_CLASS, null, null); |
| } |
| |
| /** |
| * Tests whether the super class is correctly initialized. |
| */ |
| @Test |
| public void testInitSuper() { |
| final FileExtensionConfigurationBuilderProvider provider = new FileExtensionConfigurationBuilderProvider(BasicConfigurationBuilder.class.getName(), |
| ReloadingFileBasedConfigurationBuilder.class.getName(), MATCH_CLASS, DEF_CLASS, EXT, null); |
| assertEquals("Wrong builder class", BasicConfigurationBuilder.class.getName(), provider.getBuilderClass()); |
| assertEquals("Wrong reloading builder class", ReloadingFileBasedConfigurationBuilder.class.getName(), provider.getReloadingBuilderClass()); |
| assertEquals("Wrong configuration class", DEF_CLASS, provider.getConfigurationClass()); |
| } |
| |
| /** |
| * Tests whether the correct configuration class is selected if no file-based parameters are provided. |
| */ |
| @Test |
| public void testDetermineConfigurationClassNoParams() throws ConfigurationException { |
| final ConfigurationDeclaration decl = setUpDecl(); |
| final FileExtensionConfigurationBuilderProvider provider = setUpProvider(); |
| assertEquals("Wrong class", DEF_CLASS, provider.determineConfigurationClass(decl, new ArrayList<>())); |
| } |
| |
| /** |
| * Tests whether the correct configuration class is selected if the file name does not have an extension. |
| */ |
| @Test |
| public void testDetermineConfigurationClassNoExtension() throws ConfigurationException { |
| final ConfigurationDeclaration decl = setUpDecl(); |
| final BuilderParameters params = new FileBasedBuilderParametersImpl().setPath("C:\\Test\\someTestConfiguration"); |
| final FileExtensionConfigurationBuilderProvider provider = setUpProvider(); |
| assertEquals("Wrong class", DEF_CLASS, provider.determineConfigurationClass(decl, Collections.singleton(params))); |
| } |
| |
| /** |
| * Tests whether the correct configuration class is selected if the file extension does not match. |
| */ |
| @Test |
| public void testDetermineConfigurationClassExtensionNoMatch() throws ConfigurationException { |
| final ConfigurationDeclaration decl = setUpDecl(); |
| final BuilderParameters params = new FileBasedBuilderParametersImpl().setPath("C:\\Test\\someTestConfiguration.properties"); |
| final FileExtensionConfigurationBuilderProvider provider = setUpProvider(); |
| assertEquals("Wrong class", DEF_CLASS, provider.determineConfigurationClass(decl, Collections.singleton(params))); |
| } |
| |
| /** |
| * Tests whether the correct configuration class is selected if no file name is set. |
| */ |
| @Test |
| public void testDeterminieConfigurationClassNoFileName() throws ConfigurationException { |
| final ConfigurationDeclaration decl = setUpDecl(); |
| final BuilderParameters params = new FileBasedBuilderParametersImpl(); |
| final FileExtensionConfigurationBuilderProvider provider = setUpProvider(); |
| assertEquals("Wrong class", DEF_CLASS, provider.determineConfigurationClass(decl, Collections.singleton(params))); |
| } |
| |
| /** |
| * Tests whether the correct configuration class is selected if the file extension matches. |
| */ |
| @Test |
| public void testDetermineConfigurationClassExtensionMatch() throws ConfigurationException { |
| final ConfigurationDeclaration decl = setUpDecl(); |
| final BuilderParameters params = new FileBasedBuilderParametersImpl().setPath("C:\\Test\\someTestConfiguration." + EXT); |
| final FileExtensionConfigurationBuilderProvider provider = setUpProvider(); |
| assertEquals("Wrong class", MATCH_CLASS, provider.determineConfigurationClass(decl, Collections.singleton(params))); |
| } |
| |
| /** |
| * Tests that matches of file extensions are case insensitive. |
| */ |
| @Test |
| public void testDetermineConfigurationClassMatchCase() throws ConfigurationException { |
| final ConfigurationDeclaration decl = setUpDecl(); |
| final BuilderParameters params = new FileBasedBuilderParametersImpl().setPath("C:\\Test\\someTestConfiguration." + EXT.toUpperCase(Locale.ENGLISH)); |
| final FileExtensionConfigurationBuilderProvider provider = setUpProvider(); |
| assertEquals("Wrong class", MATCH_CLASS, provider.determineConfigurationClass(decl, Collections.singleton(params))); |
| } |
| } |