Author: sseifert Date: Tue Oct 21 20:09:55 2014 New Revision: 1633444 URL: http://svn.apache.org/r1633444 Log: SLING-4086 SlingHttpServlerRequest should support getResourceBundle() methods
Modified: sling/trunk/testing/mocks/sling-mock/pom.xml sling/trunk/testing/mocks/sling-mock/src/main/java/org/apache/sling/testing/mock/sling/context/SlingContextImpl.java sling/trunk/testing/mocks/sling-mock/src/main/java/org/apache/sling/testing/mock/sling/servlet/MockSlingHttpServletRequest.java sling/trunk/testing/mocks/sling-mock/src/test/java/org/apache/sling/testing/mock/sling/servlet/MockSlingHttpServletRequestTest.java Modified: sling/trunk/testing/mocks/sling-mock/pom.xml URL: http://svn.apache.org/viewvc/sling/trunk/testing/mocks/sling-mock/pom.xml?rev=1633444&r1=1633443&r2=1633444&view=diff ============================================================================== --- sling/trunk/testing/mocks/sling-mock/pom.xml (original) +++ sling/trunk/testing/mocks/sling-mock/pom.xml Tue Oct 21 20:09:55 2014 @@ -132,7 +132,13 @@ <version>1.2.2</version> <scope>compile</scope> </dependency> - + <dependency> + <groupId>org.apache.sling</groupId> + <artifactId>org.apache.sling.i18n</artifactId> + <version>2.2.4</version> + <scope>compile</scope> + </dependency> + <dependency> <groupId>commons-collections</groupId> <artifactId>commons-collections</artifactId> Modified: sling/trunk/testing/mocks/sling-mock/src/main/java/org/apache/sling/testing/mock/sling/context/SlingContextImpl.java URL: http://svn.apache.org/viewvc/sling/trunk/testing/mocks/sling-mock/src/main/java/org/apache/sling/testing/mock/sling/context/SlingContextImpl.java?rev=1633444&r1=1633443&r2=1633444&view=diff ============================================================================== --- sling/trunk/testing/mocks/sling-mock/src/main/java/org/apache/sling/testing/mock/sling/context/SlingContextImpl.java (original) +++ sling/trunk/testing/mocks/sling-mock/src/main/java/org/apache/sling/testing/mock/sling/context/SlingContextImpl.java Tue Oct 21 20:09:55 2014 @@ -215,7 +215,7 @@ public class SlingContextImpl { */ public final MockSlingHttpServletRequest request() { if (this.request == null) { - this.request = new MockSlingHttpServletRequest(this.resourceResolver()); + this.request = new MockSlingHttpServletRequest(this.resourceResolver(), this.bundleContext()); // initialize sling bindings SlingBindings bindings = new SlingBindings(); Modified: sling/trunk/testing/mocks/sling-mock/src/main/java/org/apache/sling/testing/mock/sling/servlet/MockSlingHttpServletRequest.java URL: http://svn.apache.org/viewvc/sling/trunk/testing/mocks/sling-mock/src/main/java/org/apache/sling/testing/mock/sling/servlet/MockSlingHttpServletRequest.java?rev=1633444&r1=1633443&r2=1633444&view=diff ============================================================================== --- sling/trunk/testing/mocks/sling-mock/src/main/java/org/apache/sling/testing/mock/sling/servlet/MockSlingHttpServletRequest.java (original) +++ sling/trunk/testing/mocks/sling-mock/src/main/java/org/apache/sling/testing/mock/sling/servlet/MockSlingHttpServletRequest.java Tue Oct 21 20:09:55 2014 @@ -29,6 +29,7 @@ import java.util.Enumeration; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; +import java.util.ListResourceBundle; import java.util.Locale; import java.util.Map; import java.util.ResourceBundle; @@ -59,14 +60,19 @@ import org.apache.sling.api.request.Requ import org.apache.sling.api.resource.Resource; import org.apache.sling.api.resource.ResourceResolver; import org.apache.sling.api.servlets.HttpConstants; +import org.apache.sling.i18n.ResourceBundleProvider; +import org.apache.sling.testing.mock.osgi.MockOsgi; import org.apache.sling.testing.mock.sling.MockSling; +import org.osgi.framework.BundleContext; +import org.osgi.framework.ServiceReference; /** * Mock {@link SlingHttpServletRequest} implementation. */ public class MockSlingHttpServletRequest extends SlingAdaptable implements SlingHttpServletRequest { - private ResourceResolver resourceResolver; + private final ResourceResolver resourceResolver; + private final BundleContext bundleContext; private RequestPathInfo requestPathInfo = new MockRequestPathInfo(); private Map<String, Object> attributeMap = new HashMap<String, Object>(); private Map<String, String[]> parameterMap = new LinkedHashMap<String, String[]>(); @@ -80,19 +86,34 @@ public class MockSlingHttpServletRequest private String method = HttpConstants.METHOD_GET; private final HeaderSupport headerSupport = new HeaderSupport(); private final CookieSupport cookieSupport = new CookieSupport(); + + private static final ResourceBundle EMPTY_RESOURCE_BUNDLE = new ListResourceBundle() { + @Override + protected Object[][] getContents() { + return new Object[0][0]; + } + }; /** * Instantiate with default resource resolver */ public MockSlingHttpServletRequest() { - this.resourceResolver = MockSling.newResourceResolver(); + this(MockSling.newResourceResolver()); } /** * @param resourceResolver Resource resolver */ public MockSlingHttpServletRequest(ResourceResolver resourceResolver) { + this(resourceResolver, MockOsgi.newBundleContext()); + } + + /** + * @param resourceResolver Resource resolver + */ + public MockSlingHttpServletRequest(ResourceResolver resourceResolver, BundleContext bundleContext) { this.resourceResolver = resourceResolver; + this.bundleContext = bundleContext; } @Override @@ -421,6 +442,27 @@ public class MockSlingHttpServletRequest cookieSupport.addCookie(cookie); } + @Override + public ResourceBundle getResourceBundle(Locale locale) { + return getResourceBundle(null, locale); + } + + @Override + public ResourceBundle getResourceBundle(String baseName, Locale locale) { + // check of ResourceBundleProvider is registered in mock OSGI context + ResourceBundle resourceBundle = null; + ServiceReference serviceReference = bundleContext.getServiceReference(ResourceBundleProvider.class.getName()); + if (serviceReference != null) { + ResourceBundleProvider provider = (ResourceBundleProvider)bundleContext.getService(serviceReference); + resourceBundle = provider.getResourceBundle(baseName, locale); + } + // if no ResourceBundleProvider exists return empty bundle + if (resourceBundle == null) { + resourceBundle = EMPTY_RESOURCE_BUNDLE; + } + return resourceBundle; + } + // --- unsupported operations --- @Override @@ -459,16 +501,6 @@ public class MockSlingHttpServletRequest } @Override - public ResourceBundle getResourceBundle(Locale pLocale) { - throw new UnsupportedOperationException(); - } - - @Override - public ResourceBundle getResourceBundle(String baseName, Locale locale) { - throw new UnsupportedOperationException(); - } - - @Override public String getResponseContentType() { throw new UnsupportedOperationException(); } Modified: sling/trunk/testing/mocks/sling-mock/src/test/java/org/apache/sling/testing/mock/sling/servlet/MockSlingHttpServletRequestTest.java URL: http://svn.apache.org/viewvc/sling/trunk/testing/mocks/sling-mock/src/test/java/org/apache/sling/testing/mock/sling/servlet/MockSlingHttpServletRequestTest.java?rev=1633444&r1=1633443&r2=1633444&view=diff ============================================================================== --- sling/trunk/testing/mocks/sling-mock/src/test/java/org/apache/sling/testing/mock/sling/servlet/MockSlingHttpServletRequestTest.java (original) +++ sling/trunk/testing/mocks/sling-mock/src/test/java/org/apache/sling/testing/mock/sling/servlet/MockSlingHttpServletRequestTest.java Tue Oct 21 20:09:55 2014 @@ -25,14 +25,18 @@ import static org.junit.Assert.assertNot import static org.junit.Assert.assertNull; import static org.junit.Assert.assertSame; import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.Calendar; import java.util.Enumeration; import java.util.LinkedHashMap; +import java.util.ListResourceBundle; import java.util.Locale; import java.util.Map; +import java.util.ResourceBundle; import javax.servlet.http.Cookie; import javax.servlet.http.HttpSession; @@ -41,11 +45,14 @@ import org.apache.commons.lang3.CharEnco import org.apache.sling.api.resource.Resource; import org.apache.sling.api.resource.ResourceResolver; import org.apache.sling.api.servlets.HttpConstants; +import org.apache.sling.i18n.ResourceBundleProvider; +import org.apache.sling.testing.mock.osgi.MockOsgi; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; +import org.osgi.framework.BundleContext; @RunWith(MockitoJUnitRunner.class) public class MockSlingHttpServletRequestTest { @@ -54,12 +61,13 @@ public class MockSlingHttpServletRequest private ResourceResolver resourceResolver; @Mock private Resource resource; + private BundleContext bundleContext = MockOsgi.newBundleContext(); private MockSlingHttpServletRequest request; @Before public void setUp() throws Exception { - request = new MockSlingHttpServletRequest(resourceResolver); + request = new MockSlingHttpServletRequest(resourceResolver, bundleContext); } @Test @@ -212,5 +220,34 @@ public class MockSlingHttpServletRequest assertEquals("value1", cookies[0].getValue()); assertEquals("value2", cookies[1].getValue()); } + + @Test + public void testDefaultResourceBundle() { + ResourceBundle bundle = request.getResourceBundle(Locale.US); + assertNotNull(bundle); + assertFalse(bundle.getKeys().hasMoreElements()); + } + + @Test + public void testResourceBundleFromProvider() { + ResourceBundleProvider provider = mock(ResourceBundleProvider.class); + bundleContext.registerService(ResourceBundleProvider.class.getName(), provider, null); + when(provider.getResourceBundle("base1", Locale.US)).thenReturn(new ListResourceBundle() { + @Override + protected Object[][] getContents() { + return new Object[][] { + { "key1", "value1" } + }; + } + }); + + ResourceBundle bundle = request.getResourceBundle("base1", Locale.US); + assertNotNull(bundle); + assertEquals("value1", bundle.getString("key1")); + + ResourceBundle bundle2 = request.getResourceBundle("base2", Locale.US); + assertNotNull(bundle2); + assertFalse(bundle2.getKeys().hasMoreElements()); + } }