Allow directives to support multiple step pattern variant
Description
To get more natural German story texts, it would be very helpful if the Steps.listCandidates() method could be amended. This would allow for automatically generating slight variations of the texts without having to specify them all as aliases. Currently I am doing this:
@Then("soll foo bar with $xyz") @Aliases(values = { "foo bar with $xyz", "soll foo bar: $xyz", "foo bar: $xyz" })
The word "soll" is made optional this way. The reasoning behind this is that when using "And" it is more natural to write
Then soll something else And foo bar with $xyz
instead of
Then soll something else And soll foo bar with $xyz
It would be very nice to not have define aliases for all these variants, because it makes the code harder to maintain. Instead, I though I'd add this dynamically, the same way annotated Aliases are, but it seems this functionality would require providing a new subclass of org.jbehave.core.steps.Steps which I cannot see how to do.
I suggest a change like this:
1) In org.jbehave.core.steps.Steps add another call in listCandidates() after each of the addCandidatesFromAliases(...) like addCustomDerivedCandidates(...) with the same signature and a protected empty default implementation. 2) Allow configuration to specify a custom subclass of org.jbehave.core.steps.Steps. In there custom additions to the candidates list could be made, like the one I described.
To get more natural German story texts, it would be very helpful if the Steps.listCandidates() method could be amended.
This would allow for automatically generating slight variations of the texts without having to specify them all as aliases. Currently I am doing this:
@Then("soll foo bar with $xyz")
@Aliases(values = {
"foo bar with $xyz",
"soll foo bar: $xyz",
"foo bar: $xyz" })
The word "soll" is made optional this way. The reasoning behind this is that when using "And" it is more natural to write
Then soll something else
And foo bar with $xyz
instead of
Then soll something else
And soll foo bar with $xyz
It would be very nice to not have define aliases for all these variants, because it makes the code harder to maintain. Instead, I though I'd add this dynamically, the same way annotated Aliases are, but it seems this functionality would require providing a new subclass of org.jbehave.core.steps.Steps which I cannot see how to do.
I suggest a change like this:
1) In org.jbehave.core.steps.Steps add another call in listCandidates() after each of the addCandidatesFromAliases(...) like addCustomDerivedCandidates(...) with the same signature and a protected empty default implementation.
2) Allow configuration to specify a custom subclass of org.jbehave.core.steps.Steps. In there custom additions to the candidates list could be made, like the one I described.