Allow separator configuration in PathPatternParser
This commit allows to configure a custom path separator when parsing and matching path patterns with `PathPatternParser`, but also when parsing incoming paths as `PathContainer` instances. Closes gh-23092
This commit is contained in:
@@ -27,6 +27,7 @@ import org.springframework.util.LinkedMultiValueMap;
|
||||
import org.springframework.util.MultiValueMap;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException;
|
||||
|
||||
/**
|
||||
* Unit tests for {@link DefaultPathContainer}.
|
||||
@@ -111,15 +112,18 @@ public class DefaultPathContainerTests {
|
||||
testPath("//%20/%20", "//%20/%20", Arrays.asList("/", "/", "%20", "/", "%20"));
|
||||
}
|
||||
|
||||
private void testPath(String input, String value, List<String> expectedElements) {
|
||||
|
||||
PathContainer path = PathContainer.parsePath(input);
|
||||
private void testPath(String input, String separator, String value, List<String> expectedElements) {
|
||||
PathContainer path = PathContainer.parsePath(input, separator);
|
||||
|
||||
assertThat(path.value()).as("value: '" + input + "'").isEqualTo(value);
|
||||
assertThat(path.elements().stream()
|
||||
.map(PathContainer.Element::value).collect(Collectors.toList())).as("elements: " + input).isEqualTo(expectedElements);
|
||||
}
|
||||
|
||||
private void testPath(String input, String value, List<String> expectedElements) {
|
||||
testPath(input, "/", value, expectedElements);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void subPath() throws Exception {
|
||||
// basic
|
||||
@@ -137,4 +141,14 @@ public class DefaultPathContainerTests {
|
||||
assertThat(path.subPath(2).value()).isEqualTo("/b/");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void pathWithCustomSeparator() throws Exception {
|
||||
testPath("a.b.c", ".", "a.b.c", Arrays.asList("a", ".", "b", ".", "c"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void emptySeparator() {
|
||||
assertThatIllegalArgumentException().isThrownBy(() -> PathContainer.parsePath("path", ""));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -408,6 +408,15 @@ public class PathPatternParserTests {
|
||||
assertThat(patterns.get(1)).isEqualTo(p2);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void separatorTests() {
|
||||
PathPatternParser parser = new PathPatternParser();
|
||||
parser.setSeparator('.');
|
||||
String rawPattern = "first.second.{last}";
|
||||
PathPattern pattern = parser.parse(rawPattern);
|
||||
assertThat(pattern.computePatternString()).isEqualTo(rawPattern);
|
||||
}
|
||||
|
||||
private PathPattern parse(String pattern) {
|
||||
PathPatternParser patternParser = new PathPatternParser();
|
||||
return patternParser.parse(pattern);
|
||||
|
||||
Reference in New Issue
Block a user