This is an automated email from the ASF dual-hosted git repository. reschke pushed a commit to branch SLING-12804 in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-resourceresolver.git
commit 365a810868603a62d4065f9e708b0d3438e86291 Author: Julian Reschke <resc...@apache.org> AuthorDate: Tue May 27 15:01:18 2025 +0100 SLING-12804: alias refactoring - improve test coverage of query statements --- .../impl/mapping/AliasMapEntriesTest.java | 44 ++++++++++++++++++++-- 1 file changed, 41 insertions(+), 3 deletions(-) diff --git a/src/test/java/org/apache/sling/resourceresolver/impl/mapping/AliasMapEntriesTest.java b/src/test/java/org/apache/sling/resourceresolver/impl/mapping/AliasMapEntriesTest.java index 68f42126..21552dd1 100644 --- a/src/test/java/org/apache/sling/resourceresolver/impl/mapping/AliasMapEntriesTest.java +++ b/src/test/java/org/apache/sling/resourceresolver/impl/mapping/AliasMapEntriesTest.java @@ -31,6 +31,8 @@ import java.util.Optional; import java.util.Set; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicLong; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import org.apache.sling.api.resource.Resource; import org.apache.sling.api.resource.ResourceResolver; @@ -278,7 +280,8 @@ public class AliasMapEntriesTest extends AbstractMappingMapEntriesTest { if (queryThrowsWith == null) { when(resourceResolver.findResources(anyString(), eq("JCR-SQL2"))) .thenAnswer((Answer<Iterator<Resource>>) invocation -> { - if (invocation.getArguments()[0].toString().contains(ResourceResolverImpl.PROP_ALIAS)) { + String query = invocation.getArguments()[0].toString(); + if (query.equals(AQ_SIMPLE) || matchesPagedQuery(query)) { return List.of(aliasResource).iterator(); } else { return Collections.emptyIterator(); @@ -308,7 +311,8 @@ public class AliasMapEntriesTest extends AbstractMappingMapEntriesTest { when(resourceResolver.findResources(anyString(), eq("JCR-SQL2"))) .thenAnswer((Answer<Iterator<Resource>>) invocation -> { - if (invocation.getArguments()[0].toString().contains(ResourceResolverImpl.PROP_ALIAS)) { + String query = invocation.getArguments()[0].toString(); + if (query.equals(AQ_SIMPLE) || matchesPagedQuery(query)) { return Arrays.asList(result, secondResult).iterator(); } else { return Collections.emptyIterator(); @@ -345,7 +349,8 @@ public class AliasMapEntriesTest extends AbstractMappingMapEntriesTest { when(resourceResolver.findResources(anyString(), eq("JCR-SQL2"))) .thenAnswer((Answer<Iterator<Resource>>) invocation -> { - if (invocation.getArguments()[0].toString().contains(ResourceResolverImpl.PROP_ALIAS)) { + String query = invocation.getArguments()[0].toString(); + if (query.equals(AQ_SIMPLE) || matchesPagedQuery(query)) { return List.of(node, content).iterator(); } else { return Collections.emptyIterator(); @@ -1228,4 +1233,37 @@ public class AliasMapEntriesTest extends AbstractMappingMapEntriesTest { ah.initializeAliases(); assertFalse("alias handler should not have set up cache", ah.usesCache()); } + + // utilities for testing alias queries + + // used for paged query of all + private static final String AQ_PAGED_START = "SELECT [sling:alias] FROM [nt:base] WHERE " + + QueryBuildHelper.excludeSystemPath() + + " AND [sling:alias] IS NOT NULL AND FIRST([sling:alias]) >= '"; + private static final String AQ_PAGED_END = "' ORDER BY FIRST([sling:alias])"; + + private static final Pattern AQ_PAGED_PATTERN = + Pattern.compile(Pattern.quote(AQ_PAGED_START) + "(?<path>\\p{Alnum}*)" + Pattern.quote(AQ_PAGED_END)); + + // used when paged query not available + private static final String AQ_SIMPLE = "SELECT [sling:alias] FROM [nt:base] WHERE " + + QueryBuildHelper.excludeSystemPath() + " AND [sling:alias] IS NOT NULL"; + + // sanity test on matcher + @Test + public void testMatcher() { + assertTrue(AQ_PAGED_PATTERN.matcher(AQ_PAGED_START + AQ_PAGED_END).matches()); + assertTrue( + AQ_PAGED_PATTERN.matcher(AQ_PAGED_START + "xyz" + AQ_PAGED_END).matches()); + assertEquals( + 1, + AQ_PAGED_PATTERN.matcher(AQ_PAGED_START + "xyz" + AQ_PAGED_END).groupCount()); + Matcher m1 = AQ_PAGED_PATTERN.matcher(AQ_PAGED_START + "xyz" + AQ_PAGED_END); + assertTrue(m1.find()); + assertEquals("xyz", m1.group("path")); + } + + private boolean matchesPagedQuery(String query) { + return AQ_PAGED_PATTERN.matcher(query).matches(); + } }