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")); } }