package net.thucydides.core.webdriver; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; import static org.fest.assertions.Assertions.assertThat; import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; public class WhenKeepingTrackOfManagedWebdriverInstances { private WebdriverInstances webdriverInstances; @Before public void initMocks() { MockitoAnnotations.initMocks(this); webdriverInstances = new WebdriverInstances(); } @Mock WebDriver firefoxDriver; @Mock WebDriver iexplorerDriver; @Mock WebDriverFacade webDriverFacade; @Test public void should_be_able_to_register_a_named_driver() { webdriverInstances.registerDriverCalled("firefox").forDriver(firefoxDriver); assertThat(webdriverInstances.getCurrentDriver()).isEqualTo(firefoxDriver); } @Test public void should_be_able_to_quit_a_driver() { WebDriver firefoxDriver = mock(FirefoxDriver.class); webdriverInstances.registerDriverCalled("firefox").forDriver(firefoxDriver); webdriverInstances.closeCurrentDriver(); verify(firefoxDriver).quit(); } @Test public void should_be_able_to_reset_a_driver() { webdriverInstances.registerDriverCalled("firefox").forDriver(webDriverFacade); webdriverInstances.resetCurrentDriver(); verify(webDriverFacade).reset(); } @Test public void should_be_able_to_quit_all_drivers() { webdriverInstances.registerDriverCalled("firefox").forDriver(firefoxDriver); webdriverInstances.registerDriverCalled("iexplorer").forDriver(iexplorerDriver); webdriverInstances.closeAllDrivers(); verify(firefoxDriver).quit(); verify(iexplorerDriver).quit(); } @Test public void should_remove_current_driver_when_all_are_closed() { webdriverInstances.registerDriverCalled("firefox").forDriver(firefoxDriver); webdriverInstances.registerDriverCalled("iexplorer").forDriver(iexplorerDriver); webdriverInstances.closeAllDrivers(); assertThat(webdriverInstances.getCurrentDriver()).isNull(); } @Test public void should_remove_current_driver_when_closed() { webdriverInstances.registerDriverCalled("firefox").forDriver(firefoxDriver); webdriverInstances.closeCurrentDriver(); assertThat(webdriverInstances.getCurrentDriver()).isNull(); } @Test public void should_quit_the_driver_when_the_driver_is_closed() { webdriverInstances.registerDriverCalled("firefox").forDriver(firefoxDriver); webdriverInstances.closeCurrentDriver(); verify(firefoxDriver).quit(); } @Test public void should_not_fail_if_closing_an_inexistant_driver() { webdriverInstances.closeCurrentDriver(); } @Test public void should_know_when_a_driver_is_registered() { webdriverInstances.registerDriverCalled("firefox").forDriver(firefoxDriver); assertThat(webdriverInstances.driverIsRegisteredFor("firefox")).isTrue(); } @Test public void should_use_the_default_driver_if_not_specified() { webdriverInstances.registerDriverCalled("firefox").forDriver(firefoxDriver); WebDriver defaultDriver = webdriverInstances.useDriver(null); assertEquals(firefoxDriver, defaultDriver); } @Test public void should_use_the_default_driver_if_empty() { webdriverInstances.registerDriverCalled("firefox").forDriver(firefoxDriver); WebDriver defaultDriver = webdriverInstances.useDriver(""); assertEquals(firefoxDriver, defaultDriver); } @Test public void should_know_the_current_driver_in_use() { webdriverInstances.registerDriverCalled("firefox").forDriver(firefoxDriver); assertThat(webdriverInstances.getCurrentDriver()).isEqualTo(firefoxDriver); } @Test public void should_know_the_latest_current_driver_in_use() { webdriverInstances.registerDriverCalled("firefox").forDriver(firefoxDriver); webdriverInstances.registerDriverCalled("iexplorer").forDriver(iexplorerDriver); assertThat(webdriverInstances.getCurrentDriver()).isEqualTo(iexplorerDriver); } @Test public void should_know_when_a_driver_is_not_registered() { webdriverInstances.registerDriverCalled("firefox").forDriver(firefoxDriver); assertThat(webdriverInstances.driverIsRegisteredFor("iexplorer")).isFalse(); } }