You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ss...@apache.org on 2015/09/08 18:00:36 UTC

svn commit: r1701828 - in /sling/trunk/testing/mocks/resourceresolver-mock/src: main/java/org/apache/sling/testing/resourceresolver/MockResourceResolver.java test/java/org/apache/sling/testing/resourceresolver/SlingCrudResourceResolverTest.java

Author: sseifert
Date: Tue Sep  8 16:00:36 2015
New Revision: 1701828

URL: http://svn.apache.org/r1701828
Log:
SLING-5007 resourceresolver-mock: listChildren broken for root path "/"

Modified:
    sling/trunk/testing/mocks/resourceresolver-mock/src/main/java/org/apache/sling/testing/resourceresolver/MockResourceResolver.java
    sling/trunk/testing/mocks/resourceresolver-mock/src/test/java/org/apache/sling/testing/resourceresolver/SlingCrudResourceResolverTest.java

Modified: sling/trunk/testing/mocks/resourceresolver-mock/src/main/java/org/apache/sling/testing/resourceresolver/MockResourceResolver.java
URL: http://svn.apache.org/viewvc/sling/trunk/testing/mocks/resourceresolver-mock/src/main/java/org/apache/sling/testing/resourceresolver/MockResourceResolver.java?rev=1701828&r1=1701827&r2=1701828&view=diff
==============================================================================
--- sling/trunk/testing/mocks/resourceresolver-mock/src/main/java/org/apache/sling/testing/resourceresolver/MockResourceResolver.java (original)
+++ sling/trunk/testing/mocks/resourceresolver-mock/src/main/java/org/apache/sling/testing/resourceresolver/MockResourceResolver.java Tue Sep  8 16:00:36 2015
@@ -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 extend
 
     @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 extend
     // 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);

Modified: sling/trunk/testing/mocks/resourceresolver-mock/src/test/java/org/apache/sling/testing/resourceresolver/SlingCrudResourceResolverTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/testing/mocks/resourceresolver-mock/src/test/java/org/apache/sling/testing/resourceresolver/SlingCrudResourceResolverTest.java?rev=1701828&r1=1701827&r2=1701828&view=diff
==============================================================================
--- sling/trunk/testing/mocks/resourceresolver-mock/src/test/java/org/apache/sling/testing/resourceresolver/SlingCrudResourceResolverTest.java (original)
+++ sling/trunk/testing/mocks/resourceresolver-mock/src/test/java/org/apache/sling/testing/resourceresolver/SlingCrudResourceResolverTest.java Tue Sep  8 16:00:36 2015
@@ -181,6 +181,19 @@ public class SlingCrudResourceResolverTe
     }
 
     @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");