- Revision
- 761
- Author
- mauro
- Date
- 2007-07-14 08:25:22 -0500 (Sat, 14 Jul 2007)
Log Message
Added templates to generate scenario and story code.
Modified Paths
Added Paths
Diff
Modified: trunk/core/src/java/org/jbehave/core/story/codegen/velocity/VelocityCodeGenerator.java (760 => 761)
--- trunk/core/src/java/org/jbehave/core/story/codegen/velocity/VelocityCodeGenerator.java 2007-07-12 19:07:06 UTC (rev 760) +++ trunk/core/src/java/org/jbehave/core/story/codegen/velocity/VelocityCodeGenerator.java 2007-07-14 13:25:22 UTC (rev 761) @@ -5,7 +5,9 @@ import java.io.IOException; import java.io.Writer; import java.text.MessageFormat; +import java.util.HashMap; import java.util.Iterator; +import java.util.Map; import java.util.Properties; import org.apache.velocity.Template; @@ -15,6 +17,7 @@ import org.jbehave.core.story.codegen.CodeGenerator; import org.jbehave.core.story.codegen.domain.ScenarioDetails; import org.jbehave.core.story.codegen.domain.StoryDetails; +import org.jbehave.core.story.domain.Narrative; import org.jbehave.core.util.CamelCaseConverter; /** @@ -24,8 +27,8 @@ */ public class VelocityCodeGenerator implements CodeGenerator { - private static final String SOURCE_PATH = "{0}/{1}s/{2}.java"; - private static final String PACKAGE_NAME = "{0}.{1}s"; + private static final String SOURCE_PATH = "{0}/{1}/{2}.java"; + private static final String PACKAGE_NAME = "{0}.{1}"; private static final String TEMPLATE_PATH = "org/jbehave/core/story/codegen/velocity/templates/{0}.template"; private String rootSourceDirectory; @@ -49,35 +52,56 @@ } public void generateStory(StoryDetails storyDetails) { + generateSource(storyDetails.name, "story", narrativeProperties(storyDetails)); for (Iterator i = storyDetails.scenarios.iterator(); i.hasNext();) { ScenarioDetails scenario = (ScenarioDetails) i.next(); - generateSource(scenario.event.name, "event"); + generateSource(scenario.name, "scenario", null); + generateSource(scenario.event.name, "event", null); for (Iterator j = scenario.context.givens.iterator(); j.hasNext();) { - generateSource((String) j.next(), "given"); + generateSource((String) j.next(), "given", null); } for (Iterator j = scenario.outcome.outcomes.iterator(); j.hasNext();) { - generateSource((String) j.next(), "outcome"); + generateSource((String) j.next(), "outcome", null); } } } + private Map narrativeProperties(StoryDetails storyDetails) { + Map map = new HashMap(); + map.put("narrative", new Narrative(storyDetails.name, storyDetails.feature, storyDetails.benefit)); + return map; + } + private String toCamelCase(String name) { return new CamelCaseConverter(name).toCamelCase(); } - private void generateSource(String name, String type) { + private void generateSource(String name, String type, Map properties) { String className = toCamelCase(name); - String sourcePath = MessageFormat.format(SOURCE_PATH, new Object[] { rootSourceDirectory, type, className }); - String packageName = MessageFormat.format(PACKAGE_NAME, new Object[] { rootPackageName, type }); + 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); + generateSource(sourcePath, templatePath, className, packageName, properties); } - private void generateSource(String sourcePath, String templatePath, String className, String packageName) { + private String toPlural(String type) { + if ( type.endsWith("y") ){ + return type.replaceFirst("y", "ies"); + } + return type.concat("s"); + } + + private void generateSource(String sourcePath, String templatePath, String className, String packageName, Map properties) { try { VelocityContext context = new VelocityContext(); context.put("className", className); context.put("packageName", packageName); + if ( properties != null ){ + for ( Iterator i = properties.keySet().iterator(); i.hasNext(); ){ + String key = (String)i.next(); + context.put(key, properties.get(key)); + } + } File file = new File(sourcePath); file.getParentFile().mkdirs(); Writer writer = new FileWriter(file);
Added: trunk/core/src/java/org/jbehave/core/story/codegen/velocity/templates/scenario.template (0 => 761)
--- trunk/core/src/java/org/jbehave/core/story/codegen/velocity/templates/scenario.template (rev 0) +++ trunk/core/src/java/org/jbehave/core/story/codegen/velocity/templates/scenario.template 2007-07-14 13:25:22 UTC (rev 761) @@ -0,0 +1,11 @@ +package ${packageName}; + +import org.jbehave.core.story.domain.MultiStepScenario; + +public class ${className} extends MultiStepScenario { + + public void specifySteps() { + //TODO + } + +}
Added: trunk/core/src/java/org/jbehave/core/story/codegen/velocity/templates/story.template (0 => 761)
--- trunk/core/src/java/org/jbehave/core/story/codegen/velocity/templates/story.template (rev 0) +++ trunk/core/src/java/org/jbehave/core/story/codegen/velocity/templates/story.template 2007-07-14 13:25:22 UTC (rev 761) @@ -0,0 +1,16 @@ +package ${packageName}; + +import org.jbehave.core.story.domain.Narrative; +import org.jbehave.core.story.domain.ScenarioDrivenStory; + +public class ${className} extends ScenarioDrivenStory { + + public ${className}() { + super(new Narrative("${narrative.role}", "${narrative.feature}", "${narrative.benefit}")); + } + + public void specify() { + //TODO + } + +} \ No newline at end of file
To unsubscribe from this list please visit:
