[
http://jira.codehaus.org/browse/JBEHAVE-261?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Mauro Talevi updated JBEHAVE-261:
---------------------------------
Fix Version/s: (was: 2.5.1)
> New syntax for Given with many parameters
> -----------------------------------------
>
> Key: JBEHAVE-261
> URL: http://jira.codehaus.org/browse/JBEHAVE-261
> Project: JBehave
> Issue Type: Improvement
> Components: Core
> Reporter: Bruno Bieth
>
> A given step might look like :
> {code}Given a person (first name) Bruno (last name) Bieth born 2010-01-01 in
> Tombouctou living in Canada driving 10,000 miles per year{code}
> It can be hard to read. Passed a certain amount of parameters I suggest the
> following syntax :
> {code}
> Given a person
> - First Name : Bruno
> - Last Name : Bieth
> - Birth date : 2010-01-01
> - Birth country : Tombouctou
> - Country of residency : Canada
> - Miles driven per year : 10,000
> {code}
> The java code would look like :
> {code}
> @GivenDetail( "a person" )
> public void aPerson(
> @Named("First Name") String firstName,
> @Named("Last Name") String lastName,
> @Named("Birth date") DateTime birthDate,
> @Named("Birth country") String birthCountry,
> @Named("Country of residency") String countryOfResidency,
> @Named("Miles driven per year") Integer milesPerYear
> ) {
> person = new
> Person(firstName,lastName,birthDate,birthCountry,countryOfResidency,milesPerYear);
> }
> {code}
> The factory could use another CandidateSteps instance, say :
> {code}
> public class DetailedSteps implements CandidateSteps {
> private CandidateSteps delegate;
> private StepsConfiguration configuration;
> private Object instance;
> public DetailedSteps(StepsConfiguration configuration, CandidateSteps
> delegate, Object instance) {
> this.configuration = configuration;
> this.delegate = delegate;
> this.instance = instance;
> }
>
> @Override
> public CandidateStep[] getSteps() {
> return getSteps( instance.getClass() );
> }
> @Override
> public CandidateStep[] getSteps(Class<?> stepsClass) {
> List<CandidateStep> steps = new ArrayList<CandidateStep>(
> Arrays.asList( delegate.getSteps(stepsClass)));
>
> for( Method method : stepsClass.getMethods() ) {
> GivenDetail annotation =
> method.getAnnotation(GivenDetail.class);
> if( annotation != null ) {
> steps.add( createGivenDetail( method,
> annotation ) );
> }
> }
>
> return steps.toArray(new CandidateStep[steps.size()]);
> }
> private CandidateStep createGivenDetail(final Method method,
> GivenDetail annotation) {
> return new CandidateStep(annotation.value(),
> annotation.priority(), StepType.GIVEN, method, instance, new
> StepPatternBuilder() {
> @Override
> public String[] extractGroupNames(String string) {
> List<String> names = new ArrayList<String>();
> for( Annotation[] annotations :
> method.getParameterAnnotations() ) {
> for( Annotation annotation :
> annotations ) {
> if( annotation instanceof Named
> ) {
> names.add(
> ((Named)annotation).value() );
> }
> }
> }
> return names.toArray(new String[names.size()]);
> }
>
> @Override
> public Pattern buildPattern(String matchThis) {
> String[] groups = extractGroupNames("");
> String pattern = matchThis.replaceAll(" ",
> "\\\\s+" );
> for( String group : groups ) {
> pattern += "\\s+-\\s+" +
> group.replaceAll( " ", "\\\\s+" ) + "\\s*:\\s+(.*)";
> }
> return Pattern.compile( pattern );
> }
>
> },configuration.getParameterConverters(),configuration.getStartingWordsByType());
> }
> @Override
> public List<Step> runAfterScenario() {
> return delegate.runAfterScenario();
> }
> @Override
> public List<Step> runAfterStory(boolean embeddedStory) {
> return delegate.runAfterStory(embeddedStory);
> }
> @Override
> public List<Step> runBeforeScenario() {
> return delegate.runBeforeScenario();
> }
> @Override
> public List<Step> runBeforeStory(boolean embeddedStory) {
> return delegate.runBeforeStory(embeddedStory);
> }
> }
> {code}
--
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