package net.thucydides.core.steps; import net.thucydides.core.annotations.UserStoryCode; import net.thucydides.core.pages.Pages; import org.junit.Test; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.nullValue; public class WhenDescribingSteps { @UserStoryCode("U2") class SampleTestSteps extends ScenarioSteps { public SampleTestSteps(final Pages pages) { super(pages); } public void a_step() {} public void a_step_group() {} public void a_step_with_parameters(String name) {} } @Test public void the_name_of_a_step_should_be_the_corresponding_method_name() { ExecutedStepDescription description = new ExecutedStepDescription(SampleTestSteps.class, "a_step"); assertThat(description.getName(), is("a_step")); } @Test (expected=IllegalArgumentException.class) public void an_exception_should_be_thrown_if_the_name_is_incorrect() { ExecutedStepDescription description = new ExecutedStepDescription(SampleTestSteps.class, "not_a_step"); description.getTestMethod(); } @Test public void the_description_should_also_return_the_step_class() { ExecutedStepDescription description = ExecutedStepDescription.of(SampleTestSteps.class, "a_step"); assertThat(description.getStepClass().getSimpleName(), is("SampleTestSteps")); } @Test public void the_title_of_a_step_should_be_a_human_readable_version_of_the_step_name() { ExecutedStepDescription description = new ExecutedStepDescription(SampleTestSteps.class, "a_step"); assertThat(description.getTitle(), is("A step")); } @Test public void by_default_a_step_is_not_considered_a_group() { ExecutedStepDescription description = new ExecutedStepDescription(SampleTestSteps.class, "a_step"); assertThat(description.isAGroup(), is(false)); } class ATestCase {} @Test public void a_step_can_be_defined_as_a_group() { ExecutedStepDescription description = new ExecutedStepDescription(SampleTestSteps.class, "a_step_group", true); assertThat(description.isAGroup(), is(true)); } @Test public void a_step_can_be_defined_as_a_group_after_its_creation() { ExecutedStepDescription description = new ExecutedStepDescription(SampleTestSteps.class, "a_step_group"); description.setAGroup(true); assertThat(description.isAGroup(), is(true)); } @Test public void the_description_should_return_the_step_method() { ExecutedStepDescription description = new ExecutedStepDescription(SampleTestSteps.class, "a_step"); assertThat(description.getTestMethod().getName(), is("a_step")); } @Test public void the_description_should_return_the_step_method_if_the_name_has_parameters() { ExecutedStepDescription description = new ExecutedStepDescription(SampleTestSteps.class, "a_step_with_parameters: Joe"); assertThat(description.getTestMethod().getName(), is("a_step_with_parameters")); } @Test public void a_description_can_be_created_without_a_class() { ExecutedStepDescription description = ExecutedStepDescription.withTitle("a_step"); assertThat(description.getTitle(), is("A step")); } @Test public void a_description_without_a_class_should_have_no_method() { ExecutedStepDescription description = ExecutedStepDescription.withTitle("a_step"); assertThat(description.getTestMethod(), is(nullValue())); } @Test public void a_description_can_be_cloned() { ExecutedStepDescription description = new ExecutedStepDescription(SampleTestSteps.class, "a_step_group", true); ExecutedStepDescription clone = description.clone(); assertThat(clone.getName(), is(description.getName())); assertThat(clone.getTestMethod(), is(description.getTestMethod())); assertThat(clone.isAGroup(), is(description.isAGroup())); } }