package net.thucydides.core.webdriver;
import net.thucydides.core.steps.StepEventBus;
import net.thucydides.core.util.MockEnvironmentVariables;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.mockito.MockitoAnnotations;
import org.openqa.selenium.firefox.FirefoxProfile;
import java.lang.reflect.InvocationTargetException;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;
import static org.mockito.Mockito.mock;
public class WhenManagingWebdriverInstances {
WebdriverInstanceFactory webdriverInstanceFactory;
MockEnvironmentVariables environmentVariables;
WebdriverManager webdriverManager;
WebDriverFactory factory;
Configuration configuration;
FirefoxProfile firefoxProfile;
private void initWebdriverManagers() throws IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException {
firefoxProfile = mock(FirefoxProfile.class);
webdriverInstanceFactory = new WebdriverInstanceFactory();
factory = new WebDriverFactory(webdriverInstanceFactory, environmentVariables) {
@Override
protected FirefoxProfile createNewFirefoxProfile() {
return firefoxProfile;
}
};
configuration = new SystemPropertiesConfiguration(environmentVariables);
webdriverManager = new ThucydidesWebdriverManager(factory, configuration);
webdriverManager.closeAllCurrentDrivers();
}
@Before
public void createATestableDriverFactory() throws Exception {
MockitoAnnotations.initMocks(this);
environmentVariables = new MockEnvironmentVariables();
initWebdriverManagers();
StepEventBus.getEventBus().clearStepFailures();
}
@After
public void closeDriver() {
webdriverManager.closeAllCurrentDrivers();
}
@Test
public void if_an_empty_driver_type_is_specified_the_default_driver_should_be_used() {
WebDriverFacade defaultDriver = (WebDriverFacade) webdriverManager.getWebdriver();
WebDriverFacade driver = (WebDriverFacade) webdriverManager.getWebdriver("");
assertThat(driver, is(defaultDriver));
}
@Test
public void if_a_null_driver_type_is_specified_the_default_driver_should_be_used() {
WebDriverFacade defaultDriver = (WebDriverFacade) webdriverManager.getWebdriver();
WebDriverFacade driver = (WebDriverFacade) webdriverManager.getWebdriver(null);
assertThat(driver, is(defaultDriver));
}
@Test
public void the_default_driver_should_be_the_firefox_driver() {
WebDriverFacade defaultDriver = (WebDriverFacade) webdriverManager.getWebdriver();
WebDriverFacade firefoxDriver = (WebDriverFacade) webdriverManager.getWebdriver("firefox");
assertThat(firefoxDriver, is(defaultDriver));
}
@Test
public void driver_names_should_be_case_insensitive() {
WebDriverFacade uppercaseFirefoxDriver = (WebDriverFacade) webdriverManager.getWebdriver("Firefox");
WebDriverFacade firefoxDriver = (WebDriverFacade) webdriverManager.getWebdriver("firefox");
assertThat(firefoxDriver, is(uppercaseFirefoxDriver));
}
@Test
public void driver_names_for_non_default_drivers_should_be_case_insensitive() {
WebDriverFacade uppercaseFirefoxDriver = (WebDriverFacade) webdriverManager.getWebdriver("htmlUnit");
WebDriverFacade firefoxDriver = (WebDriverFacade) webdriverManager.getWebdriver("htmlunit");
assertThat(firefoxDriver, is(uppercaseFirefoxDriver));
}
@Test
public void the_default_output_directory_can_be_overrided_via_a_system_property() {
environmentVariables.setProperty("thucydides.outputDirectory","out");
SystemPropertiesConfiguration config = new SystemPropertiesConfiguration(environmentVariables);
assertThat(config.getOutputDirectory().getName(), is("out"));
}
@Test
public void should_close_drivers_in_current_thread() {
ThucydidesWebdriverManager aWebdriverManager = new ThucydidesWebdriverManager(factory, configuration);
aWebdriverManager.getWebdriver("firefox");
aWebdriverManager.getWebdriver("htmlunit");
aWebdriverManager.getWebdriver("chrome");
assertThat(aWebdriverManager.getCurrentActiveWebdriverCount(), is(3));
aWebdriverManager.closeAllCurrentDrivers();
assertThat(aWebdriverManager.getCurrentActiveWebdriverCount(), is(0));
}
@Test
public void should_close_individual_driver_in_current_thread() {
ThucydidesWebdriverManager aWebdriverManager = new ThucydidesWebdriverManager(factory, configuration);
aWebdriverManager.getWebdriver("firefox");
aWebdriverManager.getWebdriver("htmlunit");
aWebdriverManager.getWebdriver("chrome");
assertThat(aWebdriverManager.getCurrentActiveWebdriverCount(), is(3));
assertThat(aWebdriverManager.getActiveWebdriverCount(), is(3));
aWebdriverManager.closeDriver();
assertThat(aWebdriverManager.getCurrentActiveWebdriverCount(), is(2));
assertThat(aWebdriverManager.getActiveWebdriverCount(), is(2));
}
@Test
public void should_close_drivers_in_all_threads() {
ThucydidesWebdriverManager aWebdriverManager = new ThucydidesWebdriverManager(factory, configuration);
aWebdriverManager.getWebdriver("firefox");
aWebdriverManager.getWebdriver("htmlunit");
aWebdriverManager.getWebdriver("chrome");
assertThat(aWebdriverManager.getActiveWebdriverCount(), is(3));
aWebdriverManager.closeAllDrivers();
assertThat(aWebdriverManager.getActiveWebdriverCount(), is(0));
}
@Test
public void should_close_drivers_in_all_threads_after_driver_resets() {
ThucydidesWebdriverManager aWebdriverManager = new ThucydidesWebdriverManager(factory, configuration);
aWebdriverManager.getWebdriver("firefox");
aWebdriverManager.getWebdriver("htmlunit");
aWebdriverManager.getWebdriver("chrome");
assertThat(aWebdriverManager.getActiveWebdriverCount(), is(3));
aWebdriverManager.resetDriver();
aWebdriverManager.closeAllDrivers();
assertThat(aWebdriverManager.getActiveWebdriverCount(), is(0));
}
}