Done https://issues.apache.org/jira/browse/WICKET-1410
Maurice
On Tue, Mar 11, 2008 at 12:56 AM, Johan Compagner <[EMAIL PROTECTED]> wrote:
> 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;
> > }
> >
>