Skip to content

Commit 50be77a

Browse files
authored
Merge pull request apache#686 from apache/WW-5309-named-matcher
[WW-5309] Supports patterns starting with variable
2 parents c057761 + 1df2f0a commit 50be77a

File tree

2 files changed

+22
-2
lines changed

2 files changed

+22
-2
lines changed

core/src/main/java/com/opensymphony/xwork2/util/NamedVariablePatternMatcher.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -87,8 +87,8 @@ public CompiledPattern compilePattern(String data) {
8787
int s = 0;
8888
while (s < len) {
8989
int e = data.indexOf('{', s);
90-
if (e < 0 && data.indexOf('}') > -1) {
91-
throw new IllegalArgumentException("Missing openning '{' in [" + data + "]!");
90+
if (e < 0 && data.indexOf('}', s) > -1) {
91+
throw new IllegalArgumentException("Missing opening '{' in [" + data + "]!");
9292
}
9393
if (e < 0) {
9494
regex.append(Pattern.quote(data.substring(s)));

core/src/test/java/com/opensymphony/xwork2/util/NamedVariablePatternMatcherTest.java

+20
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,26 @@ public void testCompile() {
5353
assertEquals("bob", pattern.getVariableNames().get(1));
5454
assertTrue(pattern.getPattern().matcher("foostar/jie").matches());
5555
assertFalse(pattern.getPattern().matcher("foo/star/jie").matches());
56+
57+
pattern = matcher.compilePattern("{urlLocale}/eula_cz");
58+
assertEquals("([^/]+)\\Q/eula_cz\\E", pattern.getPattern().pattern());
59+
assertEquals("urlLocale", pattern.getVariableNames().get(0));
60+
assertTrue(pattern.getPattern().matcher("foostar/eula_cz").matches());
61+
assertFalse(pattern.getPattern().matcher("foo/star/eula_cz").matches());
62+
63+
pattern = matcher.compilePattern("{test1}/path/{test2}");
64+
assertEquals("([^/]+)\\Q/path/\\E([^/]+)", pattern.getPattern().pattern());
65+
assertEquals("test1", pattern.getVariableNames().get(0));
66+
assertEquals("test2", pattern.getVariableNames().get(1));
67+
assertTrue(pattern.getPattern().matcher("test1/path/test2").matches());
68+
assertFalse(pattern.getPattern().matcher("test/1/path/test2").matches());
69+
70+
pattern = matcher.compilePattern("path1/{test1}/path2/{test2}");
71+
assertEquals("\\Qpath1/\\E([^/]+)\\Q/path2/\\E([^/]+)", pattern.getPattern().pattern());
72+
assertEquals("test1", pattern.getVariableNames().get(0));
73+
assertEquals("test2", pattern.getVariableNames().get(1));
74+
assertTrue(pattern.getPattern().matcher("path1/test1/path2/test2").matches());
75+
assertFalse(pattern.getPattern().matcher("path1/test/1/path2/test2").matches());
5676
}
5777

5878
@Test(expected = IllegalArgumentException.class)

0 commit comments

Comments
 (0)