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

cziegeler pushed a commit to branch master
in repository 
https://gitbox.apache.org/repos/asf/sling-org-apache-sling-resourceresolver.git


The following commit(s) were added to refs/heads/master by this push:
     new c02d261  SLING-10553 : Add more tests for listing resource children
c02d261 is described below

commit c02d26129a59622afaf598f614e938bda003bf06
Author: Carsten Ziegeler <[email protected]>
AuthorDate: Fri Jun 25 13:49:36 2021 +0200

    SLING-10553 : Add more tests for listing resource children
---
 .../impl/helper/ResourceResolverControlTest.java   | 49 ++++++++++++++++++----
 1 file changed, 41 insertions(+), 8 deletions(-)

diff --git 
a/src/test/java/org/apache/sling/resourceresolver/impl/helper/ResourceResolverControlTest.java
 
b/src/test/java/org/apache/sling/resourceresolver/impl/helper/ResourceResolverControlTest.java
index 93cc638..bbef17c 100644
--- 
a/src/test/java/org/apache/sling/resourceresolver/impl/helper/ResourceResolverControlTest.java
+++ 
b/src/test/java/org/apache/sling/resourceresolver/impl/helper/ResourceResolverControlTest.java
@@ -25,6 +25,7 @@ import static org.hamcrest.Matchers.not;
 import static org.hamcrest.Matchers.notNullValue;
 import static org.hamcrest.Matchers.nullValue;
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertSame;
@@ -50,6 +51,7 @@ import org.apache.sling.api.resource.ResourceMetadata;
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.api.resource.ResourceResolverFactory;
 import org.apache.sling.api.resource.ResourceUtil;
+import org.apache.sling.api.resource.SyntheticResource;
 import org.apache.sling.api.resource.ValueMap;
 import org.apache.sling.api.resource.runtime.dto.AuthType;
 import org.apache.sling.resourceresolver.impl.Fixture;
@@ -224,6 +226,10 @@ public class ResourceResolverControlTest {
         return mockResource;
     }
 
+    private Resource newSyntheticResource(final String path) {
+        return new SyntheticResource(null, path, "type");
+    }
+
     /**
      * Verifies that login and logout calls are invoked as expected on
      * ResourceProviders with authType = {@link AuthType#required}
@@ -541,8 +547,8 @@ public class ResourceResolverControlTest {
         final PathTree<ResourceProviderHandler> tree = new 
PathTree<>(handlers);
         
 //        assertChildren( control.listChildrenInternal(context, 
tree.getNode("/libs"), newMockResource("/libs"), null), "/libs/sub1" );
-        assertChildren( control.listChildrenInternal(context, 
tree.getNode("/libs/sub1"), newMockResource("/libs/sub1"), null), 
"/libs/sub1/xy" );
-        assertChildren( control.listChildrenInternal(context, 
tree.getNode("/libs/sub1/xy"), newMockResource("/libs/sub1/xy"), null), 
"/libs/sub1/xy/sub2" );
+        assertChildren( control.listChildrenInternal(context, 
tree.getNode("/libs/sub1"), newMockResource("/libs/sub1"), null), 
newSyntheticResource("/libs/sub1/xy") );
+        assertChildren( control.listChildrenInternal(context, 
tree.getNode("/libs/sub1/xy"), newMockResource("/libs/sub1/xy"), null), 
newSyntheticResource("/libs/sub1/xy/sub2") );
         assertChildren( control.listChildrenInternal(context, 
tree.getNode("/libs/sub1/xy/sub2"), newMockResource("/libs/sub1/xy/sub2"), 
null) );
     }
 
@@ -576,30 +582,57 @@ public class ResourceResolverControlTest {
 
         final PathTree<ResourceProviderHandler> tree = new 
PathTree<>(handlers);
         
+        // two resources - not overlapping
         final Resource c1 = newMockResource("/libs/sub1/a");
         final Resource c2 = newMockResource("/libs/sub1/b");
 
         assertChildren( control.listChildrenInternal(context, 
tree.getNode("/libs/sub1"), newMockResource("/libs/sub1"), 
-            Arrays.asList(c1, c2).iterator()), "/libs/sub1/xy", 
"/libs/sub1/a", "/libs/sub1/b" );
+            Arrays.asList(c1, c2).iterator()), 
newSyntheticResource("/libs/sub1/xy"), c1, c2 );
+
+        // additional resource, overlapping with synthetic
+        final Resource c3 = newMockResource("/libs/sub1/xy");
+        assertChildren( control.listChildrenInternal(context, 
tree.getNode("/libs/sub1"), newMockResource("/libs/sub1"), 
+            Arrays.asList(c1, c2, c3).iterator()), c1, c2, c3 );
+
+        // same as provider, provider not returning resource
+        final Resource c4 = newMockResource("/libs/sub1/xy/sub2");
+        assertChildren( control.listChildrenInternal(context, 
tree.getNode("/libs/sub1/xy"), newMockResource("/libs/sub1/xy"), 
+            Arrays.asList(c4).iterator()), c4 );
+
+        // same as provider, provider returning resource
+        final Resource parent = newMockResource("/libs/sub1/xy");
+        final Resource c5 = newMockResource("/libs/sub1/xy/sub2");
+        Mockito.when(sub2Provider.getResource("/libs/sub1/xy/sub2", parent, 
null)).thenReturn(c5);
+        assertChildren( control.listChildrenInternal(context, 
tree.getNode("/libs/sub1/xy"),parent , 
+            Arrays.asList(c4).iterator()), c5 );
     }
 
     private Map<String, Resource> mapChildren(final Iterator<Resource> 
children) {
         final Map<String, Resource> all = new HashMap<String, Resource>();
         while ( children.hasNext() ) {
             final Resource child = children.next();
+            if ( all.containsKey(child.getPath()) ) {
+                fail(child.getPath());
+            }
             all.put(child.getPath(), child);
         }
         return all;
     }
     
-    private void assertChildren(final Iterator<Resource> children, final 
String... paths) {
+    private void assertChildren(final Iterator<Resource> children, final 
Resource... resources) {
         final Map<String, Resource> all = mapChildren(children);
-        if ( paths == null ) {
+        if ( resources == null ) {
             assertTrue(all.isEmpty());
         } else {
-            assertEquals("" + all.keySet(), paths.length, all.size());
-            for(final String path : paths) {
-                assertTrue(all.keySet() + " : " + path, all.containsKey(path));
+            assertEquals("" + all.keySet(), resources.length, all.size());
+            for(final Resource rsrc : resources) {
+                assertTrue(all.keySet() + " : " + rsrc.getPath(), 
all.containsKey(rsrc.getPath()));
+                if ( ResourceUtil.isSyntheticResource(rsrc)) {
+                    
assertTrue(ResourceUtil.isSyntheticResource(all.get(rsrc.getPath())));
+                } else {
+                    
assertFalse(ResourceUtil.isSyntheticResource(all.get(rsrc.getPath())));
+                    assertSame(rsrc, all.get(rsrc.getPath()));
+                }
             }    
         }
     }

Reply via email to