- Revision
- 764
- Author
- mauro
- Date
- 2007-07-15 05:15:33 -0500 (Sun, 15 Jul 2007)
Log Message
Implemented specify methods of story and scenario templates, adding the instantiation of constituent classes.
Modified Paths
Diff
Modified: trunk/core/src/java/org/jbehave/core/story/codegen/velocity/VelocityCodeGenerator.java (763 => 764)
--- trunk/core/src/java/org/jbehave/core/story/codegen/velocity/VelocityCodeGenerator.java 2007-07-15 09:41:27 UTC (rev 763) +++ trunk/core/src/java/org/jbehave/core/story/codegen/velocity/VelocityCodeGenerator.java 2007-07-15 10:15:33 UTC (rev 764) @@ -5,8 +5,10 @@ import java.io.IOException; import java.io.Writer; import java.text.MessageFormat; +import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; +import java.util.List; import java.util.Map; import java.util.Properties; @@ -51,11 +53,11 @@ initialiseEngine(engine); } - public void generateStory(StoryDetails storyDetails) { - generateSource(storyDetails.name, "story", narrativeProperties(storyDetails)); - for (Iterator i = storyDetails.scenarios.iterator(); i.hasNext();) { + public void generateStory(StoryDetails story) { + generateSource(story.name, "story", storyProperties(story)); + for (Iterator i = story.scenarios.iterator(); i.hasNext();) { ScenarioDetails scenario = (ScenarioDetails) i.next(); - generateSource(scenario.name, "scenario", null); + generateSource(scenario.name, "scenario", scenarioProperties(scenario)); generateSource(scenario.event.name, "event", null); for (Iterator j = scenario.context.givens.iterator(); j.hasNext();) { generateSource((String) j.next(), "given", null); @@ -66,31 +68,62 @@ } } - private Map narrativeProperties(StoryDetails storyDetails) { + private Map storyProperties(StoryDetails story) { Map map = new HashMap(); - map.put("narrative", new Narrative(storyDetails.name, storyDetails.feature, storyDetails.benefit)); + map.put("narrative", new Narrative(story.name, story.feature, story.benefit)); + map.put("scenarioClassNames", scenarioClassNames(story)); return map; } - private String toCamelCase(String name) { - return new CamelCaseConverter(name).toCamelCase(); + private List scenarioClassNames(StoryDetails story) { + List names = new ArrayList(); + for (Iterator i = story.scenarios.iterator(); i.hasNext();) { + ScenarioDetails scenario = (ScenarioDetails) i.next(); + names.add(className("scenario", scenario.name)); + } + return names; } - private void generateSource(String name, String type, Map properties) { - String className = toCamelCase(name); - String sourcePath = MessageFormat.format(SOURCE_PATH, new Object[] { rootSourceDirectory, toPlural(type), className }); - String packageName = MessageFormat.format(PACKAGE_NAME, new Object[] { rootPackageName, toPlural(type) }); - String templatePath = MessageFormat.format(TEMPLATE_PATH, new Object[] { type }); - generateSource(sourcePath, templatePath, className, packageName, properties); + private Map scenarioProperties(ScenarioDetails scenario) { + Map map = new HashMap(); + map.put("eventClassName", className("event", scenario.event.name)); + List givenClassNames = new ArrayList(); + for (Iterator j = scenario.context.givens.iterator(); j.hasNext();) { + givenClassNames.add(className("given", (String) j.next())); + } + map.put("givenClassNames", givenClassNames); + List outcomeClassNames = new ArrayList(); + for (Iterator j = scenario.outcome.outcomes.iterator(); j.hasNext();) { + outcomeClassNames.add(className("outcome", (String) j.next())); + } + map.put("outcomeClassNames", outcomeClassNames); + return map; } - private String toPlural(String type) { - if ( type.endsWith("y") ){ + private String className(String type, String name){ + String packageName = MessageFormat.format(PACKAGE_NAME, new Object[] { rootPackageName, pluralise(type) }); + return packageName+"."+camelise(name); + } + + private String camelise(String name) { + return new CamelCaseConverter(name).toCamelCase(); + } + + private String pluralise(String type) { + if ( type.contains("y") ){ return type.replaceFirst("y", "ies"); } return type.concat("s"); } + private void generateSource(String name, String type, Map properties) { + String className = camelise(name); + String sourcePath = MessageFormat.format(SOURCE_PATH, new Object[] { rootSourceDirectory, pluralise(type), className }); + String packageName = MessageFormat.format(PACKAGE_NAME, new Object[] { rootPackageName, pluralise(type) }); + String templatePath = MessageFormat.format(TEMPLATE_PATH, new Object[] { type }); + generateSource(sourcePath, templatePath, className, packageName, properties); + } + private void generateSource(String sourcePath, String templatePath, String className, String packageName, Map properties) { try { VelocityContext context = new VelocityContext();
Modified: trunk/core/src/java/org/jbehave/core/story/codegen/velocity/templates/scenario.template (763 => 764)
--- trunk/core/src/java/org/jbehave/core/story/codegen/velocity/templates/scenario.template 2007-07-15 09:41:27 UTC (rev 763) +++ trunk/core/src/java/org/jbehave/core/story/codegen/velocity/templates/scenario.template 2007-07-15 10:15:33 UTC (rev 764) @@ -5,7 +5,13 @@ public class ${className} extends MultiStepScenario { public void specifySteps() { - org.jbehave.core.Ensure.pending("Auto-generated stub"); + when(new ${eventClassName}()); + #foreach( $givenClassName in $givenClassNames ) + given(new $givenClassName()); + #end + #foreach( $outcomeClassName in $outcomeClassNames ) + then(new $outcomeClassName()); + #end } }
Modified: trunk/core/src/java/org/jbehave/core/story/codegen/velocity/templates/story.template (763 => 764)
--- trunk/core/src/java/org/jbehave/core/story/codegen/velocity/templates/story.template 2007-07-15 09:41:27 UTC (rev 763) +++ trunk/core/src/java/org/jbehave/core/story/codegen/velocity/templates/story.template 2007-07-15 10:15:33 UTC (rev 764) @@ -10,7 +10,9 @@ } public void specify() { - org.jbehave.core.Ensure.pending("Auto-generated stub"); + #foreach( $scenarioClassName in $scenarioClassNames ) + addScenario(new $scenarioClassName()); + #end } } \ No newline at end of file
To unsubscribe from this list please visit:
