[ 
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


Reply via email to