Fix ResourceHintsWriter for leading/trailing wildcards

Closes gh-28597
This commit is contained in:
Sébastien Deleuze
2022-06-09 14:31:21 +02:00
parent 40ab20e14a
commit 99ffd97a72
2 changed files with 35 additions and 2 deletions

View File

@@ -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) {

View File

@@ -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 {
}""", 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();