Title: [743] trunk/core/src/analysis: JBEHAVE-86: Applied patch from Eric Lewin.

Diff

Modified: trunk/core/src/analysis/user withdraws cash.txt (742 => 743)

--- trunk/core/src/analysis/user withdraws cash.txt	2007-07-10 12:54:50 UTC (rev 742)
+++ trunk/core/src/analysis/user withdraws cash.txt	2007-07-10 13:18:50 UTC (rev 743)
@@ -1,29 +1,16 @@
-Story: User withdraws cash
-
-As a Bank card holder
-I want to be able to withdraw cash from an ATM
-So that I dont have to visit the bank
-
-Scenario: Happy scenario
-
-Given Account is in credit
-When User requests cash
-Then ATM should dispense cash
-and ATM should return bank card
-and account balance should be reduced
-
-Scenario: Happy story with overdraft
-
-Given Account has overdraft facility
-and Account is easily within overdraft limit
-When User requests cash
-Then ATM should dispense cash
-and ATM should return bank card
-and account balance should be reduced
-
-Scenario: In lots of trouble
-
-Given Account is over overdraft limit
-When User requests cash
-Then Refuse cash
-and Keep bank card
+Title: User withdraws cash
+As a Bank card holder
+I want to be able to withdraw cash from an ATM
+So that I dont have to visit the bank
+Scenario: Happy scenario
+Given Account is in credit
+When User requests cash
+Then ATM should dispense cash and ATM should return bank card and account balance should be reduced
+Scenario: Happy story with overdraft
+Given Account has overdraft facility and Account is easily within overdraft limit
+When User requests cash
+Then ATM should dispense cash and ATM should return bank card and account balance should be reduced
+Scenario: In lots of trouble
+Given Account is over overdraft limit
+When User requests cash
+Then Refuse cash and Keep bank card

Modified: trunk/core/src/java/org/jbehave/core/story/StoryBuilder.java (742 => 743)

--- trunk/core/src/java/org/jbehave/core/story/StoryBuilder.java	2007-07-10 12:54:50 UTC (rev 742)
+++ trunk/core/src/java/org/jbehave/core/story/StoryBuilder.java	2007-07-10 13:18:50 UTC (rev 743)
@@ -3,7 +3,6 @@
 import java.text.MessageFormat;
 import java.util.Iterator;
 
-import org.jbehave.core.story.codegen.domain.BasicDetails;
 import org.jbehave.core.story.codegen.domain.ScenarioDetails;
 import org.jbehave.core.story.codegen.domain.StoryDetails;
 import org.jbehave.core.story.domain.Event;
@@ -27,7 +26,7 @@
 
     private StoryDetails details;
     private final String rootPackageName;
-    private ClassLoader classLoader;
+    private final ClassLoader classLoader;
     private final ClassBuilder builder = new ClassBuilder();
 
     public StoryBuilder(StoryDetails details, String rootPackageName) {
@@ -41,23 +40,25 @@
         }    
 
     public Story story(){
-        ScenarioDrivenStory story = new ScenarioDrivenStory(new Narrative(details.role, details.feature, details.benefit)) {
+        return new ScenarioDrivenStory(new Narrative(details.role, details.feature, details.benefit)) {
             public void specify() {
                 for ( Iterator i = details.scenarios.iterator(); i.hasNext(); ){
-                    addScenario(scenario((ScenarioDetails)i.next(), details.name));
+                    addScenario(scenario((ScenarioDetails)i.next()));
                 }
             }
+
+            public String getName() {
+                return details.name;
+            }
         };
-        return story;        
     }
 
-    private Scenario scenario(final ScenarioDetails details, String storyName) {
+    private Scenario scenario(final ScenarioDetails details) {
         return new MultiStepScenario() {
             public void specifySteps() {
                 // given
                 for (Iterator i = details.context.givens.iterator(); i.hasNext();) {
-                    BasicDetails given = (BasicDetails)i.next();
-                    given((Given)builder.newGiven(given.name));
+                    given((Given)builder.newGiven((String) i.next()));
                 }
                 
                 // when
@@ -65,10 +66,13 @@
                 
                 // then
                 for (Iterator i = details.outcome.outcomes.iterator(); i.hasNext();) {
-                    BasicDetails outcome = (BasicDetails)i.next();
-                    then((Outcome)builder.newOutcome(outcome.name));
+                    then((Outcome)builder.newOutcome((String) i.next()));
                 }
             }
+
+            public String getName() {
+                return details.name;
+            }
         };
     }
     
@@ -95,7 +99,7 @@
         private Object newInstance(String name, String packageName) {
             try {
                 String fullName = buildFullClassName(name, packageName);
-                return classLoader.loadClass(name).newInstance();
+                return classLoader.loadClass(fullName).newInstance();
             } catch ( Exception e) {
                 throw new RuntimeException("Failed to create instance for name "+name, e);
             }

Modified: trunk/core/src/java/org/jbehave/core/story/StoryLoader.java (742 => 743)

--- trunk/core/src/java/org/jbehave/core/story/StoryLoader.java	2007-07-10 12:54:50 UTC (rev 742)
+++ trunk/core/src/java/org/jbehave/core/story/StoryLoader.java	2007-07-10 13:18:50 UTC (rev 743)
@@ -28,7 +28,7 @@
 
     public Story loadStory(String storyPath, String storyPackage) throws MalformedURLException {
         StoryDetails storyDetails = storyParser.parseStory(getReader(storyPath, classLoader));
-        return new StoryBuilder(storyDetails, storyPackage).story();
+        return new StoryBuilder(storyDetails, storyPackage, classLoader).story();
     }
 
     public Story loadStory(String storyClassName) throws InstantiationException, IllegalAccessException, ClassNotFoundException {

Modified: trunk/core/src/java/org/jbehave/core/story/StoryPrinter.java (742 => 743)

--- trunk/core/src/java/org/jbehave/core/story/StoryPrinter.java	2007-07-10 12:54:50 UTC (rev 742)
+++ trunk/core/src/java/org/jbehave/core/story/StoryPrinter.java	2007-07-10 13:18:50 UTC (rev 743)
@@ -31,6 +31,7 @@
 
     public void print(String storyPath, String storyPackage) throws MalformedURLException {
         Story story = storyLoader.loadStory(storyPath, storyPackage);
+        story.specify();
         story.narrateTo(renderer);
     }
 

Modified: trunk/core/src/java/org/jbehave/core/story/domain/MultiStepScenario.java (742 => 743)

--- trunk/core/src/java/org/jbehave/core/story/domain/MultiStepScenario.java	2007-07-10 12:54:50 UTC (rev 742)
+++ trunk/core/src/java/org/jbehave/core/story/domain/MultiStepScenario.java	2007-07-10 13:18:50 UTC (rev 743)
@@ -57,7 +57,7 @@
  * @author <a href="" PROTECTED]">Dan North</a>
  * @author <a href="" PROTECTED]">Elizabeth Keogh</a>
  */
-public abstract class MultiStepScenario implements Scenario {
+public abstract class MultiStepScenario implements Scenario, Named {
     
     private static final String UNSPECIFIED = "Unspecified";
     private static final String SPECIFIED = "Specified";
@@ -77,6 +77,10 @@
         state = SPECIFIED;
     }
 
+    public String getName() {
+        return this.getClass().getName();
+    }
+
     protected abstract void specifySteps();
 
     public void run(World world) {

Added: trunk/core/src/java/org/jbehave/core/story/domain/Named.java (0 => 743)

--- trunk/core/src/java/org/jbehave/core/story/domain/Named.java	                        (rev 0)
+++ trunk/core/src/java/org/jbehave/core/story/domain/Named.java	2007-07-10 13:18:50 UTC (rev 743)
@@ -0,0 +1,8 @@
+package org.jbehave.core.story.domain;
+
+/**
+ * @author Eric Lewin
+ */
+public interface Named {
+    String getName();
+}

Modified: trunk/core/src/java/org/jbehave/core/story/domain/ScenarioDrivenStory.java (742 => 743)

--- trunk/core/src/java/org/jbehave/core/story/domain/ScenarioDrivenStory.java	2007-07-10 12:54:50 UTC (rev 742)
+++ trunk/core/src/java/org/jbehave/core/story/domain/ScenarioDrivenStory.java	2007-07-10 13:18:50 UTC (rev 743)
@@ -34,7 +34,7 @@
  * @author <a href="" PROTECTED]">Dan North</a>
  * @author <a href="" PROTECTED]">Elizabeth Keogh</a>
  */
-public abstract class ScenarioDrivenStory implements Story {
+public abstract class ScenarioDrivenStory implements Story, Named {
     private final Narrative narrative;
     private final List scenarios;
     private final List listeners;
@@ -53,7 +53,11 @@
     public List scenarios() {
         return scenarios;
     }
-    
+
+    public String getName() {
+        return this.getClass().getName();
+    }
+
     public Narrative narrative() {
         return narrative;
     }
@@ -61,7 +65,7 @@
     public void run() {
         for (Iterator i = scenarios.iterator(); i.hasNext();) {
             Scenario scenario = (Scenario) i.next();
-            informListeners(runScenario(createWorld(), this.getClass(), scenario));
+            informListeners(runScenario(createWorld(), this, scenario));
         }
     }
 
@@ -76,9 +80,9 @@
         return new HashMapWorld();
     }
 
-    private ScenarioResult runScenario(World world, Class storyClass, Scenario scenario) {
+    private ScenarioResult runScenario(World world, Story story, Scenario scenario) {
         ScenarioResult result;
-        String storyDescription = new CamelCaseConverter(storyClass).toPhrase();
+        String storyDescription = new CamelCaseConverter(story).toPhrase();
         String description = new CamelCaseConverter(scenario).toPhrase();
         
         try {                
@@ -109,7 +113,7 @@
         for ( Iterator i = scenarios.iterator(); i.hasNext(); ){
             ((Scenario) i.next()).narrateTo(renderer);
         }
-    }    
+    }
 
     public String toString() {
         StringBuffer buffer = new StringBuffer();

Modified: trunk/core/src/java/org/jbehave/core/util/CamelCaseConverter.java (742 => 743)

--- trunk/core/src/java/org/jbehave/core/util/CamelCaseConverter.java	2007-07-10 12:54:50 UTC (rev 742)
+++ trunk/core/src/java/org/jbehave/core/util/CamelCaseConverter.java	2007-07-10 13:18:50 UTC (rev 743)
@@ -1,107 +1,111 @@
-/*
- * Created on 13-Aug-2004
- * 
- * (c) 2003-2004 ThoughtWorks Ltd
- *
- * See license.txt for license details
- */
-package org.jbehave.core.util;
-
-
-/**
- * Method object to convert to and from CamelCase
- * 
- * @author <a href="" PROTECTED]">Dan North</a>
- */
-public class CamelCaseConverter {
-    private final char[] chars;
-    int pos = 0;
-
-    public CamelCaseConverter(String words) {
-        words = words.substring(words.lastIndexOf('.') + 1);
-        words = words.substring(words.lastIndexOf('$') + 1);
-        chars = words.toCharArray();
-    }
-
-    public CamelCaseConverter(Class type) {
-        this(type.getName());
-    }
-
-    public CamelCaseConverter(Object obj) {
-        this(obj.getClass());
-    }
-    
-    public String toCamelCase() {
-        StringBuffer buf = new StringBuffer();
-        while (pos < chars.length) {
-            if (Character.isWhitespace(chars[pos])) {
-                pos++;
-                if (pos < chars.length) {
-                    buf.append(Character.toUpperCase(chars[pos]));
-                }
-            }
-            else if (pos == 0) {
-                buf.append(Character.toUpperCase(chars[pos]));
-            }
-            else {
-                buf.append(chars[pos]);
-            }
-            pos++;
-        }
-        return buf.toString();
-    }    
-    
-    public String toPhrase() {
-        StringBuffer buf = new StringBuffer();
-        while (pos < chars.length) {
-            int numUppercase = countUppercase();
-            switch (numUppercase) {
-                case 0:
-                    processRegularChar(buf);
-                    break;
-                case 1:
-                    processSingleUppercaseChar(buf);
-                    break;
-                case 2:
-                    processTwoUppercaseChars(buf);
-                    break;
-                default:
-                    processUppercaseWord(buf, numUppercase);
-                    break;
-            }
-        }
-        return buf.toString();
-    }
-
-    private int countUppercase() {
-        int count = 0;
-        while (pos + count < chars.length && Character.isUpperCase(chars[pos + count]))
-            count++;
-        return count;
-    }
-    
-    private void processRegularChar(StringBuffer buf) {
-        buf.append(chars[pos++]);
-    }
-
-    private void processSingleUppercaseChar(StringBuffer buf) {
-        if (buf.length() > 0) {
-            buf.append(' ');
-        }
-        buf.append(Character.toLowerCase(chars[pos++]));
-    }
-
-    private void processTwoUppercaseChars(StringBuffer buf) {
-        processSingleUppercaseChar(buf);
-        processSingleUppercaseChar(buf);
-    }
-
-    private void processUppercaseWord(StringBuffer buf, int numUppercase) {
-        while (pos < numUppercase - 1) {
-            buf.append(chars[pos++]);
-        }
-        processSingleUppercaseChar(buf);
-    }
-
-
-}
+/*
+ * Created on 13-Aug-2004
+ * 
+ * (c) 2003-2004 ThoughtWorks Ltd
+ *
+ * See license.txt for license details
+ */
+package org.jbehave.core.util;
+
+import org.jbehave.core.story.domain.Named;
+
+
+/**
+ * Method object to convert to and from CamelCase
+ * 
+ * @author <a href="" PROTECTED]">Dan North</a>
+ */
+public class CamelCaseConverter {
+    private final char[] chars;
+    int pos = 0;
+
+    public CamelCaseConverter(String words) {
+        words = words.substring(words.lastIndexOf('.') + 1);
+        words = words.substring(words.lastIndexOf('$') + 1);
+        chars = words.toCharArray();
+    }
+
+
+    public CamelCaseConverter(Class type) {
+        this(type.getName());
+    }
+
+    public CamelCaseConverter(Object obj) {
+        this(obj instanceof Named ? ((Named) obj).getName() : obj.getClass().getName());
+    }
+    
+
+    public String toCamelCase() {
+        StringBuffer buf = new StringBuffer();
+        while (pos < chars.length) {
+            if (Character.isWhitespace(chars[pos])) {
+                pos++;
+                if (pos < chars.length) {
+                    buf.append(Character.toUpperCase(chars[pos]));
+                }
+            }
+            else if (pos == 0) {
+                buf.append(Character.toUpperCase(chars[pos]));
+            }
+            else {
+                buf.append(chars[pos]);
+            }
+            pos++;
+        }
+        return buf.toString();
+    }    
+    
+    public String toPhrase() {
+        StringBuffer buf = new StringBuffer();
+        while (pos < chars.length) {
+            int numUppercase = countUppercase();
+            switch (numUppercase) {
+                case 0:
+                    processRegularChar(buf);
+                    break;
+                case 1:
+                    processSingleUppercaseChar(buf);
+                    break;
+                case 2:
+                    processTwoUppercaseChars(buf);
+                    break;
+                default:
+                    processUppercaseWord(buf, numUppercase);
+                    break;
+            }
+        }
+        return buf.toString();
+    }
+
+    private int countUppercase() {
+        int count = 0;
+        while (pos + count < chars.length && Character.isUpperCase(chars[pos + count]))
+            count++;
+        return count;
+    }
+    
+    private void processRegularChar(StringBuffer buf) {
+        buf.append(chars[pos++]);
+    }
+
+    private void processSingleUppercaseChar(StringBuffer buf) {
+        if (buf.length() > 0) {
+            buf.append(' ');
+        }
+        buf.append(Character.toLowerCase(chars[pos++]));
+    }
+
+    private void processTwoUppercaseChars(StringBuffer buf) {
+        processSingleUppercaseChar(buf);
+        processSingleUppercaseChar(buf);
+    }
+
+    private void processUppercaseWord(StringBuffer buf, int numUppercase) {
+        while (pos < numUppercase - 1) {
+            buf.append(chars[pos++]);
+        }
+        processSingleUppercaseChar(buf);
+    }
+
+
+}

Modified: trunk/plugins/maven/src/main/java/org/jbehave/mojo/StoryRunnerMojo.java (742 => 743)

--- trunk/plugins/maven/src/main/java/org/jbehave/mojo/StoryRunnerMojo.java	2007-07-10 12:54:50 UTC (rev 742)
+++ trunk/plugins/maven/src/main/java/org/jbehave/mojo/StoryRunnerMojo.java	2007-07-10 13:18:50 UTC (rev 743)
@@ -38,7 +38,8 @@
         try {
             getLog().debug("Running story "+ storyPath);
             StoryLoader loader = new StoryLoader(storyParser, new BehavioursClassLoader(classpathElements));
-            Story story = loader.loadStory(storyPath, storyPackage);            
+            Story story = loader.loadStory(storyPath, storyPackage);
+			story.specify();
             storyRunner.run(story);
         } catch (Exception e) {
             throw new MojoExecutionException("Failed to run story "+storyPath+" with package "+storyPackage, e);


To unsubscribe from this list please visit:

http://xircles.codehaus.org/manage_email

Reply via email to