Author: rombert
Date: Wed Jan 20 16:14:20 2016
New Revision: 1725748

URL: http://svn.apache.org/viewvc?rev=1725748&view=rev
Log:
SLING-5442 - CombinedResourceProvider.listChildren returns wrong paths
for SyntheticResources under '/'

Fix and tests.

Modified:
    
sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/providers/stateful/CombinedResourceProvider.java
    
sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/stateful/CombinedResourceProviderTest.java

Modified: 
sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/providers/stateful/CombinedResourceProvider.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/providers/stateful/CombinedResourceProvider.java?rev=1725748&r1=1725747&r2=1725748&view=diff
==============================================================================
--- 
sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/providers/stateful/CombinedResourceProvider.java
 (original)
+++ 
sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/providers/stateful/CombinedResourceProvider.java
 Wed Jan 20 16:14:20 2016
@@ -222,7 +222,12 @@ public class CombinedResourceProvider {
             for (final Entry<String, Node<ResourceProviderHandler>> entry : 
node.getChildren().entrySet()) {
                 final String name = entry.getKey();
                 final ResourceProviderHandler handler = 
entry.getValue().getValue();
-                final String childPath = new 
StringBuilder(parent.getPath()).append('/').append(name).toString();
+                StringBuilder pathBuilder = new StringBuilder();
+                if ( !parent.getPath().equals("/")) {
+                    pathBuilder.append(parent.getPath());
+                }
+                pathBuilder.append('/').append(name);
+                final String childPath = pathBuilder.toString();
                 if (handler == null) {
                     syntheticList.add(new SyntheticResource(resolver, 
childPath, RESOURCE_TYPE_SYNTHETIC));
                 } else {

Modified: 
sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/stateful/CombinedResourceProviderTest.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/stateful/CombinedResourceProviderTest.java?rev=1725748&r1=1725747&r2=1725748&view=diff
==============================================================================
--- 
sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/stateful/CombinedResourceProviderTest.java
 (original)
+++ 
sling/trunk/bundles/resourceresolver/src/test/java/org/apache/sling/resourceresolver/impl/stateful/CombinedResourceProviderTest.java
 Wed Jan 20 16:14:20 2016
@@ -178,4 +178,40 @@ public class CombinedResourceProviderTes
         assertThat(crp.getResource("/something", null, null, false), 
not(nullValue()));
         assertThat(crp.getResource("/some/path/object", null, null, false), 
not(nullValue()));
     }
+
+    /**
+     * Verifies that listing the children at root lists both the synthetic and 
the 'real' children
+     */
+    @Test
+    public void listChildren_root() {
+        Resource root = crp.getResource("/", null, null, false);
+        Iterator<Resource> children = crp.listChildren(root);
+        
+        Map<String, Resource> all = new HashMap<String, Resource>();
+        while ( children.hasNext() ) {
+            Resource child = children.next();
+            all.put(child.getPath(), child);
+        }
+        
+        assertThat(all.entrySet(), Matchers.hasSize(2));
+        assertThat("Resource at /something", all.get("/something"), 
not(nullValue()));
+        assertThat("Resource at /some", all.get("/some"), not(nullValue()));
+    }
+    
+    @Test
+    public void listChildren_lowerLevel() {
+        
+        Resource root = crp.getResource("/some", null, null, false);
+        Iterator<Resource> children = crp.listChildren(root);
+        Map<String, Resource> all = new HashMap<String, Resource>();
+
+        while ( children.hasNext() ) {
+            Resource child = children.next();
+            all.put(child.getPath(), child);
+        }
+        
+        assertThat(all.entrySet(), Matchers.hasSize(1));
+        assertThat("Resource at /some/path", all.get("/some/path"), 
not(nullValue()));
+        
+    }
 }


Reply via email to