WebFlux compiles after PathPattern/Container changes

This commit is contained in:
Rossen Stoyanchev
2017-06-30 11:03:36 -04:00
parent 26448a0ebc
commit 8581afa621
9 changed files with 220 additions and 269 deletions

View File

@@ -29,17 +29,20 @@ import org.junit.Ignore;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.springframework.http.server.reactive.PathContainer;
import org.springframework.http.server.reactive.PathContainer.Element;
import org.springframework.util.AntPathMatcher;
import org.springframework.web.util.pattern.ParsingPathMatcher;
import org.springframework.web.util.pattern.PathPattern;
import org.springframework.web.util.pattern.PathPattern.PathMatchResult;
import org.springframework.web.util.pattern.PathPattern.PathRemainingMatchInfo;
import org.springframework.web.util.pattern.PathPatternParser;
import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.*;
import static org.hamcrest.CoreMatchers.containsString;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
/**
* Exercise matching of {@link PathPattern} objects.
@@ -125,26 +128,26 @@ public class PathPatternMatcherTests {
// CaptureVariablePathElement
pp = parse("/{var}");
assertMatches(pp,"/resource");
assertEquals("resource",pp.matchAndExtract(toPathContainer("/resource")).get("var").value());
assertEquals("resource",pp.matchAndExtract(toPathContainer("/resource")).getUriVariables().get("var"));
assertMatches(pp,"/resource/");
assertEquals("resource",pp.matchAndExtract(toPathContainer("/resource/")).get("var").value());
assertEquals("resource",pp.matchAndExtract(toPathContainer("/resource/")).getUriVariables().get("var"));
assertNoMatch(pp,"/resource//");
pp = parse("/{var}/");
assertNoMatch(pp,"/resource");
assertMatches(pp,"/resource/");
assertEquals("resource",pp.matchAndExtract(toPathContainer("/resource/")).get("var").value());
assertEquals("resource",pp.matchAndExtract(toPathContainer("/resource/")).getUriVariables().get("var"));
assertNoMatch(pp,"/resource//");
// CaptureTheRestPathElement
pp = parse("/{*var}");
assertMatches(pp,"/resource");
assertEquals("/resource",pp.matchAndExtract(toPathContainer("/resource")).get("var").value());
assertEquals("/resource",pp.matchAndExtract(toPathContainer("/resource")).getUriVariables().get("var"));
assertMatches(pp,"/resource/");
assertEquals("/resource/",pp.matchAndExtract(toPathContainer("/resource/")).get("var").value());
assertEquals("/resource/",pp.matchAndExtract(toPathContainer("/resource/")).getUriVariables().get("var"));
assertMatches(pp,"/resource//");
assertEquals("/resource//",pp.matchAndExtract(toPathContainer("/resource//")).get("var").value());
assertEquals("/resource//",pp.matchAndExtract(toPathContainer("/resource//")).getUriVariables().get("var"));
assertMatches(pp,"//resource//");
assertEquals("//resource//",pp.matchAndExtract(toPathContainer("//resource//")).get("var").value());
assertEquals("//resource//",pp.matchAndExtract(toPathContainer("//resource//")).getUriVariables().get("var"));
// WildcardTheRestPathElement
pp = parse("/**");
@@ -166,17 +169,17 @@ public class PathPatternMatcherTests {
// RegexPathElement
pp = parse("/{var1}_{var2}");
assertMatches(pp,"/res1_res2");
assertEquals("res1",pp.matchAndExtract(toPathContainer("/res1_res2")).get("var1").value());
assertEquals("res2",pp.matchAndExtract(toPathContainer("/res1_res2")).get("var2").value());
assertEquals("res1",pp.matchAndExtract(toPathContainer("/res1_res2")).getUriVariables().get("var1"));
assertEquals("res2",pp.matchAndExtract(toPathContainer("/res1_res2")).getUriVariables().get("var2"));
assertMatches(pp,"/res1_res2/");
assertEquals("res1",pp.matchAndExtract(toPathContainer("/res1_res2/")).get("var1").value());
assertEquals("res2",pp.matchAndExtract(toPathContainer("/res1_res2/")).get("var2").value());
assertEquals("res1",pp.matchAndExtract(toPathContainer("/res1_res2/")).getUriVariables().get("var1"));
assertEquals("res2",pp.matchAndExtract(toPathContainer("/res1_res2/")).getUriVariables().get("var2"));
assertNoMatch(pp,"/res1_res2//");
pp = parse("/{var1}_{var2}/");
assertNoMatch(pp,"/res1_res2");
assertMatches(pp,"/res1_res2/");
assertEquals("res1",pp.matchAndExtract(toPathContainer("/res1_res2/")).get("var1").value());
assertEquals("res2",pp.matchAndExtract(toPathContainer("/res1_res2/")).get("var2").value());
assertEquals("res1",pp.matchAndExtract(toPathContainer("/res1_res2/")).getUriVariables().get("var1"));
assertEquals("res2",pp.matchAndExtract(toPathContainer("/res1_res2/")).getUriVariables().get("var2"));
assertNoMatch(pp,"/res1_res2//");
pp = parse("/{var1}*");
assertMatches(pp,"/a");
@@ -210,25 +213,25 @@ public class PathPatternMatcherTests {
// CaptureVariablePathElement
pp = parser.parse("/{var}");
assertMatches(pp,"/resource");
assertEquals("resource",pp.matchAndExtract(toPathContainer("/resource")).get("var").value());
assertEquals("resource",pp.matchAndExtract(toPathContainer("/resource")).getUriVariables().get("var"));
assertNoMatch(pp,"/resource/");
assertNoMatch(pp,"/resource//");
pp = parser.parse("/{var}/");
assertNoMatch(pp,"/resource");
assertMatches(pp,"/resource/");
assertEquals("resource",pp.matchAndExtract(toPathContainer("/resource/")).get("var").value());
assertEquals("resource",pp.matchAndExtract(toPathContainer("/resource/")).getUriVariables().get("var"));
assertNoMatch(pp,"/resource//");
// CaptureTheRestPathElement
pp = parser.parse("/{*var}");
assertMatches(pp,"/resource");
assertEquals("/resource",pp.matchAndExtract(toPathContainer("/resource")).get("var").value());
assertEquals("/resource",pp.matchAndExtract(toPathContainer("/resource")).getUriVariables().get("var"));
assertMatches(pp,"/resource/");
assertEquals("/resource/",pp.matchAndExtract(toPathContainer("/resource/")).get("var").value());
assertEquals("/resource/",pp.matchAndExtract(toPathContainer("/resource/")).getUriVariables().get("var"));
assertMatches(pp,"/resource//");
assertEquals("/resource//",pp.matchAndExtract(toPathContainer("/resource//")).get("var").value());
assertEquals("/resource//",pp.matchAndExtract(toPathContainer("/resource//")).getUriVariables().get("var"));
assertMatches(pp,"//resource//");
assertEquals("//resource//",pp.matchAndExtract(toPathContainer("//resource//")).get("var").value());
assertEquals("//resource//",pp.matchAndExtract(toPathContainer("//resource//")).getUriVariables().get("var"));
// WildcardTheRestPathElement
pp = parser.parse("/**");
@@ -250,15 +253,15 @@ public class PathPatternMatcherTests {
// RegexPathElement
pp = parser.parse("/{var1}_{var2}");
assertMatches(pp,"/res1_res2");
assertEquals("res1",pp.matchAndExtract(toPathContainer("/res1_res2")).get("var1").value());
assertEquals("res2",pp.matchAndExtract(toPathContainer("/res1_res2")).get("var2").value());
assertEquals("res1",pp.matchAndExtract(toPathContainer("/res1_res2")).getUriVariables().get("var1"));
assertEquals("res2",pp.matchAndExtract(toPathContainer("/res1_res2")).getUriVariables().get("var2"));
assertNoMatch(pp,"/res1_res2/");
assertNoMatch(pp,"/res1_res2//");
pp = parser.parse("/{var1}_{var2}/");
assertNoMatch(pp,"/res1_res2");
assertMatches(pp,"/res1_res2/");
assertEquals("res1",pp.matchAndExtract(toPathContainer("/res1_res2/")).get("var1").value());
assertEquals("res2",pp.matchAndExtract(toPathContainer("/res1_res2/")).get("var2").value());
assertEquals("res1",pp.matchAndExtract(toPathContainer("/res1_res2/")).getUriVariables().get("var1"));
assertEquals("res2",pp.matchAndExtract(toPathContainer("/res1_res2/")).getUriVariables().get("var2"));
assertNoMatch(pp,"/res1_res2//");
pp = parser.parse("/{var1}*");
assertMatches(pp,"/a");
@@ -337,23 +340,23 @@ public class PathPatternMatcherTests {
PathPattern.PathRemainingMatchInfo pri = parse("/aaa/{bbb}/c?d/e*f/*/g").getPathRemaining(toPathContainer("/aaa/b/ccd/ef/x/g/i"));
assertEquals("/i",pri.getPathRemaining());
assertEquals("b",pri.getMatchingVariables().get("bbb").value());
assertEquals("b",pri.getUriVariables().get("bbb"));
pri = parse("/aaa/{bbb}/c?d/e*f/*/g/").getPathRemaining(toPathContainer("/aaa/b/ccd/ef/x/g/i"));
assertEquals("i",pri.getPathRemaining());
assertEquals("b",pri.getMatchingVariables().get("bbb").value());
assertEquals("b",pri.getUriVariables().get("bbb"));
pri = parse("/{aaa}_{bbb}/e*f/{x}/g").getPathRemaining(toPathContainer("/aa_bb/ef/x/g/i"));
assertEquals("/i",pri.getPathRemaining());
assertEquals("aa",pri.getMatchingVariables().get("aaa").value());
assertEquals("bb",pri.getMatchingVariables().get("bbb").value());
assertEquals("x",pri.getMatchingVariables().get("x").value());
assertEquals("aa",pri.getUriVariables().get("aaa"));
assertEquals("bb",pri.getUriVariables().get("bbb"));
assertEquals("x",pri.getUriVariables().get("x"));
assertNull(parse("/a/b").getPathRemaining(toPathContainer("")));
assertNull(parse("/a/b").getPathRemaining(null));
assertNull(parse("/a/b").getPathRemaining((String) null));
assertEquals("/a/b",parse("").getPathRemaining(toPathContainer("/a/b")).getPathRemaining());
assertEquals("",parse("").getPathRemaining(toPathContainer("")).getPathRemaining());
assertNull(parse("").getPathRemaining(null).getPathRemaining());
assertNull(parse("").getPathRemaining((String) null).getPathRemaining());
}
@Test
@@ -550,30 +553,30 @@ public class PathPatternMatcherTests {
pp = parse("/{this}/{one}/{here}");
pri = getPathRemaining(pp, "/foo/bar/goo/boo");
assertEquals("/boo",pri.getPathRemaining());
assertEquals("foo",pri.getMatchingVariables().get("this").value());
assertEquals("bar",pri.getMatchingVariables().get("one").value());
assertEquals("goo",pri.getMatchingVariables().get("here").value());
assertEquals("foo",pri.getUriVariables().get("this"));
assertEquals("bar",pri.getUriVariables().get("one"));
assertEquals("goo",pri.getUriVariables().get("here"));
pp = parse("/aaa/{foo}");
pri = getPathRemaining(pp, "/aaa/bbb");
assertEquals("",pri.getPathRemaining());
assertEquals("bbb",pri.getMatchingVariables().get("foo").value());
assertEquals("bbb",pri.getUriVariables().get("foo"));
pp = parse("/aaa/bbb");
pri = getPathRemaining(pp, "/aaa/bbb");
assertEquals("",pri.getPathRemaining());
assertEquals(0,pri.getMatchingVariables().size());
assertEquals(0,pri.getUriVariables().size());
pp = parse("/*/{foo}/b*");
pri = getPathRemaining(pp, "/foo");
assertNull(pri);
pri = getPathRemaining(pp, "/abc/def/bhi");
assertEquals("",pri.getPathRemaining());
assertEquals("def",pri.getMatchingVariables().get("foo").value());
assertEquals("def",pri.getUriVariables().get("foo"));
pri = getPathRemaining(pp, "/abc/def/bhi/jkl");
assertEquals("/jkl",pri.getPathRemaining());
assertEquals("def",pri.getMatchingVariables().get("foo").value());
assertEquals("def",pri.getUriVariables().get("foo"));
}
@Test
@@ -953,7 +956,7 @@ public class PathPatternMatcherTests {
catch (IllegalStateException e) {
assertEquals("Pattern \"\" is not a match for \"/abc\"", e.getMessage());
}
assertEquals(0, checkCapture("", "").size());
assertEquals(0, checkCapture("", "").getUriVariables().size());
checkCapture("{id}", "99", "id", "99");
checkCapture("/customer/{customerId}", "/customer/78", "customerId", "78");
checkCapture("/customer/{customerId}/banana", "/customer/42/banana", "customerId",
@@ -962,8 +965,8 @@ public class PathPatternMatcherTests {
checkCapture("/foo/{bar}/boo/{baz}", "/foo/plum/boo/apple", "bar", "plum", "baz",
"apple");
checkCapture("/{bla}.*", "/testing.html", "bla", "testing");
Map<String, PathMatchResult> extracted = checkCapture("/abc", "/abc");
assertEquals(0, extracted.size());
PathMatchResult extracted = checkCapture("/abc", "/abc");
assertEquals(0, extracted.getUriVariables().size());
checkCapture("/{bla}/foo","/a/foo");
}
@@ -973,14 +976,14 @@ public class PathPatternMatcherTests {
PathPattern p = null;
p = pp.parse("{symbolicName:[\\w\\.]+}-{version:[\\w\\.]+}.jar");
Map<String, PathMatchResult> result = matchAndExtract(p, "com.example-1.0.0.jar");
assertEquals("com.example", result.get("symbolicName").value());
assertEquals("1.0.0", result.get("version").value());
PathMatchResult result = matchAndExtract(p, "com.example-1.0.0.jar");
assertEquals("com.example", result.getUriVariables().get("symbolicName"));
assertEquals("1.0.0", result.getUriVariables().get("version"));
p = pp.parse("{symbolicName:[\\w\\.]+}-sources-{version:[\\w\\.]+}.jar");
result = matchAndExtract(p, "com.example-sources-1.0.0.jar");
assertEquals("com.example", result.get("symbolicName").value());
assertEquals("1.0.0", result.get("version").value());
assertEquals("com.example", result.getUriVariables().get("symbolicName"));
assertEquals("1.0.0", result.getUriVariables().get("version"));
}
@Test
@@ -988,22 +991,22 @@ public class PathPatternMatcherTests {
PathPatternParser pp = new PathPatternParser();
PathPattern p = pp.parse("{symbolicName:[\\p{L}\\.]+}-sources-{version:[\\p{N}\\.]+}.jar");
Map<String, PathMatchResult> result = p.matchAndExtract(toPathContainer("com.example-sources-1.0.0.jar"));
assertEquals("com.example", result.get("symbolicName").value());
assertEquals("1.0.0", result.get("version").value());
PathMatchResult result = p.matchAndExtract(toPathContainer("com.example-sources-1.0.0.jar"));
assertEquals("com.example", result.getUriVariables().get("symbolicName"));
assertEquals("1.0.0", result.getUriVariables().get("version"));
p = pp.parse("{symbolicName:[\\w\\.]+}-sources-{version:[\\d\\.]+}-{year:\\d{4}}{month:\\d{2}}{day:\\d{2}}.jar");
result = matchAndExtract(p,"com.example-sources-1.0.0-20100220.jar");
assertEquals("com.example", result.get("symbolicName").value());
assertEquals("1.0.0", result.get("version").value());
assertEquals("2010", result.get("year").value());
assertEquals("02", result.get("month").value());
assertEquals("20", result.get("day").value());
assertEquals("com.example", result.getUriVariables().get("symbolicName"));
assertEquals("1.0.0", result.getUriVariables().get("version"));
assertEquals("2010", result.getUriVariables().get("year"));
assertEquals("02", result.getUriVariables().get("month"));
assertEquals("20", result.getUriVariables().get("day"));
p = pp.parse("{symbolicName:[\\p{L}\\.]+}-sources-{version:[\\p{N}\\.\\{\\}]+}.jar");
result = matchAndExtract(p, "com.example-sources-1.0.0.{12}.jar");
assertEquals("com.example", result.get("symbolicName").value());
assertEquals("1.0.0.{12}", result.get("version").value());
assertEquals("com.example", result.getUriVariables().get("symbolicName"));
assertEquals("1.0.0.{12}", result.getUriVariables().get("version"));
}
@Test
@@ -1137,12 +1140,12 @@ public class PathPatternMatcherTests {
PathPatternParser parser = new PathPatternParser();
PathPattern p1 = parser.parse("/{foo}");
PathPattern p2 = parser.parse("/{foo}.*");
Map<String, PathMatchResult> r1 = matchAndExtract(p1, "/file.txt");
Map<String, PathMatchResult> r2 = matchAndExtract(p2, "/file.txt");
PathMatchResult r1 = matchAndExtract(p1, "/file.txt");
PathMatchResult r2 = matchAndExtract(p2, "/file.txt");
// works fine
assertEquals("file.txt", r1.get("foo").value());
assertEquals("file", r2.get("foo").value());
assertEquals("file.txt", r1.getUriVariables().get("foo"));
assertEquals("file", r2.getUriVariables().get("foo"));
// This produces 2 (see comments in https://jira.spring.io/browse/SPR-14544 )
// Comparator<String> patternComparator = new AntPathMatcher().getPatternComparator("");
@@ -1269,38 +1272,38 @@ public class PathPatternMatcherTests {
@Test
public void parameters() {
// CaptureVariablePathElement
Map<String, PathMatchResult> result = matchAndExtract("/abc/{var}","/abc/one;two=three;four=five");
assertEquals("one",result.get("var").value());
assertEquals("[three]",result.get("var").parameters().get("two").toString());
assertEquals("[five]",result.get("var").parameters().get("four").toString());
PathMatchResult result = matchAndExtract("/abc/{var}","/abc/one;two=three;four=five");
assertEquals("one",result.getUriVariables().get("var"));
assertEquals("three",result.getMatrixVariables().get("var").getFirst("two"));
assertEquals("five",result.getMatrixVariables().get("var").getFirst("four"));
// RegexPathElement
result = matchAndExtract("/abc/{var1}_{var2}","/abc/123_456;a=b;c=d");
assertEquals("123",result.get("var1").value());
assertEquals("456",result.get("var2").value());
assertEquals("123",result.getUriVariables().get("var1"));
assertEquals("456",result.getUriVariables().get("var2"));
// vars associated with second variable
assertNull(result.get("var1").parameters().get("a"));
assertNull(result.get("var1").parameters().get("c"));
assertEquals("[b]",result.get("var2").parameters().get("a").toString());
assertEquals("[d]",result.get("var2").parameters().get("c").toString());
assertNull(result.getMatrixVariables().get("var1"));
assertNull(result.getMatrixVariables().get("var1"));
assertEquals("b",result.getMatrixVariables().get("var2").getFirst("a"));
assertEquals("d",result.getMatrixVariables().get("var2").getFirst("c"));
// CaptureTheRestPathElement
result = matchAndExtract("/{*var}","/abc/123_456;a=b;c=d");
assertEquals("/abc/123_456",result.get("var").value());
assertEquals("[b]",result.get("var").parameters().get("a").toString());
assertEquals("[d]",result.get("var").parameters().get("c").toString());
assertEquals("/abc/123_456",result.getUriVariables().get("var"));
assertEquals("b",result.getMatrixVariables().get("var").getFirst("a"));
assertEquals("d",result.getMatrixVariables().get("var").getFirst("c"));
result = matchAndExtract("/{*var}","/abc/123_456;a=b;c=d/789;a=e;f=g");
assertEquals("/abc/123_456/789",result.get("var").value());
assertEquals("[b, e]",result.get("var").parameters().get("a").toString());
assertEquals("[d]",result.get("var").parameters().get("c").toString());
assertEquals("[g]",result.get("var").parameters().get("f").toString());
assertEquals("/abc/123_456/789",result.getUriVariables().get("var"));
assertEquals("[b, e]",result.getMatrixVariables().get("var").get("a").toString());
assertEquals("d",result.getMatrixVariables().get("var").getFirst("c"));
assertEquals("g",result.getMatrixVariables().get("var").getFirst("f"));
result = matchAndExtract("/abc/{var}","/abc/one");
assertEquals("one",result.get("var").value());
assertEquals(0,result.get("var").parameters().size());
assertEquals("one",result.getUriVariables().get("var"));
assertNull(result.getMatrixVariables().get("var"));
}
// ---
private Map<String, PathMatchResult> matchAndExtract(String pattern, String path) {
private PathMatchResult matchAndExtract(String pattern, String path) {
return parse(pattern).matchAndExtract(PathPatternMatcherTests.toPathContainer(path));
}
@@ -1346,29 +1349,26 @@ public class PathPatternMatcherTests {
assertFalse(pattern.matches(PathContainer));
}
private Map<String, PathMatchResult> checkCapture(String uriTemplate, String path, String... keyValues) {
private PathMatchResult checkCapture(String uriTemplate, String path, String... keyValues) {
PathPatternParser parser = new PathPatternParser();
PathPattern pattern = parser.parse(uriTemplate);
Map<String, PathMatchResult> matchResults = pattern.matchAndExtract(toPathContainer(path));
PathMatchResult matchResult = pattern.matchAndExtract(toPathContainer(path));
Map<String, String> expectedKeyValues = new HashMap<>();
if (keyValues != null) {
for (int i = 0; i < keyValues.length; i += 2) {
expectedKeyValues.put(keyValues[i], keyValues[i + 1]);
}
for (int i = 0; i < keyValues.length; i += 2) {
expectedKeyValues.put(keyValues[i], keyValues[i + 1]);
}
Map<String, PathMatchResult> capturedVariables = matchResults;
for (Map.Entry<String, String> me : expectedKeyValues.entrySet()) {
String value = capturedVariables.get(me.getKey()).value();
String value = matchResult.getUriVariables().get(me.getKey());
if (value == null) {
fail("Did not find key '" + me.getKey() + "' in captured variables: "
+ capturedVariables);
+ matchResult.getUriVariables());
}
if (!value.equals(me.getValue())) {
fail("Expected value '" + me.getValue() + "' for key '" + me.getKey()
+ "' but was '" + value + "'");
}
}
return capturedVariables;
return matchResult;
}
private void checkExtractPathWithinPattern(String pattern, String path, String expected) {
@@ -1399,7 +1399,7 @@ public class PathPatternMatcherTests {
return pattern.getPathRemaining(toPathContainer(path));
}
private Map<String, PathMatchResult> matchAndExtract(PathPattern p, String path) {
private PathMatchResult matchAndExtract(PathPattern p, String path) {
return p.matchAndExtract(toPathContainer(path));
}

View File

@@ -19,14 +19,18 @@ package org.springframework.web.util.pattern;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import org.junit.Test;
import org.springframework.http.server.reactive.PathContainer;
import org.springframework.web.util.pattern.PathPattern.PathMatchResult;
import org.springframework.web.util.pattern.PatternParseException.PatternMessage;
import static org.junit.Assert.*;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
/**
* Exercise the {@link PathPatternParser}.
@@ -137,23 +141,23 @@ public class PathPatternParserTests {
pathPattern = checkStructure("/{var:[^\\/]*}");
assertEquals(CaptureVariablePathElement.class.getName(), pathPattern.getHeadSection().next.getClass().getName());
Map<String, PathMatchResult> result = matchAndExtract(pathPattern,"/foo");
assertEquals("foo", result.get("var").value());
PathMatchResult result = matchAndExtract(pathPattern,"/foo");
assertEquals("foo", result.getUriVariables().get("var"));
pathPattern = checkStructure("/{var:\\[*}");
assertEquals(CaptureVariablePathElement.class.getName(), pathPattern.getHeadSection().next.getClass().getName());
result = matchAndExtract(pathPattern,"/[[[");
assertEquals("[[[", result.get("var").value());
assertEquals("[[[", result.getUriVariables().get("var"));
pathPattern = checkStructure("/{var:[\\{]*}");
assertEquals(CaptureVariablePathElement.class.getName(), pathPattern.getHeadSection().next.getClass().getName());
result = matchAndExtract(pathPattern,"/{{{");
assertEquals("{{{", result.get("var").value());
assertEquals("{{{", result.getUriVariables().get("var"));
pathPattern = checkStructure("/{var:[\\}]*}");
assertEquals(CaptureVariablePathElement.class.getName(), pathPattern.getHeadSection().next.getClass().getName());
result = matchAndExtract(pathPattern,"/}}}");
assertEquals("}}}", result.get("var").value());
assertEquals("}}}", result.getUriVariables().get("var"));
pathPattern = checkStructure("*");
assertEquals(WildcardPathElement.class.getName(), pathPattern.getHeadSection().getClass().getName());
@@ -467,7 +471,7 @@ public class PathPatternParserTests {
assertFalse(pp.matches(PathPatternMatcherTests.toPathContainer(path)));
}
private Map<String, PathMatchResult> matchAndExtract(PathPattern pp, String path) {
private PathMatchResult matchAndExtract(PathPattern pp, String path) {
return pp.matchAndExtract(PathPatternMatcherTests.toPathContainer(path));
}