[ 
http://jira.codehaus.org/browse/JBEHAVE-247?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Mauro Talevi resolved JBEHAVE-247.
----------------------------------

    Resolution: Fixed

Added injectable PrioritisingStrategy in StepFinder with default 
ByPriorityField impl.
Added alternative ByLevenshteinDistance impl.

> jBehave should be more intelligent/flexible with regards to prioritisation of 
> steps
> -----------------------------------------------------------------------------------
>
>                 Key: JBEHAVE-247
>                 URL: http://jira.codehaus.org/browse/JBEHAVE-247
>             Project: JBehave
>          Issue Type: New Feature
>          Components: Core
>            Reporter: Stephen Cresswell
>            Priority: Minor
>             Fix For: 3.0
>
>         Attachments: LevenshteinDistance.java, 
> PrioritizableUnmatchedToPendingStepCreator.java
>
>
> BDD's strength relies on being able to write fluent scenarios. jBehave's 
> support for this is very good, but there is still room for improvement. For 
> example a typical scenario might read...
> {quote}
> Scenario: Schedule Patient Discharge
> Given a medical patient called Bob Holness who is not medically fit
> When I change Bob's state to medically fit
> And select a discharge time of tomorrow morning
> And select a discharge complexity of 3 
> {color:red}Then Bob's discharge schedule should be displayed on the ward 
> board{color}
> {quote}
> Now in a related scenario let's say I want to cancel while rescheduling a 
> discharge...
> Scenario: Cancel Rescheduling Patient Discharge
> {quote}
> Given a medical patient called Bob Holness who already has a discharge 
> schedule
> When I reiterate that Bob's state is medically fit
> And select a discharge time of tomorrow morning
> And cancel the discharge schedule
> {color:red}Then Bob's *old* discharge schedule should be displayed on the 
> ward board{color}
> {quote}
> The underlying implementation of assserting Bob's actual discharge schedule 
> is the same, but I want to emphasise *the expression of intent* through use 
> of words such as old, new, still, etc.
> jBehave partially supports this through aliases
> {code:title=MySteps.java|borderStyle=solid}
> @Then('''$patient discharge schedule should be displayed on the ward board''')
> @Aliases(values=['''$patient old discharge schedule should be displayed on 
> the ward board'''])
> public void assertDischargeScheduleOnWardPage(Patient patient) {
>       wardBoardPage.assertDischargeSchedule(patient)
> }
> {code}
> The trouble is that the above fails because of the way in which jBehave 
> matches and prioritises steps. Both "Then" and "Alias" steps will match the 
> sentence
> "Bob's old discharge schedule should be displayed on the ward board", but 
> "Then" will be prioritised based on it's declaration order, causing the value 
> "Bob's old" to be passed to the PatientParameterConverter. Since no patient 
> exists with the name "Bob's old", the parameter converter will return null 
> and the test fails.
> Currently the workaround is to reword the steps slightly to prevent both of 
> them matching...
> {quote}Then {color:red}"{color}Bob's{color:red}"{color} discharge schedule 
> should be displayed on the ward board
> Then {color:red}"{color}Bob's{color:red}"{color} old discharge schedule 
> should be displayed on the ward board{quote}
> or
> {quote}Then Bob's discharge schedule should be displayed on the ward board
> Then Bob's old discharge schedule should {color:red}now{color} be displayed 
> on the ward board{quote}
> but both are inferior to the original. A nicer (and fairly easy) solution 
> would be to base this priortisation on similarity with the string step, using 
> something like the Levenshtein distance. Harder, but better yet would be to 
> make the prioritsation configurable.
> I've attached the first solution (with lots of printlns so you can see how 
> well the prioriisation works).

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://jira.codehaus.org/secure/Administrators.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