You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ro...@apache.org on 2017/11/07 10:21:28 UTC

[sling-org-apache-sling-testing-resourceresolver-mock] 23/26: SLING-5007 resourceresolver-mock: listChildren broken for root path "/"

This is an automated email from the ASF dual-hosted git repository.

rombert pushed a commit to annotated tag org.apache.sling.testing.resourceresolver-mock-1.1.10
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-testing-resourceresolver-mock.git

commit 34bf185a8463b6be8a833105c836f45f4c5ed00c
Author: Stefan Seifert <ss...@apache.org>
AuthorDate: Tue Sep 8 16:00:36 2015 +0000

    SLING-5007 resourceresolver-mock: listChildren broken for root path "/"
    
    git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/testing/mocks/resourceresolver-mock@1701828 13f79535-47bb-0310-9956-ffa450edef68
---
 .../testing/resourceresolver/MockResourceResolver.java      |  9 +++++----
 .../resourceresolver/SlingCrudResourceResolverTest.java     | 13 +++++++++++++
 2 files changed, 18 insertions(+), 4 deletions(-)

diff --git a/src/main/java/org/apache/sling/testing/resourceresolver/MockResourceResolver.java b/src/main/java/org/apache/sling/testing/resourceresolver/MockResourceResolver.java
index 338eef4..34f7d7f 100644
--- a/src/main/java/org/apache/sling/testing/resourceresolver/MockResourceResolver.java
+++ b/src/main/java/org/apache/sling/testing/resourceresolver/MockResourceResolver.java
@@ -29,6 +29,7 @@ import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.regex.Pattern;
 
 import javax.servlet.http.HttpServletRequest;
 
@@ -207,18 +208,19 @@ public class MockResourceResolver extends SlingAdaptable implements ResourceReso
 
     @Override
     public Iterator<Resource> listChildren(final Resource parent) {
-        final String prefixPath = parent.getPath() + "/";
+        final String pathPrefix = "/".equals(parent.getPath()) ? "" : parent.getPath();
+        final Pattern childPathMatcher = Pattern.compile("^" + Pattern.quote(pathPrefix) + "/[^/]+$");
         final Map<String, Map<String, Object>> candidates = new LinkedHashMap<String, Map<String,Object>>();
         synchronized ( this.resources ) {
             for(final Map.Entry<String, Map<String, Object>> e : this.resources.entrySet()) {
-                if (e.getKey().startsWith(prefixPath) && e.getKey().lastIndexOf('/') < prefixPath.length() ) {
+                if (childPathMatcher.matcher(e.getKey()).matches()) {
                     if ( !this.deletedResources.contains(e.getKey()) ) {
                         candidates.put(e.getKey(), e.getValue());
                     }
                 }
             }
             for(final Map.Entry<String, Map<String, Object>> e : this.temporaryResources.entrySet()) {
-                if (e.getKey().startsWith(prefixPath) && e.getKey().lastIndexOf('/') < prefixPath.length() ) {
+                if (childPathMatcher.matcher(e.getKey()).matches()) {
                     if ( !this.deletedResources.contains(e.getKey()) ) {
                         candidates.put(e.getKey(), e.getValue());
                     }
@@ -235,7 +237,6 @@ public class MockResourceResolver extends SlingAdaptable implements ResourceReso
     // part of Resource API 2.5.0
     public Iterable<Resource> getChildren(final Resource parent) {
         return new Iterable<Resource>() {
-
             @Override
             public Iterator<Resource> iterator() {
                 return listChildren(parent);
diff --git a/src/test/java/org/apache/sling/testing/resourceresolver/SlingCrudResourceResolverTest.java b/src/test/java/org/apache/sling/testing/resourceresolver/SlingCrudResourceResolverTest.java
index b0ca80f..7cbe7e0 100644
--- a/src/test/java/org/apache/sling/testing/resourceresolver/SlingCrudResourceResolverTest.java
+++ b/src/test/java/org/apache/sling/testing/resourceresolver/SlingCrudResourceResolverTest.java
@@ -181,6 +181,19 @@ public class SlingCrudResourceResolverTest {
     }
 
     @Test
+    public void testListChildren_RootNode() throws IOException {
+        Resource resource1 = resourceResolver.getResource("/");
+
+        List<Resource> children = Lists.newArrayList(resource1.listChildren());
+        assertEquals(1, children.size());
+        assertEquals("test", children.get(0).getName());
+
+        children = Lists.newArrayList(resource1.getChildren());
+        assertEquals(1, children.size());
+        assertEquals("test", children.get(0).getName());
+    }
+
+    @Test
     public void testBinaryData() throws IOException {
         Resource resource1 = resourceResolver.getResource(testRoot.getPath() + "/node1");
 

-- 
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.