David Tanner created JBEHAVE-733:
------------------------------------
Summary: Composed steps don't behave like steps in a story when
using parameters
Key: JBEHAVE-733
URL: https://jira.codehaus.org/browse/JBEHAVE-733
Project: JBehave
Issue Type: Bug
Components: Core
Affects Versions: 3.5.4
Environment: Windows XP using Eclipse Indigo in Java
Reporter: David Tanner
Attachments: JunitTest.txt
Problem Statement:
When I use a composite step that calls another step which takes parameters, the
correct step is rejected because it doesn't match the patternString.
Steps to Recreate:
1. Create a step and method that take a parameter, (ex. @When("I click the
$button button")public void clickButton(String button){...}
2. Create a Composite step that references step 1. (ex. @When("I login")
@Composite(steps={"I
click the login button"})
Actual Results:
The second step will give you a pending method, that matches step 1. but they
don't match because of the paramter.
Suggested Change:
Found this while debugging in the StepCandidate.class on line 179:
if (StringUtils.startsWith(composedStep,
candidate.getStartingWord())
&& StringUtils.endsWith(composedStep,
candidate.getPatternAsString()) ) {
return candidate;
}
Could be changed to:
if (StringUtils.startsWith(composedStep,
candidate.getStartingWord())
&& (StringUtils.endsWith(composedStep,
candidate.getPatternAsString()) || candidate.matches(composedStep))) {
return candidate;
}
JUnit Test:
@Test
public void shouldMatchCompositStepsWhenStepParamterIsProvided(){
CompositeStepParamterMatching steps = new
CompositeStepParamterMatching();
List<StepCandidate> candidates = steps.listCandidates();
StepCandidate candidate = candidates.get(0);
assertThat(candidate.isComposite(), is(true));
Map<String, String> noNamedParameters = new HashMap<String, String>();
List<Step> composedSteps = new ArrayList<Step>();
candidate.addComposedSteps(composedSteps, "When I login",
noNamedParameters, candidates);
assertThat(composedSteps.size(), equalTo(2));
for (Step step : composedSteps) {
step.perform(null);
}
assertThat(steps.button, equalTo("Login"));
}
static class CompositeStepParamterMatching extends Steps {
private String button;
@When("I login")
@Composite(steps={"I click the Login button"})
public void whenILogin(){}
@When("I click the <button> button")
public void whenIClickTheButton(@Named("button") String button){
this.button = button;
}
}
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://jira.codehaus.org/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe from this list, please visit:
http://xircles.codehaus.org/manage_email