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")); + } + }