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