[
https://jira.codehaus.org/browse/JBEHAVE-702?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=288103#comment-288103
]
Daniel Schneller commented on JBEHAVE-702:
------------------------------------------
Reading your comment I realized that my original idea was maybe a little too
complicated for what I had in mind. I tried an implementation locally by
introducing "@Variant"/@Variants with the same structure as "@Alias"/"@Aliases".
Doing this:
@Then("foo bar with $xyz")
@Alias("foo bar: $xyz"
@Variant("soll")
public void foobar() {...}
would lead to these 4 permutations all being added as candidates:
foo bar with $xyz
soll foo bar with $xyz
foo bar: $xyz
soll foo far: $xyz
In Steps.java I added this method:
private void addVariants(List<StepCandidate> candidates, Method method,
StepType stepType, String alias, int priority) {
List<String> allVariants = getVariants(method);
for (String variant : allVariants) {
addCandidate(candidates, method, stepType, variant + "
" + alias, priority);
}
}
which is called from each of the three blocks in listCandidates() and the two
blocks in addCandidatesFromAliases(...).
That way the change is very minimal and remains fully backwards compatible.
I will attach my modified Steps class.
> Allow injection of the "Steps" class to customize its behavior
> --------------------------------------------------------------
>
> Key: JBEHAVE-702
> URL: https://jira.codehaus.org/browse/JBEHAVE-702
> Project: JBehave
> Issue Type: Improvement
> Components: Core
> Affects Versions: 3.5.4
> Reporter: Daniel Schneller
> Labels: i18n, wish
>
> 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.
--
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