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:01 UTC

[sling-org-apache-sling-testing-resourceresolver-mock] 22/25: SLING-4229 resourceresolver-mock: Provide child resource access in ValueMap

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.0
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-testing-resourceresolver-mock.git

commit 1a4461e9a96391fdf9641f4c5c12ee673b42ac6a
Author: Stefan Seifert <ss...@apache.org>
AuthorDate: Tue Dec 9 12:57:46 2014 +0000

    SLING-4229 resourceresolver-mock: Provide child resource access in ValueMap
    
    git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/testing/mocks/resourceresolver-mock@1644041 13f79535-47bb-0310-9956-ffa450edef68
---
 .../testing/resourceresolver/MockResource.java     |  2 +-
 .../testing/resourceresolver/MockValueMap.java     | 25 ++++++++++++++++++----
 .../SlingCrudResourceResolverTest.java             | 19 +++++++++++++++-
 3 files changed, 40 insertions(+), 6 deletions(-)

diff --git a/src/main/java/org/apache/sling/testing/resourceresolver/MockResource.java b/src/main/java/org/apache/sling/testing/resourceresolver/MockResource.java
index 687bd57..d68ca4e 100644
--- a/src/main/java/org/apache/sling/testing/resourceresolver/MockResource.java
+++ b/src/main/java/org/apache/sling/testing/resourceresolver/MockResource.java
@@ -50,7 +50,7 @@ public class MockResource extends AbstractResource {
             final Map<String, Object> props,
             final ResourceResolver resolver) {
         this.path = path;
-        this.props = (props instanceof MockValueMap) ? (MockValueMap)props : new MockValueMap(props);
+        this.props = (props instanceof MockValueMap) ? (MockValueMap)props : new MockValueMap(this, props);
         this.resolver = resolver;
     }
 
diff --git a/src/main/java/org/apache/sling/testing/resourceresolver/MockValueMap.java b/src/main/java/org/apache/sling/testing/resourceresolver/MockValueMap.java
index ea83e2c..d5aa666 100644
--- a/src/main/java/org/apache/sling/testing/resourceresolver/MockValueMap.java
+++ b/src/main/java/org/apache/sling/testing/resourceresolver/MockValueMap.java
@@ -28,6 +28,8 @@ import java.util.Map;
 
 import org.apache.commons.io.IOUtils;
 import org.apache.jackrabbit.util.ISO8601;
+import org.apache.sling.api.resource.Resource;
+import org.apache.sling.api.resource.ResourceUtil;
 import org.apache.sling.api.wrappers.ValueMapDecorator;
 
 /**
@@ -40,17 +42,32 @@ import org.apache.sling.api.wrappers.ValueMapDecorator;
  */
 public class MockValueMap extends ValueMapDecorator {
     
-    public MockValueMap() {
-        this(new HashMap<String, Object>());
+    private final Resource resource;
+    
+    public MockValueMap(Resource resource) {
+        this(resource, new HashMap<String, Object>());
     }
 
-    public MockValueMap(Map<String,Object> map) {
+    public MockValueMap(Resource resource, Map<String,Object> map) {
         super(convertForWrite(map));
+        this.resource = resource;
     }
 
     @SuppressWarnings("unchecked")
     @Override
     public <T> T get(String name, Class<T> type) {
+        
+        // check for deep path access
+        int slashPos = name.lastIndexOf('/');
+        if (slashPos >= 0) {
+            String resourcePath = "./" + name.substring(0, slashPos);
+            String propertyName = name.substring(slashPos + 1);
+            Resource childResource = resource.getChild(resourcePath);
+            if (childResource!=null) {
+                return ResourceUtil.getValueMap(childResource).get(propertyName, type);
+            }
+        }
+        
         if (type == Calendar.class) {
             // Support conversion of String to Calendar if value conforms to ISO8601 date format
             Object value = get(name);
@@ -80,7 +97,7 @@ public class MockValueMap extends ValueMapDecorator {
         }
         return super.get(name, type);
     }
-
+    
     @Override
     public Object put(String key, Object value) {
         return super.put(key, convertForWrite(value));
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 466e67d..e1dbf29 100644
--- a/src/test/java/org/apache/sling/testing/resourceresolver/SlingCrudResourceResolverTest.java
+++ b/src/test/java/org/apache/sling/testing/resourceresolver/SlingCrudResourceResolverTest.java
@@ -84,7 +84,9 @@ public class SlingCrudResourceResolverTest {
                 .put("binaryProp", new ByteArrayInputStream(BINARY_VALUE))
                 .build());
 
-        resourceResolver.create(node1, "node11", ValueMap.EMPTY);
+        resourceResolver.create(node1, "node11", ImmutableMap.<String, Object>builder()
+                .put("stringProp11", STRING_VALUE)
+                .build());
         resourceResolver.create(node1, "node12", ValueMap.EMPTY);
 
         resourceResolver.commit();
@@ -105,6 +107,21 @@ public class SlingCrudResourceResolverTest {
     }
 
     @Test
+    public void testSimpleProperties_DeepPathAccess() throws IOException {
+        Resource resource1 = resourceResolver.getResource(testRoot.getPath());
+        assertNotNull(resource1);
+        assertEquals(testRoot.getName(), resource1.getName());
+
+        ValueMap props = ResourceUtil.getValueMap(resource1);
+        assertEquals(STRING_VALUE, props.get("node1/stringProp", String.class));
+        assertArrayEquals(STRING_ARRAY_VALUE, props.get("node1/stringArrayProp", String[].class));
+        assertEquals((Integer) INTEGER_VALUE, props.get("node1/integerProp", Integer.class));
+        assertEquals(DOUBLE_VALUE, props.get("node1/doubleProp", Double.class), 0.0001);
+        assertEquals(BOOLEAN_VALUE, props.get("node1/booleanProp", Boolean.class));
+        assertEquals(STRING_VALUE, props.get("node1/node11/stringProp11", String.class));
+    }
+
+    @Test
     public void testDateProperty() throws IOException {
         Resource resource1 = resourceResolver.getResource(testRoot.getPath() + "/node1");
         ValueMap props = ResourceUtil.getValueMap(resource1);

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