i just found it not that importand to test that :)
better would be to make a jira issue with that patch
and/or wait a little bit.........
On Mon, Mar 10, 2008 at 10:19 PM, Maurice Marrink <[EMAIL PROTECTED]> wrote:
> A couple of weeks ago i bugged Johan one night about WicketTester not
> being able to handle temporary wicket sessions, i probably did not
> explain myself very well at that time because he did not seem to get
> my point.
> It was not that big a deal then and i decided to take a crack at it
> some time later.
> Sometime later happened to be when most of the devs where in Thailand,
> but i got it to work and i thought i share my findings here. Maybe
> WicketTester can be patched or maybe someone else can benefit from
> this at a later time.
>
> Lets see if i can explain myself better this time :)
> Because MockWebApplication automatically does
> application.getSessionStore().bind(wicketRequest, wicketSession); in
> setupRequestAndResponse the session is automatically bound and it is
> not possible to test for Session.isTemporary() and thus truly testing
> your statelesspages.
> I know you have a StatelessComponentTest but it does not test if a
> session is bound, which is what i wanted to test in order to test my
> bind() moment.
> As it turned out all i had to do was make a few small changes to make
> it work, see patch below.
> Theoretically all the test should still run fine after my
> modifications. Unfortunately they did not and i had to build in a
> boolean to revert to the old behavior. I have not looked extensively
> why some of the tests failed withe the temporary session, maybe one of
> the devs can take a look.
> In the patch you will also notice i changed
> MockWebApplication#postProcessRequestCycle from private to public this
> is because processRequestCycle throws away the requestcycle and i
> needed a way to process the request without that side effect. To
> enable temporary sessions overwrite
> MockWebApplication#initializeHttpSessionAsTemporary to return true.
> Feel free to use / modify the code in the patch as i have made a copy
> in my tests for the required classes. The changes are small and should
> be self explanatory.
>
> Maurice
>
> Index:
> src/main/java/org/apache/wicket/protocol/http/MockHttpServletRequest.java
> ===================================================================
> ---
> src/main/java/org/apache/wicket/protocol/http/MockHttpServletRequest.java
> (revision
> 618675)
> +++
> src/main/java/org/apache/wicket/protocol/http/MockHttpServletRequest.java
> (working
> copy)
> @@ -174,7 +174,7 @@
>
> private String path;
>
> - private final HttpSession session;
> + private final MockHttpSession session;
>
> private String url;
>
> @@ -192,7 +192,7 @@
> * @param context
> * The current servlet context
> */
> - public MockHttpServletRequest(final Application application, final
> HttpSession session,
> + public MockHttpServletRequest(final Application application, final
> MockHttpSession session,
> final ServletContext context)
> {
> this.application = application;
> @@ -779,6 +779,8 @@
> */
> public String getRequestedSessionId()
> {
> + if (session.isTemporary())
> + return null;
> return session.getId();
> }
>
> @@ -870,6 +872,8 @@
> */
> public HttpSession getSession()
> {
> + if (session.isTemporary())
> + return null;
> return session;
> }
>
> @@ -882,7 +886,9 @@
> */
> public HttpSession getSession(boolean b)
> {
> - return session;
> + if (b)
> + session.setTemporary(false);
> + return getSession();
> }
>
> /**
> Index: src/main/java/org/apache/wicket/protocol/http/MockHttpSession.java
> ===================================================================
> --- src/main/java/org/apache/wicket/protocol/http/MockHttpSession.java
> (revision
> 618675)
> +++ src/main/java/org/apache/wicket/protocol/http/MockHttpSession.java
> (working
> copy)
> @@ -45,6 +45,8 @@
> private final String id = (new UID()).toString().replace(':',
> '_').replace('-', '_');
>
> private long lastAccessedTime = 0;
> +
> + private boolean temporary = true;
>
> /**
> * Create the session.
> @@ -250,4 +252,24 @@
> {
> 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;
> + }
> }
> \ No newline at end of file
> Index:
> src/main/java/org/apache/wicket/protocol/http/MockWebApplication.java
> ===================================================================
> --- src/main/java/org/apache/wicket/protocol/http/MockWebApplication.java
> (revision
> 630015)
> +++ src/main/java/org/apache/wicket/protocol/http/MockWebApplication.java
> (working
> copy)
> @@ -17,7 +17,6 @@
> package org.apache.wicket.protocol.http;
>
> import java.io.File;
> -import java.io.IOException;
> import java.util.Enumeration;
> import java.util.HashMap;
> import java.util.Map;
> @@ -187,6 +186,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);
>
> @@ -216,6 +216,11 @@
> this.application.getResourceSettings
> ().setResourcePollFrequency(null);
> }
>
> + public boolean initializeHttpSessionAsTemporary()
> + {
> + return false;
> + }
> +
> /**
> * Used to create a new mock servlet context.
> *
> @@ -385,9 +390,10 @@
> try
> {
> cycle.request();
> - if (cycle.wasHandled() == false)
> + if (cycle.wasHandled() == false)
> {
> - cycle.setRequestTarget(new
> WebErrorCodeResponseTarget(HttpServletResponse.SC_NOT_FOUND));
> + cycle.setRequestTarget(new
> WebErrorCodeResponseTarget(
> + HttpServletResponse.SC_NOT_FOUND
> ));
> }
> createRequestCycle();
> }
> @@ -402,7 +408,7 @@
> *
> * @param cycle
> */
> - private void postProcessRequestCycle(WebRequestCycle cycle)
> + public final void postProcessRequestCycle(WebRequestCycle cycle)
> {
> previousRenderedPage = lastRenderedPage;
>
> @@ -529,7 +535,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;
> }
>