SLING-6878 : Bundle resource provider: support mounting of JSON files
git-svn-id: https://svn.apache.org/repos/asf/sling/trunk@1806186 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/test/java/org/apache/sling/bundleresource/impl/BundleResourceProviderTest.java b/src/test/java/org/apache/sling/bundleresource/impl/BundleResourceProviderTest.java
index a9bfae2..3917dfe 100644
--- a/src/test/java/org/apache/sling/bundleresource/impl/BundleResourceProviderTest.java
+++ b/src/test/java/org/apache/sling/bundleresource/impl/BundleResourceProviderTest.java
@@ -18,16 +18,19 @@
*/
package org.apache.sling.bundleresource.impl;
+import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import java.io.IOException;
+import java.io.InputStream;
import java.net.URL;
import java.util.Collections;
import java.util.Map;
+import org.apache.sling.api.resource.Resource;
import org.apache.sling.bundleresource.impl.url.ResourceURLStreamHandler;
import org.apache.sling.bundleresource.impl.url.ResourceURLStreamHandlerFactory;
import org.apache.sling.spi.resource.provider.ResolveContext;
@@ -53,6 +56,13 @@
when(bundle.getEntry(path)).thenReturn(url);
}
+ void addContent(Bundle bundle, String path, String content) throws IOException {
+ final URL url = new URL("resource:" + path);
+
+ ResourceURLStreamHandler.addContents(path, content);
+ when(bundle.getEntry(path)).thenReturn(url);
+ }
+
@Before
public void setup() {
ResourceURLStreamHandlerFactory.init();
@@ -61,7 +71,7 @@
@SuppressWarnings("unchecked")
@Test public void testFileResource() throws IOException {
final Bundle bundle = getBundle();
- addContent(bundle, "/libs/foo/test.json", Collections.singletonMap("test", (Object)"foo"));
+ addContent(bundle, "/libs/foo/test.json", "HELLOWORLD");
final MappedPath path = new MappedPath("/libs/foo", null, null);
@@ -79,6 +89,33 @@
final BundleResourceProvider provider = new BundleResourceProvider(bundle, path);
assertNull(provider.getResource(mock(ResolveContext.class), "/libs/foo/test.json", mock(ResourceContext.class), null));
- assertNotNull(provider.getResource(mock(ResolveContext.class), "/libs/foo/test", mock(ResourceContext.class), null));
+ final Resource rsrc = provider.getResource(mock(ResolveContext.class), "/libs/foo/test", mock(ResourceContext.class), null);
+ assertNotNull(rsrc);
+ assertNull(rsrc.adaptTo(InputStream.class));
+ assertNull(rsrc.adaptTo(URL.class));
+ assertNotNull(rsrc.getValueMap());
+ assertEquals("foo", rsrc.getValueMap().get("test", String.class));
+ }
+
+ @SuppressWarnings("unchecked")
+ @Test public void testFileAndJSONResource() throws IOException {
+ final Bundle bundle = getBundle();
+ addContent(bundle, "/libs/foo/test", "HELLOWORLD");
+ addContent(bundle, "/libs/foo/test.json", Collections.singletonMap("test", (Object)"foo"));
+
+ final MappedPath path = new MappedPath("/libs/foo", null, "json");
+
+ final BundleResourceProvider provider = new BundleResourceProvider(bundle, path);
+ assertNull(provider.getResource(mock(ResolveContext.class), "/libs/foo/test.json", mock(ResourceContext.class), null));
+ final Resource rsrc = provider.getResource(mock(ResolveContext.class), "/libs/foo/test", mock(ResourceContext.class), null);
+ assertNotNull(rsrc);
+ assertNotNull(rsrc.adaptTo(InputStream.class));
+ assertNotNull(rsrc.adaptTo(URL.class));
+ assertNotNull(rsrc.getValueMap());
+ assertEquals("foo", rsrc.getValueMap().get("test", String.class));
+ final InputStream is = rsrc.adaptTo(InputStream.class);
+ final byte[] buffer = new byte[20];
+ final int l = is.read(buffer);
+ assertEquals("HELLOWORLD", new String(buffer, 0, l, "UTF-8"));
}
}