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>.