commit 9ef23a14e5a1075d405968955650bf4cc64e6144
Author:     Victor Rosenberg <victor.rosenb...@hp.com>
AuthorDate: Sat, 22 Jun 2013 15:15:49 +0300
Commit:     Mauro Talevi <mauro.tal...@aquilonia.org>
CommitDate: Mon, 24 Jun 2013 01:33:35 +0200

    JBEHAVE-924 - Faster regex in pattern variant bulder

diff --git 
a/jbehave-core/src/main/java/org/jbehave/core/steps/PatternVariantBuilder.java 
b/jbehave-core/src/main/java/org/jbehave/core/steps/PatternVariantBuilder.java
index 0b55095..e92605c 100644
--- 
a/jbehave-core/src/main/java/org/jbehave/core/steps/PatternVariantBuilder.java
+++ 
b/jbehave-core/src/main/java/org/jbehave/core/steps/PatternVariantBuilder.java
@@ -100,7 +100,7 @@ public class PatternVariantBuilder {
      * Regular expression that locates patterns to be evaluated in the input
      * pattern.
      */
-    private final Pattern regex = 
Pattern.compile("(.*?)?(\\{((.*?)(\\|)?)*?\\})(.*)");
+    private final Pattern regex = 
Pattern.compile("([^\\n{]*+)(\\{(([^|}]++)(\\|)?+)*+\\})([^\\n]*+)");
 
     private final Set<String> variants;
 
diff --git 
a/jbehave-core/src/test/java/org/jbehave/core/steps/PatternVariantBuilderBehaviour.java
 
b/jbehave-core/src/test/java/org/jbehave/core/steps/PatternVariantBuilderBehaviour.java
index c38fe5b..1568907 100644
--- 
a/jbehave-core/src/test/java/org/jbehave/core/steps/PatternVariantBuilderBehaviour.java
+++ 
b/jbehave-core/src/test/java/org/jbehave/core/steps/PatternVariantBuilderBehaviour.java
@@ -72,4 +72,22 @@ public class PatternVariantBuilderBehaviour {
                assertTrue(result.contains("When $A is added to $B"));
        }
 
+       @Test
+       public void hasUnclosedBracket() {
+               PatternVariantBuilder builder = new PatternVariantBuilder("When 
$A {+|plus|is added to $B");
+               Set<String> result = builder.allVariants();
+        assertEquals(1, result.size());
+               assertTrue(result.contains("When $A {+|plus|is added to $B"));
+       }
+
+       @Test
+       public void hasUnclosedBrackets() {
+        PatternVariantBuilder builder = new PatternVariantBuilder("When $A 
{+|plus|is added to} $B and }{$C");
+        Set<String> result = builder.allVariants();
+        assertEquals(3, result.size());
+        assertTrue(result.contains("When $A + $B and }{$C"));
+        assertTrue(result.contains("When $A plus $B and }{$C"));
+        assertTrue(result.contains("When $A is added to $B and }{$C"));
+       }
+
 }



Reply via email to