This is an automated email from the ASF dual-hosted git repository.

lukaszlenart pushed a commit to branch WW-5309-named-matcher
in repository https://gitbox.apache.org/repos/asf/struts.git

commit 1df2f0a365c61c6a662024e5afcb3b059b8f3297
Author: Lukasz Lenart <lukaszlen...@apache.org>
AuthorDate: Tue May 16 20:44:55 2023 +0200

    WW-5309 Supports patterns starting with variable
---
 .../xwork2/util/NamedVariablePatternMatcher.java     |  4 ++--
 .../xwork2/util/NamedVariablePatternMatcherTest.java | 20 ++++++++++++++++++++
 2 files changed, 22 insertions(+), 2 deletions(-)

diff --git 
a/core/src/main/java/com/opensymphony/xwork2/util/NamedVariablePatternMatcher.java
 
b/core/src/main/java/com/opensymphony/xwork2/util/NamedVariablePatternMatcher.java
index 24e5e9b35..027dc4a58 100644
--- 
a/core/src/main/java/com/opensymphony/xwork2/util/NamedVariablePatternMatcher.java
+++ 
b/core/src/main/java/com/opensymphony/xwork2/util/NamedVariablePatternMatcher.java
@@ -87,8 +87,8 @@ public class NamedVariablePatternMatcher implements 
PatternMatcher<NamedVariable
         int s = 0;
         while (s < len) {
             int e = data.indexOf('{', s);
-            if (e < 0 && data.indexOf('}') > -1) {
-                throw new IllegalArgumentException("Missing openning '{' in [" 
+ data + "]!");
+            if (e < 0 && data.indexOf('}', s) > -1) {
+                throw new IllegalArgumentException("Missing opening '{' in [" 
+ data + "]!");
             }
             if (e < 0) {
                 regex.append(Pattern.quote(data.substring(s)));
diff --git 
a/core/src/test/java/com/opensymphony/xwork2/util/NamedVariablePatternMatcherTest.java
 
b/core/src/test/java/com/opensymphony/xwork2/util/NamedVariablePatternMatcherTest.java
index b5eda4f0a..da7f3f021 100644
--- 
a/core/src/test/java/com/opensymphony/xwork2/util/NamedVariablePatternMatcherTest.java
+++ 
b/core/src/test/java/com/opensymphony/xwork2/util/NamedVariablePatternMatcherTest.java
@@ -53,6 +53,26 @@ public class NamedVariablePatternMatcherTest {
         assertEquals("bob", pattern.getVariableNames().get(1));
         assertTrue(pattern.getPattern().matcher("foostar/jie").matches());
         assertFalse(pattern.getPattern().matcher("foo/star/jie").matches());
+
+        pattern = matcher.compilePattern("{urlLocale}/eula_cz");
+        assertEquals("([^/]+)\\Q/eula_cz\\E", pattern.getPattern().pattern());
+        assertEquals("urlLocale", pattern.getVariableNames().get(0));
+        assertTrue(pattern.getPattern().matcher("foostar/eula_cz").matches());
+        
assertFalse(pattern.getPattern().matcher("foo/star/eula_cz").matches());
+
+        pattern = matcher.compilePattern("{test1}/path/{test2}");
+        assertEquals("([^/]+)\\Q/path/\\E([^/]+)", 
pattern.getPattern().pattern());
+        assertEquals("test1", pattern.getVariableNames().get(0));
+        assertEquals("test2", pattern.getVariableNames().get(1));
+        assertTrue(pattern.getPattern().matcher("test1/path/test2").matches());
+        
assertFalse(pattern.getPattern().matcher("test/1/path/test2").matches());
+
+        pattern = matcher.compilePattern("path1/{test1}/path2/{test2}");
+        assertEquals("\\Qpath1/\\E([^/]+)\\Q/path2/\\E([^/]+)", 
pattern.getPattern().pattern());
+        assertEquals("test1", pattern.getVariableNames().get(0));
+        assertEquals("test2", pattern.getVariableNames().get(1));
+        
assertTrue(pattern.getPattern().matcher("path1/test1/path2/test2").matches());
+        
assertFalse(pattern.getPattern().matcher("path1/test/1/path2/test2").matches());
     }
 
     @Test(expected = IllegalArgumentException.class)

Reply via email to