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 <[email protected]> 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 "[email protected]" <[email protected]>.
