package org.fluentlenium.adapter;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.verify;
import org.fluentlenium.configuration.ConfigurationProperties;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import org.openqa.selenium.Capabilities;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.htmlunit.HtmlUnitDriver;
import org.openqa.selenium.internal.WrapsDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.support.events.EventFiringWebDriver;
@RunWith(MockitoJUnitRunner.class)
public class FluentAdapterTest {
@Mock
private WebDriver webDriver;
@Mock
private WebDriver webDriver2;
@Test
public void isDriverAvailableBehavesAsExpected() {
FluentAdapter adapter = new FluentAdapter();
adapter.initFluent(webDriver);
assertThat(adapter.isFluentControlAvailable()).isTrue();
adapter.initFluent(null);
assertThat(adapter.isFluentControlAvailable()).isFalse();
}
@Test
public void deletagesToWebDriverWhenInitialized() {
FluentAdapter adapter = new FluentAdapter();
adapter.initFluent(webDriver);
adapter.goTo("url");
verify(webDriver).get("url");
}
@Test
public void registeringSameDriverMultipleTimeDoesntThrowException() {
FluentAdapter adapter = new FluentAdapter();
adapter.initFluent(webDriver);
adapter.goTo("url");
verify(webDriver).get("url");
}
@Test(expected = IllegalStateException.class)
public void registeringAnotherDriverThrowException() {
FluentAdapter adapter = new FluentAdapter();
adapter.initFluent(webDriver);
adapter.initFluent(webDriver2);
}
@Test
public void registeringSameDriverDoesntThrowException() {
FluentAdapter adapter = new FluentAdapter();
adapter.initFluent(webDriver);
adapter.initFluent(webDriver);
}
@Test
public void shouldConfigureProperly() {
FluentAdapter adapter = new FluentAdapter();
adapter.getConfiguration().setScreenshotMode(ConfigurationProperties.TriggerMode.AUTOMATIC_ON_FAIL);
assertThat(adapter.getScreenshotMode()).isSameAs(ConfigurationProperties.TriggerMode.AUTOMATIC_ON_FAIL);
adapter.getConfiguration().setScreenshotMode(null);
adapter.getConfiguration().setScreenshotPath("path");
assertThat(adapter.getScreenshotPath()).isEqualTo("path");
adapter.getConfiguration().setScreenshotPath(null);
adapter.getConfiguration().setHtmlDumpMode(ConfigurationProperties.TriggerMode.AUTOMATIC_ON_FAIL);
assertThat(adapter.getHtmlDumpMode()).isSameAs(ConfigurationProperties.TriggerMode.AUTOMATIC_ON_FAIL);
adapter.getConfiguration().setHtmlDumpPath("dumpPath");
assertThat(adapter.getHtmlDumpPath()).isEqualTo("dumpPath");
assertThat(adapter.getBaseUrl()).isNull();
}
@Test
public void shouldNewWebDriverCreateNewInstances() {
FluentAdapter adapter = new FluentAdapter() {
@Override
public String getWebDriver() {
return "htmlunit";
}
@Override
public Capabilities getCapabilities() {
return DesiredCapabilities.htmlUnit();
}
};
adapter.initFluent(webDriver);
WebDriver newWebDriver = null;
WebDriver newWebDriver2 = null;
try {
newWebDriver = adapter.newWebDriver();
newWebDriver2 = adapter.newWebDriver();
assertThat(newWebDriver).isNotSameAs(newWebDriver2);
assertThat(newWebDriver).isInstanceOf(EventFiringWebDriver.class);
assertThat(newWebDriver2).isInstanceOf(EventFiringWebDriver.class);
assertThat(((WrapsDriver) newWebDriver).getWrappedDriver()).isInstanceOf(HtmlUnitDriver.class);
assertThat(((WrapsDriver) newWebDriver).getWrappedDriver()).isInstanceOf(HtmlUnitDriver.class);
} finally {
if (newWebDriver != null) {
newWebDriver.quit();
}
if (newWebDriver2 != null) {
newWebDriver2.quit();
}
}
}
}