package org.fluentlenium.configuration;
import org.junit.Test;
import static org.assertj.core.api.Assertions.assertThat;
public class ConfigurationFactoryProviderTest {
public static class DummyContainer {
}
public static class CustomConfigurationFactory implements ConfigurationFactory {
@Override
public Configuration newConfiguration(Class<?> containerClass, ConfigurationProperties configurationDefaults) {
return new ProgrammaticConfiguration();
}
}
public static class FailingConstructorConfigurationFactory implements ConfigurationFactory {
public FailingConstructorConfigurationFactory() {
throw new IllegalStateException("This must FAIL!");
}
@Override
public Configuration newConfiguration(Class<?> containerClass, ConfigurationProperties configurationDefaults) {
return new ProgrammaticConfiguration();
}
}
public static class FailingConfigurationConfigurationFactory implements ConfigurationFactory {
@Override
public Configuration newConfiguration(Class<?> containerClass, ConfigurationProperties configurationDefaults) {
ProgrammaticConfiguration programmaticConfiguration = new ProgrammaticConfiguration();
programmaticConfiguration.setConfigurationDefaults(FailingConfigurationDefaults.class);
return programmaticConfiguration;
}
}
@FluentConfiguration(configurationFactory = CustomConfigurationFactory.class)
public static class CustomContainer {
}
@FluentConfiguration(configurationFactory = FailingConstructorConfigurationFactory.class)
public static class FailingContainer {
}
@FluentConfiguration(configurationFactory = FailingConfigurationConfigurationFactory.class)
public static class FailingConfigurationContainer {
}
public static class CustomConfigurationDefaults extends ConfigurationDefaults {
@Override
public String getBaseUrl() {
return "custom-base-url";
}
}
private static final class PrivateConfigurationDefaults extends ConfigurationDefaults {
private PrivateConfigurationDefaults() {
}
}
public static final class FailingConfigurationDefaults extends ConfigurationDefaults {
private FailingConfigurationDefaults() {
throw new IllegalStateException("This must FAIL!");
}
}
@FluentConfiguration(configurationDefaults = CustomConfigurationDefaults.class)
public static class CustomDefaultsContainer {
}
@FluentConfiguration(configurationDefaults = PrivateConfigurationDefaults.class)
public static class PrivateDefaultsContainer {
}
@Test
public void testDefaultConfiguration() {
Configuration configuration = ConfigurationFactoryProvider.newConfiguration(DummyContainer.class);
assertThat(configuration).isExactlyInstanceOf(ComposedConfiguration.class);
}
@Test
public void testCustomConfiguration() {
Configuration configuration = ConfigurationFactoryProvider.newConfiguration(CustomContainer.class);
assertThat(configuration).isExactlyInstanceOf(ProgrammaticConfiguration.class);
}
@Test
public void testPrivateCustomConfiguration() {
Configuration configuration = ConfigurationFactoryProvider.newConfiguration(PrivateDefaultsContainer.class);
assertThat(configuration).isNotNull();
}
@Test(expected = ConfigurationException.class)
public void testInvalidClassConfiguration() {
ConfigurationFactoryProvider.newConfiguration(FailingContainer.class);
}
@Test(expected = ConfigurationException.class)
public void testInvalidConfigurationClassConfiguration() {
ConfigurationFactoryProvider.newConfiguration(FailingConfigurationContainer.class);
}
@Test
public void testCustomConfigurationDefaults() {
Configuration configuration = ConfigurationFactoryProvider.newConfiguration(CustomDefaultsContainer.class);
assertThat(configuration.getBaseUrl()).isEqualTo("custom-base-url");
}
}