Browse Source

Fix ResourceHintsWriter for leading/trailing wildcards

Closes gh-28597
pull/28613/head
Sébastien Deleuze 4 years ago
parent
commit
99ffd97a72
  1. 7
      spring-core/src/main/java/org/springframework/aot/nativex/ResourceHintsWriter.java
  2. 30
      spring-core/src/test/java/org/springframework/aot/nativex/ResourceHintsWriterTests.java

7
spring-core/src/main/java/org/springframework/aot/nativex/ResourceHintsWriter.java

@ -82,7 +82,12 @@ class ResourceHintsWriter { @@ -82,7 +82,12 @@ class ResourceHintsWriter {
}
private String patternToRegexp(String pattern) {
return Arrays.stream(pattern.split("\\*")).map(Pattern::quote).collect(Collectors.joining(".*"));
String prefix = (pattern.startsWith("*") ? ".*" : "");
String suffix = (pattern.endsWith("*") ? ".*" : "");
return Arrays.stream(pattern.split("\\*"))
.filter(s -> !s.isEmpty())
.map(Pattern::quote)
.collect(Collectors.joining(".*", prefix, suffix));
}
private void addIfNotEmpty(Map<String, Object> attributes, String name, @Nullable Object value) {

30
spring-core/src/test/java/org/springframework/aot/nativex/ResourceHintsWriterTests.java

@ -57,7 +57,21 @@ public class ResourceHintsWriterTests { @@ -57,7 +57,21 @@ public class ResourceHintsWriterTests {
}
@Test
void registerPattern() throws JSONException {
void registerWildcardAtTheBeginningPattern() throws JSONException {
ResourceHints hints = new ResourceHints();
hints.registerPattern("*.properties");
assertEquals("""
{
"resources": {
"includes": [
{ "pattern": ".*\\\\Q.properties\\\\E"}
]
}
}""", hints);
}
@Test
void registerWildcardInTheMiddlePattern() throws JSONException {
ResourceHints hints = new ResourceHints();
hints.registerPattern("com/example/*.properties");
assertEquals("""
@ -70,6 +84,20 @@ public class ResourceHintsWriterTests { @@ -70,6 +84,20 @@ public class ResourceHintsWriterTests {
}""", hints);
}
@Test
void registerWildcardAtTheEndPattern() throws JSONException {
ResourceHints hints = new ResourceHints();
hints.registerPattern("static/*");
assertEquals("""
{
"resources": {
"includes": [
{ "pattern": "\\\\Qstatic/\\\\E.*"}
]
}
}""", hints);
}
@Test
void registerPatternWithIncludesAndExcludes() throws JSONException {
ResourceHints hints = new ResourceHints();

Loading…
Cancel
Save