commit 4a7abd359ed6e37b10d7110f7c37f9e16aa98558
Author:     Mauro Talevi <mauro.tal...@aquilonia.org>
AuthorDate: Thu Sep 13 15:35:01 2012 +0100
Commit:     Mauro Talevi <mauro.tal...@aquilonia.org>
CommitDate: Thu Sep 13 15:40:00 2012 +0100

    JBEHAVE-835:  Handle spurious narratives as simple story description.

diff --git 
a/jbehave-gherkin/src/main/java/org/jbehave/core/parsers/gherkin/GherkinStoryParser.java
 
b/jbehave-gherkin/src/main/java/org/jbehave/core/parsers/gherkin/GherkinStoryParser.java
index 5b558d8..141c86d 100644
--- 
a/jbehave-gherkin/src/main/java/org/jbehave/core/parsers/gherkin/GherkinStoryParser.java
+++ 
b/jbehave-gherkin/src/main/java/org/jbehave/core/parsers/gherkin/GherkinStoryParser.java
@@ -58,12 +58,14 @@ public class GherkinStoryParser extends 
TransformingStoryParser {
                                }
 
                                private void writeNarrative(String description) 
{
+                                       boolean valid = false;
                                        Matcher findingNarrative = compile(".*" 
+ keywords.narrative() + "(.*?)", DOTALL).matcher(description);
                                if (findingNarrative.matches()) {
                                    String narrative = 
findingNarrative.group(1).trim();
                                    Matcher findingElements = compile(".*" + 
keywords.inOrderTo() + "(.*)\\s*" + keywords.asA() + "(.*)\\s*" + 
keywords.iWantTo()
                                            + "(.*)", 
DOTALL).matcher(narrative);
                                    if (findingElements.matches()) {
+                                       valid = true;
                                        String inOrderTo = 
findingElements.group(1).trim();
                                        String asA = 
findingElements.group(2).trim();
                                        String iWantTo = 
findingElements.group(3).trim();
@@ -73,6 +75,12 @@ public class GherkinStoryParser extends 
TransformingStoryParser {
                                        out.append(keywords.iWantTo()).append(" 
").append(iWantTo).append("\n\n");                                      
                                    }
                                }
+                               if (!valid){
+                                       // if narrative format does not match, 
write description as part of story description
+                                       out.append(description);
+
+                               }
+                              
                                }
 
                                public void background(Background background) {
@@ -123,6 +131,7 @@ public class GherkinStoryParser extends 
TransformingStoryParser {
 
                        };
                        new Parser(formatter).parse(storyAsText, "", 0);
+                       System.out.println(out.toString());
                        return out.toString();
                }
        }
diff --git 
a/jbehave-gherkin/src/test/java/org/jbehave/core/parsers/gherkin/GherkinStoryParserBehaviour.java
 
b/jbehave-gherkin/src/test/java/org/jbehave/core/parsers/gherkin/GherkinStoryParserBehaviour.java
index cb641ca..0c2f231 100644
--- 
a/jbehave-gherkin/src/test/java/org/jbehave/core/parsers/gherkin/GherkinStoryParserBehaviour.java
+++ 
b/jbehave-gherkin/src/test/java/org/jbehave/core/parsers/gherkin/GherkinStoryParserBehaviour.java
@@ -95,4 +95,20 @@ public class GherkinStoryParserBehaviour {
                assertThat(narrative.iWantTo(), equalTo("drive cars on 4 
wheels"));
        }
 
+       @Test
+       public void shouldParseStoryWithUnsupportedNarrativeUsingGherkin() 
throws IOException{
+               String storyAsText = "Feature: Hello Car\n"
+                                   + "As a car driver\n"
+                                   + "I want to drive cars on 4 wheels\n"
+                                   + "So that I can feel safer\n"
+                                       + "Scenario: Car can drive\n"
+                                       + "Given I have a car with 4 wheels\n"
+                                       + "Then I can drive it.\n";
+               Story story = storyParser.parseStory(storyAsText);
+               assertThat(story.getDescription().asString(), equalTo("Hello 
Car\n\n"
+                                               + "As a car driver\n"
+                                           + "I want to drive cars on 4 
wheels\n"
+                                           + "So that I can feel safer"));     
        
+       }
+
 }



Reply via email to