Author: jcompagner
Date: Sun Nov  4 06:50:53 2007
New Revision: 591787

URL: http://svn.apache.org/viewvc?rev=591787&view=rev
Log:
fixes in the mock test stuff when a BufferedWebResponse is used and there is a 
redirect that is relative (starts with ../)

Modified:
    
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/MockHttpServletResponse.java
    
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/MockWebApplication.java
    
wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/html/form/login/InterceptTest.java
    
wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/protocol/http/WebResponseTest.java

Modified: 
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/MockHttpServletResponse.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/MockHttpServletResponse.java?rev=591787&r1=591786&r2=591787&view=diff
==============================================================================
--- 
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/MockHttpServletResponse.java
 (original)
+++ 
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/MockHttpServletResponse.java
 Sun Nov  4 06:50:53 2007
@@ -35,7 +35,6 @@
 import javax.servlet.http.Cookie;
 import javax.servlet.http.HttpServletResponse;
 
-import org.apache.wicket.RequestCycle;
 import org.apache.wicket.util.value.ValueMap;
 
 
@@ -79,11 +78,16 @@
 
        private StringWriter stringWriter;
 
+       private final MockHttpServletRequest servletRequest;
+
        /**
         * Create the response object.
+        * 
+        * @param servletRequest
         */
-       public MockHttpServletResponse()
+       public MockHttpServletResponse(MockHttpServletRequest servletRequest)
        {
+               this.servletRequest = servletRequest;
                initialize();
        }
 
@@ -517,6 +521,46 @@
        }
 
        /**
+        * @see org.apache.wicket.Request#getURL()
+        */
+       private String getURL()
+       {
+               /*
+                * Servlet 2.3 specification :
+                * 
+                * Servlet Path: The path section that directly corresponds to 
the mapping which activated
+                * this request. This path starts with a "/" character except 
in the case where the request
+                * is matched with the "/*" pattern, in which case it is the 
empty string.
+                * 
+                * PathInfo: The part of the request path that is not part of 
the Context Path or the
+                * Servlet Path. It is either null if there is no extra path, 
or is a string with a leading
+                * "/".
+                */
+               String url = servletRequest.getServletPath();
+               final String pathInfo = servletRequest.getPathInfo();
+
+               if (pathInfo != null)
+               {
+                       url += pathInfo;
+               }
+
+               final String queryString = servletRequest.getQueryString();
+
+               if (queryString != null)
+               {
+                       url += ("?" + queryString);
+               }
+
+               // If url is non-empty it will start with '/', which we should 
lose
+               if (url.length() > 0 && url.charAt(0) == '/')
+               {
+                       // Remove leading '/'
+                       url = url.substring(1);
+               }
+               return url;
+       }
+
+       /**
         * Indicate sending of a redirectLocation to a particular named 
resource. This implementation
         * just keeps hold of the redirectLocation info and makes it available 
for query.
         * 
@@ -531,7 +575,7 @@
                if (location.startsWith("../"))
                {
                        // Test if the current url has a / in it. (a mount)
-                       String url = RequestCycle.get().getRequest().getURL();
+                       String url = getURL();
                        int index = url.lastIndexOf("/");
                        if (index != -1)
                        {

Modified: 
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/MockWebApplication.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/MockWebApplication.java?rev=591787&r1=591786&r2=591787&view=diff
==============================================================================
--- 
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/MockWebApplication.java
 (original)
+++ 
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/MockWebApplication.java
 Sun Nov  4 06:50:53 2007
@@ -185,7 +185,7 @@
                // Construct mock session, request and response
                servletSession = new MockHttpSession(context);
                servletRequest = new MockHttpServletRequest(this.application, 
servletSession, context);
-               servletResponse = new MockHttpServletResponse();
+               servletResponse = new MockHttpServletResponse(servletRequest);
 
                // Construct request and response using factories
                wicketRequest = this.application.newWebRequest(servletRequest);
@@ -195,7 +195,7 @@
                createRequestCycle();
 
                this.application.getRequestCycleSettings().setRenderStrategy(
-                               IRequestCycleSettings.ONE_PASS_RENDER);
+                       IRequestCycleSettings.ONE_PASS_RENDER);
                this.application.getResourceSettings().setResourceFinder(new 
WebApplicationPath(context));
                
this.application.getPageSettings().setAutomaticMultiWindowSupport(false);
 
@@ -380,6 +380,7 @@
                try
                {
                        cycle.request();
+                       createRequestCycle();
                }
                finally
                {
@@ -400,15 +401,15 @@
                {
                        // handle redirects which are usually managed by the 
browser
                        // transparently
-                       final MockHttpServletResponse httpResponse = 
(MockHttpServletResponse)cycle
-                                       
.getWebResponse().getHttpServletResponse();
+                       final MockHttpServletResponse httpResponse = 
(MockHttpServletResponse)cycle.getWebResponse()
+                               .getHttpServletResponse();
 
                        if (httpResponse.isRedirect())
                        {
                                lastRenderedPage = 
generateLastRenderedPage(cycle);
 
                                MockHttpServletRequest newHttpRequest = new 
MockHttpServletRequest(application,
-                                               servletSession, 
application.getServletContext());
+                                       servletSession, 
application.getServletContext());
                                
newHttpRequest.setRequestToRedirectString(httpResponse.getRedirectLocation());
                                wicketRequest = 
application.newWebRequest(newHttpRequest);
 
@@ -454,13 +455,15 @@
                                        PageParameters parameters = 
pageClassRequestTarget.getPageParameters();
                                        if (parameters == null || 
parameters.size() == 0)
                                        {
-                                               newLastRenderedPage = 
application.getSessionSettings().getPageFactory()
-                                                               
.newPage(pageClass);
+                                               newLastRenderedPage = 
application.getSessionSettings()
+                                                       .getPageFactory()
+                                                       .newPage(pageClass);
                                        }
                                        else
                                        {
-                                               newLastRenderedPage = 
application.getSessionSettings().getPageFactory()
-                                                               
.newPage(pageClass, parameters);
+                                               newLastRenderedPage = 
application.getSessionSettings()
+                                                       .getPageFactory()
+                                                       .newPage(pageClass, 
parameters);
                                        }
                                }
                        }
@@ -484,7 +487,7 @@
                // Create a web request cycle using factory
 
                final WebRequestCycle cycle = 
(WebRequestCycle)application.newRequestCycle(wicketRequest,
-                               wicketResponse);
+                       wicketResponse);
 
                // Construct session
                wicketSession = (WebSession)Session.findOrCreate();

Modified: 
wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/html/form/login/InterceptTest.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/html/form/login/InterceptTest.java?rev=591787&r1=591786&r2=591787&view=diff
==============================================================================
--- 
wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/html/form/login/InterceptTest.java
 (original)
+++ 
wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/markup/html/form/login/InterceptTest.java
 Sun Nov  4 06:50:53 2007
@@ -27,6 +27,7 @@
 import org.apache.wicket.Session;
 import org.apache.wicket.authorization.Action;
 import org.apache.wicket.authorization.IAuthorizationStrategy;
+import org.apache.wicket.protocol.http.BufferedWebResponse;
 import org.apache.wicket.protocol.http.HttpSessionStore;
 import org.apache.wicket.protocol.http.WebApplication;
 import org.apache.wicket.protocol.http.WebRequestCycle;
@@ -34,6 +35,7 @@
 import org.apache.wicket.protocol.http.WebSession;
 import org.apache.wicket.session.ISessionStore;
 import org.apache.wicket.util.string.Strings;
+import org.apache.wicket.util.tester.FormTester;
 import org.apache.wicket.util.tester.WicketTester;
 
 
@@ -74,26 +76,51 @@
        /**
         * 
         */
+       public void testFormSubmit()
+       {
+               application = new WicketTester(new MyMockWebApplication()
+               {
+                       protected WebResponse 
newWebResponse(HttpServletResponse response)
+                       {
+                               return new BufferedWebResponse(response);
+                       }
+               });
+               // same as above but uses different technique to login
+               application.setupRequestAndResponse();
+               application.processRequestCycle();
+               MockLoginPage loginPage = 
(MockLoginPage)application.getLastRenderedPage();
+               
assertEquals(((MyMockWebApplication)application.getApplication()).getLoginPage(),
+                       loginPage.getClass());
+               FormTester form = application.newFormTester("form");
+               form.setValue("username", "admin");
+               form.submit();
+               assertEquals(application.getApplication().getHomePage(), 
application.getLastRenderedPage()
+                       .getClass());
+       }
+
+       /**
+        * 
+        */
        public void testClickLink()
        {
                application.setupRequestAndResponse();
                application.processRequestCycle();
                MockLoginPage loginPage = 
(MockLoginPage)application.getLastRenderedPage();
-               
assertEquals(((MyMockWebApplication)application.getApplication()).getLoginPage(),
 loginPage
-                               .getClass());
+               
assertEquals(((MyMockWebApplication)application.getApplication()).getLoginPage(),
+                       loginPage.getClass());
 
                application.setupRequestAndResponse();
                
application.getServletRequest().setRequestToComponent(loginPage.getForm());
                
application.getServletRequest().setParameter(loginPage.getTextField().getInputName(),
-                               "admin");
+                       "admin");
                application.processRequestCycle();
 
                assertEquals(application.getApplication().getHomePage(), 
application.getLastRenderedPage()
-                               .getClass());
+                       .getClass());
 
                application.setupRequestAndResponse();
                application.getServletRequest().setRequestToComponent(
-                               application.getLastRenderedPage().get("link"));
+                       application.getLastRenderedPage().get("link"));
                application.processRequestCycle();
                assertEquals(PageA.class, 
application.getLastRenderedPage().getClass());
        }
@@ -107,8 +134,8 @@
                application.setupRequestAndResponse();
                application.processRequestCycle();
                MockLoginPage loginPage = 
(MockLoginPage)application.getLastRenderedPage();
-               
assertEquals(((MyMockWebApplication)application.getApplication()).getLoginPage(),
 loginPage
-                               .getClass());
+               
assertEquals(((MyMockWebApplication)application.getApplication()).getLoginPage(),
+                       loginPage.getClass());
 
                // bypass form completely to login but continue to intercept 
page
                application.setupRequestAndResponse();
@@ -117,11 +144,11 @@
                application.processRequestCycle(requestCycle);
 
                assertEquals(application.getApplication().getHomePage(), 
application.getLastRenderedPage()
-                               .getClass());
+                       .getClass());
 
                application.setupRequestAndResponse();
                application.getServletRequest().setRequestToComponent(
-                               application.getLastRenderedPage().get("link"));
+                       application.getLastRenderedPage().get("link"));
                application.processRequestCycle();
                assertEquals(PageA.class, 
application.getLastRenderedPage().getClass());
        }
@@ -228,7 +255,7 @@
                public boolean isInstantiationAuthorized(Class componentClass)
                {
                        if (MockHomePage.class.equals(componentClass) &&
-                                       
!((MySession)Session.get()).isLoggedIn())
+                               !((MySession)Session.get()).isLoggedIn())
                        {
                                throw new 
RestartResponseAtInterceptPageException(MockLoginPage.class);
                        }

Modified: 
wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/protocol/http/WebResponseTest.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/protocol/http/WebResponseTest.java?rev=591787&r1=591786&r2=591787&view=diff
==============================================================================
--- 
wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/protocol/http/WebResponseTest.java
 (original)
+++ 
wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/protocol/http/WebResponseTest.java
 Sun Nov  4 06:50:53 2007
@@ -16,11 +16,11 @@
  */
 package org.apache.wicket.protocol.http;
 
+import junit.framework.TestCase;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import junit.framework.TestCase;
-
 /**
  * 
  * 
@@ -35,7 +35,7 @@
         */
        public void testRedirect_normal()
        {
-               MockHttpServletResponse mockResponse = new 
MockHttpServletResponse();
+               MockHttpServletResponse mockResponse = new 
MockHttpServletResponse(null);
 
                WebResponse webResponse = new WebResponse(mockResponse);
 
@@ -50,7 +50,7 @@
         */
        public void testRedirect_ajax()
        {
-               MockHttpServletResponse mockResponse = new 
MockHttpServletResponse();
+               MockHttpServletResponse mockResponse = new 
MockHttpServletResponse(null);
 
                WebResponse webResponse = new WebResponse(mockResponse);
                webResponse.setAjax(true);


Reply via email to