This is an automated email from the ASF dual-hosted git repository.

sseifert pushed a commit to branch master
in repository 
https://gitbox.apache.org/repos/asf/sling-org-apache-sling-servlet-helpers.git


The following commit(s) were added to refs/heads/master by this push:
     new 172e867  SLING-8804 Mock SlingHttpServletRequest should follow same 
caching as SlingHttpServletRequest
172e867 is described below

commit 172e86751cee2170b21fed2110602ec36657c8d7
Author: sseifert <[email protected]>
AuthorDate: Mon Oct 28 17:37:59 2019 +0100

    SLING-8804 Mock SlingHttpServletRequest should follow same caching as 
SlingHttpServletRequest
---
 .../apache/sling/servlethelpers/AdaptableUtil.java | 51 ++++++++++++++++++++++
 .../MockSlingHttpServletRequest.java               |  5 +++
 .../MockSlingHttpServletResponse.java              |  7 ++-
 .../apache/sling/servlethelpers/package-info.java  |  2 +-
 .../MockSlingHttpServletRequestTest.java           | 35 ++++++++++++++-
 .../MockSlingHttpServletResponseTest.java          | 38 ++++++++++++++++
 6 files changed, 134 insertions(+), 4 deletions(-)

diff --git a/src/main/java/org/apache/sling/servlethelpers/AdaptableUtil.java 
b/src/main/java/org/apache/sling/servlethelpers/AdaptableUtil.java
new file mode 100644
index 0000000..f7718cf
--- /dev/null
+++ b/src/main/java/org/apache/sling/servlethelpers/AdaptableUtil.java
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.sling.servlethelpers;
+
+import java.lang.reflect.Field;
+
+import org.apache.sling.api.adapter.AdapterManager;
+import org.apache.sling.api.adapter.SlingAdaptable;
+
+final class AdaptableUtil {
+
+    public static <AdapterType> AdapterType adaptToWithoutCaching(Object 
adaptable, Class<AdapterType> type) {
+        AdapterManager adapterManager = getAdapterManager();
+        if (adapterManager == null) {
+            return null;
+        }
+        return adapterManager.getAdapter(adaptable, type);
+    }
+
+    /**
+     * Get adapter manager via reflection.
+     * @return Adapter manager instance
+     */
+    private static AdapterManager getAdapterManager() {
+        try {
+            Field adapterManagerStaticField = 
SlingAdaptable.class.getDeclaredField("ADAPTER_MANAGER");
+            adapterManagerStaticField.setAccessible(true);
+            return (AdapterManager)adapterManagerStaticField.get(null);
+        }
+        catch (NoSuchFieldException | IllegalArgumentException | 
IllegalAccessException ex) {
+            throw new RuntimeException("Unable to get AdapterManager instance 
from SlingAdaptable via reflection.", ex);
+        }
+    }
+
+}
diff --git 
a/src/main/java/org/apache/sling/servlethelpers/MockSlingHttpServletRequest.java
 
b/src/main/java/org/apache/sling/servlethelpers/MockSlingHttpServletRequest.java
index ffdb997..74d65e5 100644
--- 
a/src/main/java/org/apache/sling/servlethelpers/MockSlingHttpServletRequest.java
+++ 
b/src/main/java/org/apache/sling/servlethelpers/MockSlingHttpServletRequest.java
@@ -815,6 +815,11 @@ public class MockSlingHttpServletRequest extends 
SlingAdaptable implements Sling
         this.authType = authType;
     }
 
+    @Override
+    public <AdapterType> AdapterType adaptTo(Class<AdapterType> type) {
+        return AdaptableUtil.adaptToWithoutCaching(this, type);
+    }
+
     // --- unsupported operations ---
 
     @Override
diff --git 
a/src/main/java/org/apache/sling/servlethelpers/MockSlingHttpServletResponse.java
 
b/src/main/java/org/apache/sling/servlethelpers/MockSlingHttpServletResponse.java
index 9bba6f9..2f6d9f7 100644
--- 
a/src/main/java/org/apache/sling/servlethelpers/MockSlingHttpServletResponse.java
+++ 
b/src/main/java/org/apache/sling/servlethelpers/MockSlingHttpServletResponse.java
@@ -278,7 +278,12 @@ public class MockSlingHttpServletResponse extends 
SlingAdaptable implements Slin
     public String geStatusMessage() {
         return this.getStatusMessage();
     }
-    
+
+    @Override
+    public <AdapterType> AdapterType adaptTo(Class<AdapterType> type) {
+        return AdaptableUtil.adaptToWithoutCaching(this, type);
+    }
+
     // --- unsupported operations ---
     @Override
     public String encodeRedirectUrl(String url) {
diff --git a/src/main/java/org/apache/sling/servlethelpers/package-info.java 
b/src/main/java/org/apache/sling/servlethelpers/package-info.java
index 8941ca5..2bbf9ae 100644
--- a/src/main/java/org/apache/sling/servlethelpers/package-info.java
+++ b/src/main/java/org/apache/sling/servlethelpers/package-info.java
@@ -19,5 +19,5 @@
 /**
  * Mock implementation of selected Servlet-related Sling APIs.
  */
[email protected]("1.6")
[email protected]("1.7")
 package org.apache.sling.servlethelpers;
diff --git 
a/src/test/java/org/apache/sling/servlethelpers/MockSlingHttpServletRequestTest.java
 
b/src/test/java/org/apache/sling/servlethelpers/MockSlingHttpServletRequestTest.java
index 843abd6..70ed9a3 100644
--- 
a/src/test/java/org/apache/sling/servlethelpers/MockSlingHttpServletRequestTest.java
+++ 
b/src/test/java/org/apache/sling/servlethelpers/MockSlingHttpServletRequestTest.java
@@ -21,6 +21,7 @@ package org.apache.sling.servlethelpers;
 import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertSame;
@@ -39,6 +40,7 @@ import java.util.LinkedHashMap;
 import java.util.Locale;
 import java.util.Map;
 import java.util.ResourceBundle;
+import java.util.UUID;
 
 import javax.servlet.RequestDispatcher;
 import javax.servlet.http.Cookie;
@@ -46,16 +48,21 @@ import javax.servlet.http.HttpSession;
 
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang3.CharEncoding;
+import org.apache.sling.api.adapter.AdapterManager;
+import org.apache.sling.api.adapter.SlingAdaptable;
 import org.apache.sling.api.request.RequestDispatcherOptions;
 import org.apache.sling.api.request.RequestParameter;
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.api.servlets.HttpConstants;
+import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
+import org.mockito.invocation.InvocationOnMock;
 import org.mockito.junit.MockitoJUnitRunner;
+import org.mockito.stubbing.Answer;
 
 @RunWith(MockitoJUnitRunner.class)
 public class MockSlingHttpServletRequestTest {
@@ -64,14 +71,22 @@ public class MockSlingHttpServletRequestTest {
     private ResourceResolver resourceResolver;
     @Mock
     private Resource resource;
+    @Mock
+    private AdapterManager adapterManager;
 
     private MockSlingHttpServletRequest request;
 
     @Before
     public void setUp() throws Exception {
         request = new MockSlingHttpServletRequest(resourceResolver);
+        SlingAdaptable.setAdapterManager(adapterManager);
     }
-    
+
+    @After
+    public void tearDown() throws Exception {
+        SlingAdaptable.unsetAdapterManager(adapterManager);
+    }
+
     @Test
     public void testResourceResolver() {
         assertSame(resourceResolver, request.getResourceResolver());
@@ -504,5 +519,21 @@ public class MockSlingHttpServletRequestTest {
         assertSame(resource, request.getRequestPathInfo().getSuffixResource());
     }
 
-    
+    @Test
+    public void testAdaptTo() {
+        when(adapterManager.getAdapter(request, String.class)).thenAnswer(new 
Answer<String>() {
+            @Override
+            public String answer(InvocationOnMock invocation) throws Throwable 
{
+                return UUID.randomUUID().toString();
+            }
+        });
+
+        // make sure adaptTo results are not cached; each invocation should 
produce a different result
+        String result1 = request.adaptTo(String.class);
+        assertNotNull(result1);
+
+        String result2 = request.adaptTo(String.class);
+        assertNotEquals(result1,  result2);
+    }
+
 }
diff --git 
a/src/test/java/org/apache/sling/servlethelpers/MockSlingHttpServletResponseTest.java
 
b/src/test/java/org/apache/sling/servlethelpers/MockSlingHttpServletResponseTest.java
index 51c8df7..1800b22 100644
--- 
a/src/test/java/org/apache/sling/servlethelpers/MockSlingHttpServletResponseTest.java
+++ 
b/src/test/java/org/apache/sling/servlethelpers/MockSlingHttpServletResponseTest.java
@@ -21,28 +21,49 @@ package org.apache.sling.servlethelpers;
 import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.when;
 
 import java.util.Collection;
 import java.util.Iterator;
 import java.util.Locale;
+import java.util.UUID;
 
 import javax.servlet.http.Cookie;
 import javax.servlet.http.HttpServletResponse;
 
 import org.apache.commons.lang3.CharEncoding;
+import org.apache.sling.api.adapter.AdapterManager;
+import org.apache.sling.api.adapter.SlingAdaptable;
+import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.invocation.InvocationOnMock;
+import org.mockito.junit.MockitoJUnitRunner;
+import org.mockito.stubbing.Answer;
 
+@RunWith(MockitoJUnitRunner.class)
 public class MockSlingHttpServletResponseTest {
 
     private MockSlingHttpServletResponse response;
 
+    @Mock
+    private AdapterManager adapterManager;
+
     @Before
     public void setUp() throws Exception {
         this.response = new MockSlingHttpServletResponse();
+        SlingAdaptable.setAdapterManager(adapterManager);
+    }
+
+    @After
+    public void tearDown() throws Exception {
+        SlingAdaptable.unsetAdapterManager(adapterManager);
     }
 
     @Test
@@ -200,4 +221,21 @@ public class MockSlingHttpServletResponseTest {
         assertEquals(Locale.GERMAN, response.getLocale());
     }
 
+    @Test
+    public void testAdaptTo() {
+        when(adapterManager.getAdapter(response, String.class)).thenAnswer(new 
Answer<String>() {
+            @Override
+            public String answer(InvocationOnMock invocation) throws Throwable 
{
+                return UUID.randomUUID().toString();
+            }
+        });
+
+        // make sure adaptTo results are not cached; each invocation should 
produce a different result
+        String result1 = response.adaptTo(String.class);
+        assertNotNull(result1);
+
+        String result2 = response.adaptTo(String.class);
+        assertNotEquals(result1,  result2);
+    }
+
 }

Reply via email to