You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by mc...@apache.org on 2012/01/28 17:40:38 UTC

svn commit: r1237092 - in /struts/struts2/trunk/core/src: main/java/org/apache/struts2/util/RegexPatternMatcher.java test/java/org/apache/struts2/util/RegexPatternMatcherTest.java

Author: mcucchiara
Date: Sat Jan 28 16:40:38 2012
New Revision: 1237092

URL: http://svn.apache.org/viewvc?rev=1237092&view=rev
Log:
WW-3747 - regular expressions in combination with advanced wildcards don't work

Modified:
    struts/struts2/trunk/core/src/main/java/org/apache/struts2/util/RegexPatternMatcher.java
    struts/struts2/trunk/core/src/test/java/org/apache/struts2/util/RegexPatternMatcherTest.java

Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/util/RegexPatternMatcher.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/util/RegexPatternMatcher.java?rev=1237092&r1=1237091&r2=1237092&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/main/java/org/apache/struts2/util/RegexPatternMatcher.java (original)
+++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/util/RegexPatternMatcher.java Sat Jan 28 16:40:38 2012
@@ -74,7 +74,7 @@ public class RegexPatternMatcher impleme
 
         //generate a new pattern used to match URIs
         //replace {X:B} by (B)
-        String newPattern = data.replaceAll("(\\{.*?:(.*?)\\})", "($2)");
+        String newPattern = data.replaceAll("(\\{[^\\}]*?:(.*?)\\})", "($2)");
 
         //replace {X} by (.*?)
         newPattern = newPattern.replaceAll("(\\{.*?\\})", "(.*?)");

Modified: struts/struts2/trunk/core/src/test/java/org/apache/struts2/util/RegexPatternMatcherTest.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/test/java/org/apache/struts2/util/RegexPatternMatcherTest.java?rev=1237092&r1=1237091&r2=1237092&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/test/java/org/apache/struts2/util/RegexPatternMatcherTest.java (original)
+++ struts/struts2/trunk/core/src/test/java/org/apache/struts2/util/RegexPatternMatcherTest.java Sat Jan 28 16:40:38 2012
@@ -20,12 +20,12 @@
  */
 package org.apache.struts2.util;
 
+import junit.framework.TestCase;
+
 import java.util.HashMap;
 import java.util.Map;
 import java.util.regex.Pattern;
 
-import junit.framework.TestCase;
-
 
 public class RegexPatternMatcherTest extends TestCase {
     private RegexPatternMatcher matcher = new RegexPatternMatcher();
@@ -148,6 +148,38 @@ public class RegexPatternMatcherTest ext
         assertEquals("/some/val0/some/val1/buaaa", values.get("0"));
     }
 
+    /**
+     * See WW-3747
+     */
+    public void testWW_3747() {
+        RegexPatternMatcherExpression expr = matcher.compilePattern("/{type}/{author:.+}/list");
+
+        Map<String, String> values = new HashMap<String, String>();
+
+        assertTrue(matcher.match(values, "/philosophy/AynRand/list", expr));
+        assertEquals(5, values.size());
+        assertEquals("philosophy", values.get("type"));
+        assertEquals("AynRand", values.get("author"));
+
+        assertEquals("/philosophy/AynRand/list", values.get("0"));
+    }
+
+    /**
+     * See WW-3747
+     */
+    public void testWW_3747_2() {
+        RegexPatternMatcherExpression expr = matcher.compilePattern("/event/modify/{action}/{eventId:[0-9]+}");
+
+        Map<String, String> values = new HashMap<String, String>();
+
+        assertTrue(matcher.match(values, "/event/modify/delete/1234", expr));
+        assertEquals(5, values.size());
+        assertEquals("delete", values.get("action"));
+        assertEquals("1234", values.get("eventId"));
+
+        assertEquals("/event/modify/delete/1234", values.get("0"));
+    }
+
     public void testCompileBad0() {
         try {
             matcher.compilePattern("/{test/some");