diff --git a/spring-web/src/test/java/org/springframework/web/util/pattern/PathPatternParserTests.java b/spring-web/src/test/java/org/springframework/web/util/pattern/PathPatternParserTests.java index a233a01718..918af190af 100644 --- a/spring-web/src/test/java/org/springframework/web/util/pattern/PathPatternParserTests.java +++ b/spring-web/src/test/java/org/springframework/web/util/pattern/PathPatternParserTests.java @@ -32,7 +32,9 @@ import static org.assertj.core.api.Assertions.fail; /** * Exercise the {@link PathPatternParser}. + * * @author Andy Clement + * @author Sam Brannen */ public class PathPatternParserTests { @@ -118,7 +120,10 @@ public class PathPatternParserTests { public void regexPathElementPatterns() { checkError("/{var:[^/]*}", 8, PatternMessage.MISSING_CLOSE_CAPTURE); checkError("/{var:abc", 8, PatternMessage.MISSING_CLOSE_CAPTURE); - checkError("/{var:a{{1,2}}}", 6, PatternMessage.REGEX_PATTERN_SYNTAX_EXCEPTION); + + // Do not check the expected position due a change in RegEx parsing in JDK 13. + // See https://github.com/spring-projects/spring-framework/issues/23669 + checkError("/{var:a{{1,2}}}", PatternMessage.REGEX_PATTERN_SYNTAX_EXCEPTION); pathPattern = checkStructure("/{var:\\\\}"); PathElement next = pathPattern.getHeadSection().next; @@ -432,18 +437,32 @@ public class PathPatternParserTests { return pp; } + /** + * Delegates to {@link #checkError(String, int, PatternMessage, String...)}, + * passing {@code -1} as the {@code expectedPos}. + * @since 5.2 + */ + private void checkError(String pattern, PatternMessage expectedMessage, String... expectedInserts) { + checkError(pattern, -1, expectedMessage, expectedInserts); + } + + /** + * @param expectedPos the expected position, or {@code -1} if the position should not be checked + */ private void checkError(String pattern, int expectedPos, PatternMessage expectedMessage, String... expectedInserts) { - assertThatExceptionOfType(PatternParseException.class).isThrownBy(() -> - pathPattern = parse(pattern)) - .satisfies(ex -> { - assertThat(ex.getPosition()).as(ex.toDetailedString()).isEqualTo(expectedPos); - assertThat(ex.getMessageType()).as(ex.toDetailedString()).isEqualTo(expectedMessage); - if (expectedInserts.length != 0) { - assertThat(ex.getInserts()).isEqualTo(expectedInserts); - } - }); + assertThatExceptionOfType(PatternParseException.class) + .isThrownBy(() -> pathPattern = parse(pattern)) + .satisfies(ex -> { + if (expectedPos >= 0) { + assertThat(ex.getPosition()).as(ex.toDetailedString()).isEqualTo(expectedPos); + } + assertThat(ex.getMessageType()).as(ex.toDetailedString()).isEqualTo(expectedMessage); + if (expectedInserts.length != 0) { + assertThat(ex.getInserts()).isEqualTo(expectedInserts); + } + }); } @SafeVarargs