package org.jbehave.core.steps; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.containsString; import static org.hamcrest.Matchers.equalTo; import static org.jbehave.core.steps.StepType.GIVEN; import static org.jbehave.core.steps.StepType.THEN; import static org.jbehave.core.steps.StepType.WHEN; import java.util.Collections; import java.util.List; import org.jbehave.core.annotations.Given; import org.jbehave.core.annotations.Then; import org.jbehave.core.annotations.When; import org.jbehave.core.configuration.MostUsefulConfiguration; import org.junit.Test; public class StepFinderBehaviour { private StepFinder finder = new StepFinder(); @Test public void shouldFindStepdocs() throws Exception { MySteps mySteps = new MySteps(); List<Stepdoc> stepdocs = finder.stepdocs(new InstanceStepsFactory(new MostUsefulConfiguration(), mySteps).createCandidateSteps()); Collections.sort(stepdocs); assertThat(stepdocs.size(), equalTo(3)); assertThatStepdocIs(stepdocs.get(0), "givenFoo", "givenFoo(java.lang.String)", "foo named $name", "Given", GIVEN, mySteps); assertThatStepdocIs(stepdocs.get(1), "whenFoo", "whenFoo(java.lang.String)", "foo named $name", "When", WHEN, mySteps); assertThatStepdocIs(stepdocs.get(2), "thenFoo", "thenFoo(java.lang.String)", "foo named $name", "Then", THEN, mySteps); } private void assertThatStepdocIs(Stepdoc stepdoc, String methodName, String methodSignature, String pattern, String startingWord, StepType stepType, Object stepsInstance) { assertThat(stepdoc.getMethod().getName(), equalTo(methodName)); assertThat(stepdoc.toString(), containsString(methodName)); assertThat(stepdoc.getMethodSignature(), containsString(methodName)); assertThat(stepdoc.getPattern(), equalTo(pattern)); assertThat(stepdoc.toString(), containsString(pattern)); assertThat(stepdoc.getStartingWord(), equalTo(startingWord)); assertThat(stepdoc.toString(), containsString(startingWord)); assertThat(stepdoc.getStepType(), equalTo(stepType)); assertThat(stepdoc.toString(), containsString(stepType.toString())); assertThat(stepdoc.getStepsInstance(), equalTo(stepsInstance)); assertThat(stepdoc.toString(), containsString(stepsInstance.getClass().getName())); } static class MySteps { @Given("foo named $name") public void givenFoo(String name) { } @When("foo named $name") public void whenFoo(String name) { } @Then("foo named $name") public void thenFoo(String name) { } } }