This is an automated email from the ASF dual-hosted git repository. rombert pushed a commit to annotated tag org.apache.sling.testing.sling-mock-1.1.0 in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-testing-sling-mock.git
commit 9442dd81f20d5585f49408f0786c1a8aabfdb737 Author: Stefan Seifert <[email protected]> AuthorDate: Tue Oct 21 20:09:55 2014 +0000 SLING-4086 SlingHttpServlerRequest should support getResourceBundle() methods git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/testing/mocks/sling-mock@1633444 13f79535-47bb-0310-9956-ffa450edef68 --- pom.xml | 8 +++- .../mock/sling/context/SlingContextImpl.java | 2 +- .../sling/servlet/MockSlingHttpServletRequest.java | 56 +++++++++++++++++----- .../servlet/MockSlingHttpServletRequestTest.java | 39 ++++++++++++++- 4 files changed, 90 insertions(+), 15 deletions(-) diff --git a/pom.xml b/pom.xml index e50cd17..faea81d 100644 --- a/pom.xml +++ b/pom.xml @@ -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> diff --git a/src/main/java/org/apache/sling/testing/mock/sling/context/SlingContextImpl.java b/src/main/java/org/apache/sling/testing/mock/sling/context/SlingContextImpl.java index 907f804..65076aa 100644 --- a/src/main/java/org/apache/sling/testing/mock/sling/context/SlingContextImpl.java +++ b/src/main/java/org/apache/sling/testing/mock/sling/context/SlingContextImpl.java @@ -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(); diff --git a/src/main/java/org/apache/sling/testing/mock/sling/servlet/MockSlingHttpServletRequest.java b/src/main/java/org/apache/sling/testing/mock/sling/servlet/MockSlingHttpServletRequest.java index 4444945..eaad0bf 100644 --- a/src/main/java/org/apache/sling/testing/mock/sling/servlet/MockSlingHttpServletRequest.java +++ b/src/main/java/org/apache/sling/testing/mock/sling/servlet/MockSlingHttpServletRequest.java @@ -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.RequestProgressTracker; 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 extends SlingAdaptable implements Sling 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 extends SlingAdaptable implements Sling 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 extends SlingAdaptable implements Sling } @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(); } diff --git a/src/test/java/org/apache/sling/testing/mock/sling/servlet/MockSlingHttpServletRequestTest.java b/src/test/java/org/apache/sling/testing/mock/sling/servlet/MockSlingHttpServletRequestTest.java index 7539d09..8c868b7 100644 --- a/src/test/java/org/apache/sling/testing/mock/sling/servlet/MockSlingHttpServletRequestTest.java +++ b/src/test/java/org/apache/sling/testing/mock/sling/servlet/MockSlingHttpServletRequestTest.java @@ -25,14 +25,18 @@ import static org.junit.Assert.assertNotNull; 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.CharEncoding; 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 MockSlingHttpServletRequestTest { 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 MockSlingHttpServletRequestTest { 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()); + } } -- To stop receiving notification emails like this one, please contact "[email protected]" <[email protected]>.
