[
http://jira.codehaus.org/browse/JBEHAVE-261?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=216604#action_216604
]
Mauro Talevi commented on JBEHAVE-261:
--------------------------------------
There is also the question of parsing to consider: having a tabular structure
for table-like input is
much easier to parse. So we could have an ExamplesMap, similar in concept to
ExamplesTable, but
one that only maps key to values and could be expressed as text:
|Name|Series 0110|
|Management Fee|2%|
....
|Close date|2010-01-01|
> 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