package net.thucydides.core;
import net.thucydides.core.annotations.Managed;
import net.thucydides.core.annotations.ManagedPages;
import net.thucydides.core.annotations.Step;
import net.thucydides.core.annotations.Steps;
import net.thucydides.core.pages.Pages;
import net.thucydides.core.steps.ScenarioSteps;
import net.thucydides.core.steps.StepListener;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.openqa.selenium.WebDriver;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.not;
import static org.hamcrest.Matchers.nullValue;
public class WhenRunningTestsInIsolation {
public static class SampleSteps extends ScenarioSteps {
public SampleSteps(final Pages pages) {
super(pages);
}
@Step
public void step1() {}
@Step
public void step2() {}
}
public class SampleTestClass {
@Managed
public WebDriver driver;
@ManagedPages(defaultUrl = "classpath:static-site/index.html")
public Pages pages;
@Steps
public SampleSteps steps;
}
@Mock
WebDriver mockDriver;
@Before
public void initMocks() {
MockitoAnnotations.initMocks(this);
}
@After
public void clearMockDriver() {
Thucydides.stopUsingMockDriver();
}
@Test
public void any_class_can_host_an_annotated_webdriver_instance() {
SampleTestClass sampleTestClass = new SampleTestClass();
Thucydides.initialize(sampleTestClass);
assertThat(sampleTestClass.driver, is(not(nullValue())));
}
@Test
public void any_class_can_host_an_annotated_step_library() {
SampleTestClass sampleTestClass = new SampleTestClass();
Thucydides.initialize(sampleTestClass);
assertThat(sampleTestClass.steps, is(not(nullValue())));
}
@Test
public void any_class_can_host_an_annotated_pages_library() {
SampleTestClass sampleTestClass = new SampleTestClass();
Thucydides.initialize(sampleTestClass);
assertThat(sampleTestClass.pages, is(not(nullValue())));
}
public class SampleParentTestClass {
@Managed
protected WebDriver driver;
@ManagedPages(defaultUrl = "classpath:static-site/index.html")
protected Pages pages;
@Steps
protected SampleSteps steps;
}
public class SampleChildTestClass extends SampleParentTestClass {}
@Test
public void a_web_driver_can_be_defined_in_a_parent_class() {
SampleChildTestClass sampleTestClass = new SampleChildTestClass();
Thucydides.initialize(sampleTestClass);
assertThat(sampleTestClass.driver, is(not(nullValue())));
}
@Test
public void a_page_factory_can_be_defined_in_a_parent_class() {
SampleChildTestClass sampleTestClass = new SampleChildTestClass();
Thucydides.initialize(sampleTestClass);
assertThat(sampleTestClass.pages, is(not(nullValue())));
}
@Test
public void a_step_library_can_be_defined_in_a_parent_class() {
SampleChildTestClass sampleTestClass = new SampleChildTestClass();
Thucydides.initialize(sampleTestClass);
assertThat(sampleTestClass.steps, is(not(nullValue())));
}
public class SampleTestClassWithPrivateFields {
@Managed
private WebDriver driver;
@ManagedPages(defaultUrl = "classpath:static-site/index.html")
private Pages pages;
@Steps
private SampleSteps steps;
}
@Test
public void a_web_driver_can_be_defined_as_a_private_field() {
SampleTestClassWithPrivateFields sampleTestClass = new SampleTestClassWithPrivateFields();
Thucydides.initialize(sampleTestClass);
assertThat(sampleTestClass.driver, is(not(nullValue())));
}
@Test
public void a_page_factory_can_be_defined_as_a_private_field() {
SampleTestClassWithPrivateFields sampleTestClass = new SampleTestClassWithPrivateFields();
Thucydides.initialize(sampleTestClass);
assertThat(sampleTestClass.pages, is(not(nullValue())));
}
@Test
public void a_step_library_can_be_defined_as_a_private_field() {
SampleTestClassWithPrivateFields sampleTestClass = new SampleTestClassWithPrivateFields();
Thucydides.initialize(sampleTestClass);
assertThat(sampleTestClass.steps, is(not(nullValue())));
}
@Test
public void a_step_listener_should_be_created() {
StepListener currentListener = Thucydides.getStepListener();
SampleChildTestClass sampleTestClass = new SampleChildTestClass();
Thucydides.initialize(sampleTestClass);
assertThat(Thucydides.getStepListener(), is(not(currentListener)));
}
@Test
public void no_step_listener_should_be_created() {
StepListener currentListener = Thucydides.getStepListener();
SampleChildTestClass sampleTestClass = new SampleChildTestClass();
// Given we don't want to touch the step listened
Thucydides.initializeWithNoStepListener(sampleTestClass);
// Then the step listener should not be changed
assertThat(Thucydides.getStepListener(), is(currentListener));
}
}