You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ju...@apache.org on 2011/05/06 20:00:31 UTC

svn commit: r1100304 - in /sling/trunk/bundles/engine: ./ src/main/java/org/apache/sling/engine/impl/helper/ src/test/java/org/apache/sling/engine/impl/helper/

Author: justin
Date: Fri May  6 18:00:30 2011
New Revision: 1100304

URL: http://svn.apache.org/viewvc?rev=1100304&view=rev
Log:
SLING-2073 - creating unit test and fixing bug (exposed by unit test)

Added:
    sling/trunk/bundles/engine/src/test/java/org/apache/sling/engine/impl/helper/
    sling/trunk/bundles/engine/src/test/java/org/apache/sling/engine/impl/helper/ExternalServletContextWrapperTest.java
Modified:
    sling/trunk/bundles/engine/pom.xml
    sling/trunk/bundles/engine/src/main/java/org/apache/sling/engine/impl/helper/ExternalServletContextWrapper.java

Modified: sling/trunk/bundles/engine/pom.xml
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/engine/pom.xml?rev=1100304&r1=1100303&r2=1100304&view=diff
==============================================================================
--- sling/trunk/bundles/engine/pom.xml (original)
+++ sling/trunk/bundles/engine/pom.xml Fri May  6 18:00:30 2011
@@ -157,6 +157,11 @@
             <artifactId>junit</artifactId>
         </dependency>
         <dependency>
+            <groupId>org.jmock</groupId>
+            <artifactId>jmock-junit4</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
             <groupId>org.apache.felix</groupId>
             <artifactId>org.apache.felix.scr.annotations</artifactId>
         </dependency>

Modified: sling/trunk/bundles/engine/src/main/java/org/apache/sling/engine/impl/helper/ExternalServletContextWrapper.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/engine/src/main/java/org/apache/sling/engine/impl/helper/ExternalServletContextWrapper.java?rev=1100304&r1=1100303&r2=1100304&view=diff
==============================================================================
--- sling/trunk/bundles/engine/src/main/java/org/apache/sling/engine/impl/helper/ExternalServletContextWrapper.java (original)
+++ sling/trunk/bundles/engine/src/main/java/org/apache/sling/engine/impl/helper/ExternalServletContextWrapper.java Fri May  6 18:00:30 2011
@@ -143,7 +143,7 @@ class ExternalServletContextWrapper impl
         return delegate.getServletContextName();
     }
 
-    class RequestDispatcherWrapper implements RequestDispatcher {
+    static class RequestDispatcherWrapper implements RequestDispatcher {
 
         private final RequestDispatcher delegate;
 
@@ -161,7 +161,11 @@ class ExternalServletContextWrapper impl
             delegate.include(unwrapServletRequest(request), unwrapServletResponse(response));
         }
 
-        private ServletRequest unwrapServletRequest(ServletRequest request) {
+        RequestDispatcher getDelegate() {
+            return delegate;
+        }
+
+        static ServletRequest unwrapServletRequest(ServletRequest request) {
             ServletRequest lastRequest = request;
             while (request != null) {
                 if (request instanceof SlingHttpServletRequestImpl) {
@@ -176,12 +180,12 @@ class ExternalServletContextWrapper impl
             return lastRequest;
         }
 
-        private ServletResponse unwrapServletResponse(ServletResponse response) {
+        static ServletResponse unwrapServletResponse(ServletResponse response) {
             ServletResponse lastResponse = response;
             while (response != null) {
-                if (response instanceof SlingHttpServletRequestImpl) {
+                if (response instanceof SlingHttpServletResponseImpl) {
                     return ((SlingHttpServletResponseImpl) response).getResponse();
-                } else if (response instanceof ServletRequestWrapper) {
+                } else if (response instanceof ServletResponseWrapper) {
                     lastResponse = response;
                     response = ((ServletResponseWrapper) response).getResponse();
                 } else {

Added: sling/trunk/bundles/engine/src/test/java/org/apache/sling/engine/impl/helper/ExternalServletContextWrapperTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/engine/src/test/java/org/apache/sling/engine/impl/helper/ExternalServletContextWrapperTest.java?rev=1100304&view=auto
==============================================================================
--- sling/trunk/bundles/engine/src/test/java/org/apache/sling/engine/impl/helper/ExternalServletContextWrapperTest.java (added)
+++ sling/trunk/bundles/engine/src/test/java/org/apache/sling/engine/impl/helper/ExternalServletContextWrapperTest.java Fri May  6 18:00:30 2011
@@ -0,0 +1,230 @@
+/*
+ * 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.engine.impl.helper;
+
+import static org.junit.Assert.*;
+
+import javax.servlet.RequestDispatcher;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletRequestWrapper;
+import javax.servlet.ServletResponse;
+import javax.servlet.ServletResponseWrapper;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletRequestWrapper;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpServletResponseWrapper;
+
+import org.apache.sling.engine.impl.SlingHttpServletRequestImpl;
+import org.apache.sling.engine.impl.SlingHttpServletResponseImpl;
+import org.apache.sling.engine.impl.helper.ExternalServletContextWrapper.RequestDispatcherWrapper;
+import org.jmock.Expectations;
+import org.jmock.Mockery;
+import org.jmock.integration.junit4.JMock;
+import org.jmock.integration.junit4.JUnit4Mockery;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith(JMock.class)
+public class ExternalServletContextWrapperTest {
+    Mockery context = new JUnit4Mockery();
+    
+    /**
+     * Tests that the RequestDispatcher is wrapped.
+     */
+    @Test
+    public void testGetRequestDispatcher() {
+        final RequestDispatcher rd = context.mock(RequestDispatcher.class);
+        final ServletContext ctx = context.mock(ServletContext.class);
+        context.checking(new Expectations() {{
+            oneOf(ctx).getRequestDispatcher("foo.jsp");
+            will(returnValue(rd));
+            
+        }});
+        
+        ExternalServletContextWrapper wrapper = new ExternalServletContextWrapper(ctx);
+        RequestDispatcher dispatcher = wrapper.getRequestDispatcher("foo.jsp");
+        
+        assertTrue(dispatcher instanceof RequestDispatcherWrapper);
+        assertEquals(rd, ((RequestDispatcherWrapper)dispatcher).getDelegate());
+    }
+    
+    /**
+     * Unwrapping a non-wrapper request should return the request itself.
+     */
+    @Test
+    public void testUnwrappingRegularRequest() {
+        final ServletRequest req = context.mock(ServletRequest.class);
+        
+        ServletRequest unwrapped = ExternalServletContextWrapper.
+            RequestDispatcherWrapper.unwrapServletRequest(req);
+        
+        assertEquals(req, unwrapped);
+    }
+    
+    /**
+     * Unwrapping a wrapper request should return in the request.
+     */
+    @Test
+    public void testUnwrappingWrappedRequest() {
+        final ServletRequest req = context.mock(ServletRequest.class);
+        final ServletRequestWrapper wrapper = new ServletRequestWrapper(req);
+        
+        ServletRequest unwrapped = ExternalServletContextWrapper.
+            RequestDispatcherWrapper.unwrapServletRequest(wrapper);
+        
+        assertEquals(req, unwrapped);
+    }
+    
+    @Test
+    public void testUnwrappingDoubleWrappedRequest() {
+        final ServletRequest req = context.mock(ServletRequest.class);
+        final ServletRequestWrapper wrapper = new ServletRequestWrapper(req);
+        final ServletRequestWrapper wrapper2 = new ServletRequestWrapper(wrapper);
+        
+        ServletRequest unwrapped = ExternalServletContextWrapper.
+            RequestDispatcherWrapper.unwrapServletRequest(wrapper2);
+        
+        assertEquals(req, unwrapped);
+    }
+
+    /**
+     * Unwrapping a sling request should return the first-level request wrapped
+     * by the sling request.
+     */
+    @Test
+    public void testUnwrappingSlingRequest() {
+        final HttpServletRequest req = context.mock(HttpServletRequest.class);
+        
+        context.checking(new Expectations(){{
+            allowing(req).getServletPath();
+            will(returnValue("/"));
+            allowing(req).getPathInfo();
+            will(returnValue("/test"));
+        }});
+        
+        final HttpServletRequestWrapper wrapper = new HttpServletRequestWrapper(req);
+        final HttpServletRequestWrapper wrapper2 = new HttpServletRequestWrapper(wrapper);
+        final SlingHttpServletRequestImpl slingRequest = new SlingHttpServletRequestImpl(null, wrapper2);
+        
+        ServletRequest unwrapped = ExternalServletContextWrapper.
+            RequestDispatcherWrapper.unwrapServletRequest(slingRequest);
+        
+        assertEquals(wrapper2, unwrapped);
+    }
+
+    /**
+     * Unwrapping a wrapped sling request should return the first-level request
+     * wrapped by the sling request.
+     */
+    @Test
+    public void testUnwrappingWrappedSlingRequest() {
+        final HttpServletRequest req = context.mock(HttpServletRequest.class);
+        
+        context.checking(new Expectations(){{
+            allowing(req).getServletPath();
+            will(returnValue("/"));
+            allowing(req).getPathInfo();
+            will(returnValue("/test"));
+        }});
+        
+        final HttpServletRequestWrapper wrapper = new HttpServletRequestWrapper(req);
+        final HttpServletRequestWrapper wrapper2 = new HttpServletRequestWrapper(wrapper);
+        final SlingHttpServletRequestImpl slingRequest = new SlingHttpServletRequestImpl(null, wrapper2);
+        final HttpServletRequestWrapper slingWrapper = new HttpServletRequestWrapper(slingRequest);
+        
+        ServletRequest unwrapped = ExternalServletContextWrapper.
+            RequestDispatcherWrapper.unwrapServletRequest(slingWrapper);
+        
+        assertEquals(wrapper2, unwrapped);
+    }
+    
+    /**
+     * Unwrapping a non-wrapper response should return the response itself.
+     */
+    @Test
+    public void testUnwrappingRegularResponse() {
+        final ServletResponse req = context.mock(ServletResponse.class);
+        
+        ServletResponse unwrapped = ExternalServletContextWrapper.
+            RequestDispatcherWrapper.unwrapServletResponse(req);
+        
+        assertEquals(req, unwrapped);
+    }
+    
+    /**
+     * Unwrapping a wrapper response should return in the response.
+     */
+    @Test
+    public void testUnwrappingWrappedResponse() {
+        final ServletResponse resp = context.mock(ServletResponse.class);
+        final ServletResponseWrapper wrapper = new ServletResponseWrapper(resp);
+        
+        ServletResponse unwrapped = ExternalServletContextWrapper.
+            RequestDispatcherWrapper.unwrapServletResponse(wrapper);
+        
+        assertEquals(resp, unwrapped);
+    }
+    
+    @Test
+    public void testUnwrappingDoubleWrappedResponse() {
+        final ServletResponse resp = context.mock(ServletResponse.class);
+        final ServletResponseWrapper wrapper = new ServletResponseWrapper(resp);
+        final ServletResponseWrapper wrapper2 = new ServletResponseWrapper(wrapper);
+        
+        ServletResponse unwrapped = ExternalServletContextWrapper.
+            RequestDispatcherWrapper.unwrapServletResponse(wrapper2);
+        
+        assertEquals(resp, unwrapped);
+    }
+
+    /**
+     * Unwrapping a sling response should return the first-level response wrapped
+     * by the sling response.
+     */
+    @Test
+    public void testUnwrappingSlingResponse() {
+        final HttpServletResponse resp = context.mock(HttpServletResponse.class);
+        final HttpServletResponseWrapper wrapper = new HttpServletResponseWrapper(resp);
+        final HttpServletResponseWrapper wrapper2 = new HttpServletResponseWrapper(wrapper);
+        final SlingHttpServletResponseImpl slingResponse = new SlingHttpServletResponseImpl(null, wrapper2);
+        
+        ServletResponse unwrapped = ExternalServletContextWrapper.
+            RequestDispatcherWrapper.unwrapServletResponse(slingResponse);
+        
+        assertEquals(wrapper2, unwrapped);
+    }
+
+    /**
+     * Unwrapping a wrapped sling response should return the first-level response
+     * wrapped by the sling response.
+     */
+    @Test
+    public void testUnwrappingWrappedSlingResponse() {
+        final HttpServletResponse resp = context.mock(HttpServletResponse.class);
+        final HttpServletResponseWrapper wrapper = new HttpServletResponseWrapper(resp);
+        final HttpServletResponseWrapper wrapper2 = new HttpServletResponseWrapper(wrapper);
+        final SlingHttpServletResponseImpl slingResponse = new SlingHttpServletResponseImpl(null, wrapper2);
+        final HttpServletResponseWrapper slingWrapper = new HttpServletResponseWrapper(slingResponse);
+        
+        ServletResponse unwrapped = ExternalServletContextWrapper.
+            RequestDispatcherWrapper.unwrapServletResponse(slingWrapper);
+        
+        assertEquals(wrapper2, unwrapped);
+    }
+
+}