Title: [764] trunk/core/src/java/org/jbehave/core/story/codegen/velocity: Implemented specify methods of story and scenario templates, adding the instantiation of constituent classes.
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:

http://xircles.codehaus.org/manage_email

Reply via email to