Author: marrink
Date: Mon Mar 24 08:04:57 2008
New Revision: 640436

URL: http://svn.apache.org/viewvc?rev=640436&view=rev
Log:
RESOLVED - issue WICKET-1410: WicketTester and temporary sessions 
https://issues.apache.org/jira/browse/WICKET-1410

Added:
    
wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/stateless/TemporarySessionTest.java
   (with props)
Modified:
    
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/MockHttpServletRequest.java
    
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/MockHttpSession.java
    
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/MockWebApplication.java

Modified: 
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/MockHttpServletRequest.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/MockHttpServletRequest.java?rev=640436&r1=640435&r2=640436&view=diff
==============================================================================
--- 
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/MockHttpServletRequest.java
 (original)
+++ 
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/MockHttpServletRequest.java
 Mon Mar 24 08:04:57 2008
@@ -183,7 +183,8 @@
        private boolean useMultiPartContentType;
 
        /**
-        * Create the request using the supplied session object.
+        * Create the request using the supplied session object. Note that in 
order for temporary
+        * sessions to work, the supplied session must be an instance of [EMAIL 
PROTECTED] MockHttpSession}
         * 
         * @param application
         *            The application that this request is for
@@ -193,7 +194,7 @@
         *            The current servlet context
         */
        public MockHttpServletRequest(final Application application, final 
HttpSession session,
-                       final ServletContext context)
+               final ServletContext context)
        {
                this.application = application;
                this.session = session;
@@ -233,14 +234,14 @@
                if (file.exists() == false)
                {
                        throw new IllegalArgumentException(
-                                       "File does not exists. You must provide 
an existing file: " +
-                                                       file.getAbsolutePath());
+                               "File does not exists. You must provide an 
existing file: " +
+                                       file.getAbsolutePath());
                }
 
                if (file.isFile() == false)
                {
                        throw new IllegalArgumentException(
-                                       "You can only add a File, which is not 
a directory. Only files can be uploaded.");
+                               "You can only add a File, which is not a 
directory. Only files can be uploaded.");
                }
 
                if (uploadedFiles == null)
@@ -410,7 +411,7 @@
                catch (ParseException e)
                {
                        throw new IllegalArgumentException("Can't convert 
header to date " + name + ": " +
-                                       value);
+                               value);
                }
        }
 
@@ -779,6 +780,8 @@
         */
        public String getRequestedSessionId()
        {
+               if (session instanceof MockHttpSession && 
((MockHttpSession)session).isTemporary())
+                       return null;
                return session.getId();
        }
 
@@ -870,6 +873,8 @@
         */
        public HttpSession getSession()
        {
+               if (session instanceof MockHttpSession && 
((MockHttpSession)session).isTemporary())
+                       return null;
                return session;
        }
 
@@ -882,7 +887,9 @@
         */
        public HttpSession getSession(boolean b)
        {
-               return session;
+               if (b && session instanceof MockHttpSession)
+                       ((MockHttpSession)session).setTemporary(false);
+               return getSession();
        }
 
        /**
@@ -1153,7 +1160,7 @@
        {
                parameters.putAll(params);
                
parameters.put(WebRequestCodingStrategy.BOOKMARKABLE_PAGE_PARAMETER_NAME, 
page.getClass()
-                               .getName());
+                       .getName());
        }
 
        /**
@@ -1170,7 +1177,7 @@
                {
                        final Class clazz = 
((BookmarkablePageLink)component).getPageClass();
                        
parameters.put(WebRequestCodingStrategy.BOOKMARKABLE_PAGE_PARAMETER_NAME, 
pageMapName +
-                                       ':' + clazz.getName());
+                               ':' + clazz.getName());
                }
                else
                {
@@ -1199,18 +1206,18 @@
                        else
                        {
                                throw new IllegalArgumentException(
-                                               "The component class doesn't 
seem to implement any of the known *Listener interfaces: " +
-                                                               
component.getClass());
+                                       "The component class doesn't seem to 
implement any of the known *Listener interfaces: " +
+                                               component.getClass());
                        }
 
                        
parameters.put(WebRequestCodingStrategy.INTERFACE_PARAMETER_NAME, pageMapName + 
':' +
-                                       component.getPath() + ':' + (version == 
0 ? "" : "" + version) + ':' +
-                                       Classes.simpleName(clazz) + "::");
+                               component.getPath() + ':' + (version == 0 ? "" 
: "" + version) + ':' +
+                               Classes.simpleName(clazz) + "::");
 
                        if (component.isStateless() && 
component.getPage().isBookmarkable())
                        {
                                
parameters.put(WebRequestCodingStrategy.BOOKMARKABLE_PAGE_PARAMETER_NAME,
-                                               pageMapName + ':' + 
component.getPage().getClass().getName());
+                                       pageMapName + ':' + 
component.getPage().getClass().getName());
                        }
                }
        }
@@ -1239,8 +1246,8 @@
                                        String value = 
(String)values.get(component);
                                        if (value != null)
                                        {
-                                               
parameters.put(((FormComponent)component).getInputName(), values
-                                                               
.get(component));
+                                               
parameters.put(((FormComponent)component).getInputName(),
+                                                       values.get(component));
                                                
valuesApplied.put(component.getId(), component);
                                        }
                                }
@@ -1259,9 +1266,8 @@
                                diff.remove(iter.next());
                        }
 
-                       log
-                                       .error("Parameter mismatch: didn't find 
all components referenced in parameter 'values': " +
-                                                       diff.keySet());
+                       log.error("Parameter mismatch: didn't find all 
components referenced in parameter 'values': " +
+                               diff.keySet());
                }
        }
 
@@ -1301,13 +1307,13 @@
        {
                headers.clear();
                addHeader("Accept", 
"text/xml,application/xml,application/xhtml+xml,"
-                               + 
"text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5");
+                       + 
"text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5");
                addHeader("Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.7");
                Locale l = Locale.getDefault();
                addHeader("Accept-Language", l.getLanguage().toLowerCase() + 
"-" +
-                               l.getCountry().toLowerCase() + "," + 
l.getLanguage().toLowerCase() + ";q=0.5");
+                       l.getCountry().toLowerCase() + "," + 
l.getLanguage().toLowerCase() + ";q=0.5");
                addHeader("User-Agent",
-                               "Mozilla/5.0 (Windows; U; Windows NT 5.0; 
en-US; rv:1.7) Gecko/20040707 Firefox/0.9.2");
+                       "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; 
rv:1.7) Gecko/20040707 Firefox/0.9.2");
        }
 
        private static final String crlf = "\r\n";

Modified: 
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/MockHttpSession.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/MockHttpSession.java?rev=640436&r1=640435&r2=640436&view=diff
==============================================================================
--- 
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/MockHttpSession.java
 (original)
+++ 
wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/MockHttpSession.java
 Mon Mar 24 08:04:57 2008
@@ -45,6 +45,8 @@
        private final String id = (new UID()).toString().replace(':', 
'_').replace('-', '_');
 
        private long lastAccessedTime = 0;
+       
+       private boolean temporary = true;
 
        /**
         * Create the session.
@@ -249,5 +251,25 @@
        public void timestamp()
        {
                lastAccessedTime = System.currentTimeMillis();
+       }
+       
+       /**
+        * Indicates the state of the session. Temporary or persisted.
+        * 
+        * @return true if this is a temporary session, false otherwise
+        */
+       public final boolean isTemporary()
+       {
+               return temporary;
+       }
+
+       /**
+        * Changes the state of this session. Temporary or persisted.
+        * Uppon creation all sessions are temporary.
+        * @param temporary trur, for a temporary session, false for a 
persisted session
+        */
+       public final void setTemporary(boolean temporary)
+       {
+               this.temporary = temporary;
        }
 }

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=640436&r1=640435&r2=640436&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
 Mon Mar 24 08:04:57 2008
@@ -187,6 +187,7 @@
 
                // Construct mock session, request and response
                servletSession = new MockHttpSession(context);
+               servletSession.setTemporary(initializeHttpSessionAsTemporary());
                servletRequest = new MockHttpServletRequest(this.application, 
servletSession, context);
                servletResponse = new MockHttpServletResponse(servletRequest);
 
@@ -217,6 +218,18 @@
        }
 
        /**
+        * Callback to signal the application to create temporary sessions 
instead of normal sessions.
+        * This should only be used if you want to test stuff like [EMAIL 
PROTECTED] Session#bind()}. Default
+        * returns false.
+        * 
+        * @return true if sessions should be temporary by default, otherwise 
false
+        */
+       public boolean initializeHttpSessionAsTemporary()
+       {
+               return false;
+       }
+
+       /**
         * Used to create a new mock servlet context.
         * 
         * @param path
@@ -405,7 +418,7 @@
         * 
         * @param cycle
         */
-       private void postProcessRequestCycle(WebRequestCycle cycle)
+       public final void postProcessRequestCycle(WebRequestCycle cycle)
        {
                previousRenderedPage = lastRenderedPage;
 
@@ -532,7 +545,8 @@
                wicketRequest = application.newWebRequest(servletRequest);
                wicketResponse = application.newWebResponse(servletResponse);
                WebRequestCycle requestCycle = createRequestCycle();
-               application.getSessionStore().bind(wicketRequest, 
wicketSession);
+               if (!initializeHttpSessionAsTemporary())
+                       application.getSessionStore().bind(wicketRequest, 
wicketSession);
                wicketResponse.setAjax(wicketRequest.isAjax());
                return requestCycle;
        }

Added: 
wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/stateless/TemporarySessionTest.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/stateless/TemporarySessionTest.java?rev=640436&view=auto
==============================================================================
--- 
wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/stateless/TemporarySessionTest.java
 (added)
+++ 
wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/stateless/TemporarySessionTest.java
 Mon Mar 24 08:04:57 2008
@@ -0,0 +1,92 @@
+/*
+ * 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.wicket.stateless;
+
+import org.apache.wicket.Session;
+import org.apache.wicket.WicketTestCase;
+import org.apache.wicket.protocol.http.WebApplication;
+import org.apache.wicket.stateless.pages.HomePage;
+import org.apache.wicket.stateless.pages.LoginPage;
+import org.apache.wicket.util.tester.FormTester;
+import org.apache.wicket.util.tester.WicketTester;
+
+/**
+ * A test to detect temporary sessions. However since the http stack has been 
mocked for this test,
+ * it is more a test to see if our mocks can handle temporary sessions then it 
is to see if wicket
+ * supports temporary sessions.
+ * 
+ * @author marrink
+ */
+public class TemporarySessionTest extends WicketTestCase
+{
+// private WicketTester tester;
+
+       /**
+        * @see junit.framework.TestCase#setUp()
+        */
+       protected void setUp() throws Exception
+       {
+               tester = new WicketTester(new WebApplication()
+               {
+
+                       public Class getHomePage()
+                       {
+                               return HomePage.class;
+                       }
+
+                       protected void outputDevelopmentModeWarning()
+                       {
+                               // Do nothing.
+                       }
+               }, "src/test/java/" + 
getClass().getPackage().getName().replace('.', '/'))
+               {
+                       public boolean initializeHttpSessionAsTemporary()
+                       {
+                               return true;
+                       }
+               };
+       }
+
+
+       /**
+        * @see junit.framework.TestCase#tearDown()
+        */
+// protected void tearDown() throws Exception
+// {
+// tester.destroy();
+// }
+       /**
+        * Test if we can keep a session temporary.
+        */
+       public void testSessionIsTemporary()
+       {
+               tester.startPage(LoginPage.class);
+               tester.setupRequestAndResponse();
+               assertTrue(tester.getWicketSession().isTemporary());
+               tester.processRequestCycle(LoginPage.class);
+               FormTester form = 
tester.newFormTester("signInPanel:signInForm");
+               form.setValue("username", "test");
+               form.setValue("password", "test");
+               tester.getWicketSession().bind();
+               form.submit();
+               tester.assertRenderedPage(HomePage.class);
+               tester.setupRequestAndResponse();
+               assertFalse(Session.get().isTemporary());
+               tester.processRequestCycle(LoginPage.class);
+       }
+
+}

Propchange: 
wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/stateless/TemporarySessionTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain


Reply via email to