package org.fluentlenium.configuration;
import org.assertj.core.api.Assertions;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.remote.DesiredCapabilities;
import java.io.IOException;
import java.net.URL;
import java.util.Properties;
public class PropertiesBackendConfigurationTest {
private static final String DRIVER_LIFECYCLE = "driverLifecycle";
public static class DummyConfigurationFactory implements ConfigurationFactory {
@Override
public Configuration newConfiguration(Class<?> containerClass, ConfigurationProperties configurationDefaults) {
return null;
}
}
public static class DummyConfigurationDefaults extends ConfigurationDefaults {
}
private PropertiesBackendConfiguration configuration;
private Properties properties;
@Before
public void before() {
properties = new Properties();
configuration = new PropertiesBackendConfiguration(new DefaultPropertiesBackend(properties), "");
}
public PropertiesBackendConfiguration getConfiguration() {
return configuration;
}
protected void mockProperty(String propertyName, Object propertyValue) {
if (propertyValue == null) {
properties.remove(propertyName);
} else {
properties.setProperty(propertyName, valueToString(propertyValue));
}
}
protected String valueToString(Object propertyValue) {
if (propertyValue == null) {
return null;
}
if (propertyValue instanceof Class) {
return ((Class) propertyValue).getName();
}
return String.valueOf(propertyValue);
}
@Test
public void configurationFactory() {
Assertions.assertThat(getConfiguration().getConfigurationFactory()).isNull();
mockProperty("configurationFactory", DummyConfigurationFactory.class);
Assertions.assertThat(getConfiguration().getConfigurationFactory()).isEqualTo(DummyConfigurationFactory.class);
}
@Test
public void notConfigurationFactoryClass() {
Assertions.assertThat(getConfiguration().getConfigurationFactory()).isNull();
mockProperty("configurationFactory", Object.class);
Assertions.assertThat(getConfiguration().getConfigurationFactory()).isNull();
}
@Test
public void configurationDefaults() {
Assertions.assertThat(getConfiguration().getConfigurationDefaults()).isNull();
mockProperty("configurationDefaults", DummyConfigurationDefaults.class);
Assertions.assertThat(getConfiguration().getConfigurationDefaults()).isEqualTo(DummyConfigurationDefaults.class);
}
@Test
public void notFoundClass() {
Assertions.assertThat(getConfiguration().getConfigurationFactory()).isNull();
mockProperty("configurationFactory", "dummy");
Assertions.assertThat(getConfiguration().getConfigurationFactory()).isNull();
}
@Test
public void webDriver() {
Assertions.assertThat(getConfiguration().getWebDriver()).isNull();
mockProperty("webDriver", "firefox");
Assertions.assertThat(getConfiguration().getWebDriver()).isEqualTo("firefox");
}
@Test
public void remoteUrl() {
Assertions.assertThat(getConfiguration().getRemoteUrl()).isNull();
mockProperty("remoteUrl", "http://localhost:4444");
Assertions.assertThat(getConfiguration().getRemoteUrl()).isEqualTo("http://localhost:4444");
}
@Test
public void capabilities() {
Assertions.assertThat(getConfiguration().getWebDriver()).isNull();
mockProperty("capabilities", "{\"javascriptEnabled\": true}");
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setJavascriptEnabled(true);
Assertions.assertThat(getConfiguration().getCapabilities()).isEqualTo(capabilities);
mockProperty("capabilities", "{\"javascriptEnabled\": false}");
Assertions.assertThat(getConfiguration().getCapabilities()).isNotEqualTo(capabilities);
}
@Test
public void desiredCapabilities() {
Assertions.assertThat(getConfiguration().getWebDriver()).isNull();
mockProperty("capabilities", "firefox");
DesiredCapabilities capabilities = DesiredCapabilities.firefox();
Assertions.assertThat(getConfiguration().getCapabilities()).isEqualTo(capabilities);
mockProperty("capabilities", "chrome");
Assertions.assertThat(getConfiguration().getCapabilities()).isNotEqualTo(capabilities);
}
@Test
public void capabilitiesClassName() {
Assertions.assertThat(getConfiguration().getWebDriver()).isNull();
mockProperty("capabilities", TestCapabilities.class.getName());
Assertions.assertThat(getConfiguration().getCapabilities()).isExactlyInstanceOf(TestCapabilities.class);
}
@Test
public void capabilitiesFactory() {
Assertions.assertThat(getConfiguration().getWebDriver()).isNull();
mockProperty("capabilities", "test-capabilities-factory");
Assertions.assertThat(getConfiguration().getCapabilities()).isExactlyInstanceOf(TestCapabilities.class);
}
@Test
public void capabilitiesURL() throws IOException {
Assertions.assertThat(getConfiguration().getCapabilities()).isNull();
URL capabilitiesURL = getClass().getResource("/org/fluentlenium/configuration/capabilities.json");
mockProperty("capabilities", capabilitiesURL.toString());
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setJavascriptEnabled(true);
Assertions.assertThat(getConfiguration().getCapabilities()).isEqualTo(capabilities);
URL capabilitiesFalseURL = getClass().getResource("/org/fluentlenium/configuration/capabilities-false.json");
mockProperty("capabilities", capabilitiesFalseURL.toString());
Assertions.assertThat(getConfiguration().getCapabilities()).isNotEqualTo(capabilities);
}
@Test
public void baseUrl() {
Assertions.assertThat(getConfiguration().getBaseUrl()).isNull();
mockProperty("baseUrl", "http://localhost:3000");
Assertions.assertThat(getConfiguration().getBaseUrl()).isEqualTo("http://localhost:3000");
}
@Test
public void baseUrlWithPrefix() {
Assertions.assertThat(getConfiguration().getBaseUrl()).isNull();
mockProperty("baseUrl", "http://localhost:3000");
Assertions.assertThat(getConfiguration().getBaseUrl()).isEqualTo("http://localhost:3000");
}
@Test
public void baseUrlNull() {
Assertions.assertThat(getConfiguration().getBaseUrl()).isNull();
mockProperty("baseUrl", null);
Assertions.assertThat(getConfiguration().getBaseUrl()).isNull();
}
@Test
public void eventsEnabled() {
Assertions.assertThat(getConfiguration().getEventsEnabled()).isNull();
mockProperty("eventsEnabled", true);
Assertions.assertThat(getConfiguration().getEventsEnabled()).isTrue();
}
@Test
public void pageLoadTimeout() {
Assertions.assertThat(getConfiguration().getPageLoadTimeout()).isNull();
mockProperty("pageLoadTimeout", 1000L);
Assertions.assertThat(getConfiguration().getPageLoadTimeout()).isEqualTo(1000L);
}
@Test
public void implicitlyWait() {
Assertions.assertThat(getConfiguration().getImplicitlyWait()).isNull();
mockProperty("implicitlyWait", 1000L);
Assertions.assertThat(getConfiguration().getImplicitlyWait()).isEqualTo(1000L);
}
@Test
public void implicitlyWaitNotNumber() {
Assertions.assertThat(getConfiguration().getImplicitlyWait()).isNull();
mockProperty("implicitlyWait", "dummy");
Assertions.assertThat(getConfiguration().getImplicitlyWait()).isNull();
}
@Test
public void scriptTimeout() {
Assertions.assertThat(getConfiguration().getScriptTimeout()).isNull();
mockProperty("scriptTimeout", 1000L);
Assertions.assertThat(getConfiguration().getScriptTimeout()).isEqualTo(1000L);
}
@Test
public void awaitAtMost() {
Assertions.assertThat(getConfiguration().getAwaitAtMost()).isNull();
mockProperty("awaitAtMost", 1000L);
Assertions.assertThat(getConfiguration().getAwaitAtMost()).isEqualTo(1000L);
}
@Test
public void awaitPollingEvery() {
Assertions.assertThat(getConfiguration().getAwaitPollingEvery()).isNull();
mockProperty("awaitPollingEvery", 1000L);
Assertions.assertThat(getConfiguration().getAwaitPollingEvery()).isEqualTo(1000L);
}
@Test
public void screenshotPath() {
Assertions.assertThat(getConfiguration().getScreenshotPath()).isNull();
mockProperty("screenshotPath", "/path/");
Assertions.assertThat(getConfiguration().getScreenshotPath()).isEqualTo("/path/");
}
@Test
public void driverLifecycleClass() {
Assertions.assertThat(getConfiguration().getDriverLifecycle()).isNull();
mockProperty(DRIVER_LIFECYCLE, "cLaSS");
Assertions.assertThat(getConfiguration().getDriverLifecycle()).isEqualTo(ConfigurationProperties.DriverLifecycle.CLASS);
}
@Test
public void driverLifecycleMethod() {
Assertions.assertThat(getConfiguration().getDriverLifecycle()).isNull();
mockProperty(DRIVER_LIFECYCLE, "mEthOd");
Assertions.assertThat(getConfiguration().getDriverLifecycle())
.isEqualTo(ConfigurationProperties.DriverLifecycle.METHOD);
}
@Test
public void driverLifecycleJvm() {
Assertions.assertThat(getConfiguration().getDriverLifecycle()).isNull();
mockProperty(DRIVER_LIFECYCLE, "jvm");
Assertions.assertThat(getConfiguration().getDriverLifecycle())
.isEqualTo(ConfigurationProperties.DriverLifecycle.JVM);
}
@Test
public void driverLifecycleDefault() {
Assertions.assertThat(getConfiguration().getDriverLifecycle()).isNull();
mockProperty(DRIVER_LIFECYCLE, "deFaUlT");
Assertions.assertThat(getConfiguration().getDriverLifecycle())
.isEqualTo(ConfigurationProperties.DriverLifecycle.DEFAULT);
}
@Test
public void htmlDumpPath() {
Assertions.assertThat(getConfiguration().getHtmlDumpPath()).isNull();
mockProperty("htmlDumpPath", "/path/");
Assertions.assertThat(getConfiguration().getHtmlDumpPath()).isEqualTo("/path/");
}
@Test
public void screenshotMode() {
Assertions.assertThat(getConfiguration().getScreenshotMode()).isNull();
mockProperty("screenshotMode", ConfigurationProperties.TriggerMode.AUTOMATIC_ON_FAIL);
Assertions.assertThat(getConfiguration().getScreenshotMode())
.isEqualTo(ConfigurationProperties.TriggerMode.AUTOMATIC_ON_FAIL);
}
@Test
public void htmlDumpMode() {
Assertions.assertThat(getConfiguration().getHtmlDumpMode()).isNull();
mockProperty("htmlDumpMode", ConfigurationProperties.TriggerMode.AUTOMATIC_ON_FAIL);
Assertions.assertThat(getConfiguration().getHtmlDumpMode())
.isEqualTo(ConfigurationProperties.TriggerMode.AUTOMATIC_ON_FAIL);
}
@Test
public void custom() {
Assertions.assertThat(getConfiguration().getHtmlDumpMode()).isNull();
mockProperty("key", "value");
Assertions.assertThat(getConfiguration().getCustomProperty("key")).isEqualTo("value");
}
}