Author: jonl
Date: Thu Apr 12 11:58:30 2007
New Revision: 528089
URL: http://svn.apache.org/viewvc?view=rev&rev=528089
Log:
Added method to RequestCycle that allows testing harnesses to explicitly keep
the request cycle from clearing feedback messages so they can be inspected by
the tester. Changed WicketTester to use this.
Modified:
incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/RequestCycle.java
incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/Session.java
incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/MockWebApplication.java
incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/UnitTestSettings.java
incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/util/lang/Objects.java
incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/util/tester/WicketTester.java
Modified:
incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/RequestCycle.java
URL:
http://svn.apache.org/viewvc/incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/RequestCycle.java?view=diff&rev=528089&r1=528088&r2=528089
==============================================================================
---
incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/RequestCycle.java
(original)
+++
incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/RequestCycle.java
Thu Apr 12 11:58:30 2007
@@ -205,6 +205,12 @@
private static final int RESPOND = 4;
/**
+ * True if the request cycle should automatically clear feedback
messages
+ * after processing
+ */
+ private boolean automaticallyClearFeedbackMessages;
+
+ /**
* Gets request cycle for calling thread.
*
* @return Request cycle for calling thread
@@ -518,6 +524,19 @@
}
/**
+ * Permit clients like testers to examine feedback messages after
+ * processing.
+ *
+ * @param automaticallyClearFeedbackMessages
+ * True to automatically detach request cycle at end of
+ * processing
+ */
+ public void setAutomaticallyClearFeedbackMessages(boolean
automaticallyClearFeedbackMessages)
+ {
+ this.automaticallyClearFeedbackMessages =
automaticallyClearFeedbackMessages;
+ }
+
+ /**
* Sets whether the page for this request should be redirected.
*
* @param redirect
@@ -845,20 +864,23 @@
}
}
- // remove any rendered and otherwise obsolute feedback messages
from the
- // session
- try
+ if (automaticallyClearFeedbackMessages)
{
- session.cleanupRenderedFeedbackMessages();
- Page page = getResponsePage();
- if (page != null)
+ // remove any rendered and otherwise obsolute feedback
messages from
+ // the session
+ try
{
- session.cleanupFeedbackMessages(page);
+ session.cleanupRenderedFeedbackMessages();
+ final Page page = getResponsePage();
+ if (page != null)
+ {
+ session.cleanupFeedbackMessages(page);
+ }
+ }
+ catch (RuntimeException re)
+ {
+ log.error("there was an error cleaning up the
feedback messages", re);
}
- }
- catch (RuntimeException re)
- {
- log.error("there was an error cleaning up the feedback
messages", re);
}
// At the end of our response, let the session do some book
keeping
@@ -926,6 +948,7 @@
{
log.error("Exception occurred during threadDetach", re);
}
+
}
/**
Modified:
incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/Session.java
URL:
http://svn.apache.org/viewvc/incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/Session.java?view=diff&rev=528089&r1=528088&r2=528089
==============================================================================
---
incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/Session.java
(original)
+++
incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/Session.java
Thu Apr 12 11:58:30 2007
@@ -1241,7 +1241,7 @@
* Removes any rendered feedback messages as well as compacts memory.
This
* method is usually called at the end of the request cycle processing.
*/
- final void cleanupRenderedFeedbackMessages()
+ protected void cleanupRenderedFeedbackMessages()
{
int size = feedbackMessages.size();
feedbackMessages.clearRendered();
Modified:
incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/MockWebApplication.java
URL:
http://svn.apache.org/viewvc/incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/MockWebApplication.java?view=diff&rev=528089&r1=528088&r2=528089
==============================================================================
---
incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/MockWebApplication.java
(original)
+++
incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/MockWebApplication.java
Thu Apr 12 11:58:30 2007
@@ -141,7 +141,7 @@
this.application = application;
this.context = newServletContext(path);
-
+
filter = new WicketFilter()
{
protected IWebApplicationFactory getApplicationFactory()
@@ -176,7 +176,8 @@
if
(name.equals(WicketFilter.FILTER_MAPPING_PARAM))
{
return
WicketFilter.SERVLET_PATH_HOLDER;
- //return "/" +
MockWebApplication.this.getName() + "/*";
+ // return "/" +
MockWebApplication.this.getName() +
+ // "/*";
}
return null;
}
@@ -194,34 +195,35 @@
Application.set(this.application);
- // Construct mock session, request and response
+ // Construct mock session, request and response
this.servletSession = new MockHttpSession(this.context);
- this.servletRequest = new
MockHttpServletRequest(this.application, this.servletSession, this.context);
+ this.servletRequest = new
MockHttpServletRequest(this.application, this.servletSession,
+ this.context);
this.servletResponse = new MockHttpServletResponse();
-
+
// Construct request, response and session using factories
this.wicketRequest =
this.application.newWebRequest(this.servletRequest);
this.wicketResponse =
this.application.newWebResponse(this.servletResponse);
this.wicketSession =
this.application.getSession(this.wicketRequest, this.wicketResponse);
-
+
// Get request cycle factory
this.requestCycleFactory =
this.wicketSession.getRequestCycleFactory();
// Set the default context path
this.application.getApplicationSettings().setContextPath(context.getServletContextName());
- this.application.getRequestCycleSettings()
-
.setRenderStrategy(IRequestCycleSettings.ONE_PASS_RENDER);
+ this.application.getRequestCycleSettings().setRenderStrategy(
+ IRequestCycleSettings.ONE_PASS_RENDER);
this.application.getResourceSettings().setResourceFinder(new
WebApplicationPath(context));
this.application.getPageSettings().setAutomaticMultiWindowSupport(false);
- // Since the purpose of MockWebApplication is singlethreaded
+ // Since the purpose of MockWebApplication is singlethreaded
// programmatic testing it doesn't make much sense to have a
// modification watcher thread started to watch for changes in
the
// markup.
- // Disabling this also helps test suites with many test cases
- // (problems has been noticed with >~300 test cases). The
problem
- // is that even if the wicket tester is GC'ed the modification
+ // Disabling this also helps test suites with many test cases
+ // (problems has been noticed with >~300 test cases). The
problem
+ // is that even if the wicket tester is GC'ed the modification
// watcher still runs, taking up file handles and memory,
leading
// to "Too many files opened" or a regular OutOfMemoryException
this.application.getResourceSettings().setResourcePollFrequency(null);
@@ -241,7 +243,7 @@
{
return new MockServletContext(this.application, path);
}
-
+
/**
* Gets the application object.
*
@@ -359,7 +361,14 @@
{
setupRequestAndResponse();
final WebRequestCycle cycle = createRequestCycle();
- cycle.request(new BookmarkablePageRequestTarget(pageClass));
+ try
+ {
+ cycle.request(new
BookmarkablePageRequestTarget(pageClass));
+ }
+ finally
+ {
+ cycle.getResponse().close();
+ }
postProcessRequestCycle(cycle);
}
@@ -380,7 +389,14 @@
*/
public void processRequestCycle(WebRequestCycle cycle)
{
- cycle.request();
+ try
+ {
+ cycle.request();
+ }
+ finally
+ {
+ cycle.getResponse().close();
+ }
postProcessRequestCycle(cycle);
}
@@ -474,7 +490,14 @@
*/
public WebRequestCycle createRequestCycle()
{
- return (WebRequestCycle)
requestCycleFactory.newRequestCycle(wicketSession, wicketRequest,
wicketResponse);
+ // Create a web request cycle using factory
+ final WebRequestCycle cycle =
(WebRequestCycle)requestCycleFactory.newRequestCycle(
+ wicketSession, wicketRequest, wicketResponse);
+
+ // Set request cycle so it won't detach automatically and clear
messages
+ // we want to check
+ cycle.setAutomaticallyClearFeedbackMessages(false);
+ return cycle;
}
/**
@@ -488,10 +511,10 @@
servletResponse.initialize();
servletRequest.setParameters(parametersForNextRequest);
parametersForNextRequest.clear();
- this.wicketRequest = this.application.newWebRequest(servletRequest);
- this.wicketResponse =
this.application.newWebResponse(servletResponse);
- this.wicketSession = this.application.getSession(wicketRequest,
wicketResponse);
- this.application.getSessionStore().bind(wicketRequest, wicketSession);
+ this.wicketRequest =
this.application.newWebRequest(servletRequest);
+ this.wicketResponse =
this.application.newWebResponse(servletResponse);
+ this.wicketSession = this.application.getSession(wicketRequest,
wicketResponse);
+ this.application.getSessionStore().bind(wicketRequest,
wicketSession);
wicketResponse.setAjax(wicketRequest.isAjax());
}
@@ -515,7 +538,7 @@
{
this.parametersForNextRequest = parametersForNextRequest;
}
-
+
/**
* clears this mock application
*/
@@ -525,18 +548,18 @@
File dir =
(File)context.getAttribute("javax.servlet.context.tempdir");
deleteDir(dir);
}
-
+
private void deleteDir(File dir)
{
- if(dir != null && dir.isDirectory())
+ if (dir != null && dir.isDirectory())
{
File[] files = dir.listFiles();
if (files != null)
{
- for (int i=0; i<files.length; i++)
+ for (int i = 0; i < files.length; i++)
{
File element = files[i];
- if(element.isDirectory())
+ if (element.isDirectory())
{
deleteDir(element);
}
Modified:
incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/UnitTestSettings.java
URL:
http://svn.apache.org/viewvc/incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/UnitTestSettings.java?view=diff&rev=528089&r1=528088&r2=528089
==============================================================================
---
incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/UnitTestSettings.java
(original)
+++
incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/UnitTestSettings.java
Thu Apr 12 11:58:30 2007
@@ -29,11 +29,18 @@
*/
private static boolean sortUrlParameters = false;
+ /**
+ * @return True if URL parameters should be sorted
+ */
public static boolean getSortUrlParameters()
{
return UnitTestSettings.sortUrlParameters;
}
+ /**
+ * @param sortUrlParameters
+ * True if URL parameters should be sorted
+ */
public static void setSortUrlParameters(boolean sortUrlParameters)
{
UnitTestSettings.sortUrlParameters = sortUrlParameters;
Modified:
incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/util/lang/Objects.java
URL:
http://svn.apache.org/viewvc/incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/util/lang/Objects.java?view=diff&rev=528089&r1=528088&r2=528089
==============================================================================
---
incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/util/lang/Objects.java
(original)
+++
incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/util/lang/Objects.java
Thu Apr 12 11:58:30 2007
@@ -25,12 +25,9 @@
import java.io.ObjectStreamClass;
import java.io.OutputStream;
import java.lang.reflect.Array;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.HashMap;
-import java.util.Locale;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -38,9 +35,7 @@
import org.apache.wicket.Component;
import org.apache.wicket.WicketRuntimeException;
import org.apache.wicket.application.IClassResolver;
-import org.apache.wicket.markup.MarkupException;
import org.apache.wicket.settings.IApplicationSettings;
-import org.apache.wicket.util.convert.IConverter;
import org.apache.wicket.util.io.ByteCountingOutputStream;
import org.apache.wicket.util.io.IObjectStreamFactory;
import org.apache.wicket.util.io.WicketObjectStreamFactory;
Modified:
incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/util/tester/WicketTester.java
URL:
http://svn.apache.org/viewvc/incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/util/tester/WicketTester.java?view=diff&rev=528089&r1=528088&r2=528089
==============================================================================
---
incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/util/tester/WicketTester.java
(original)
+++
incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket/src/main/java/org/apache/wicket/util/tester/WicketTester.java
Thu Apr 12 11:58:30 2007
@@ -29,10 +29,6 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.wicket.Component;
-import org.apache.wicket.Page;
-import org.apache.wicket.Request;
-import org.apache.wicket.Response;
-import org.apache.wicket.Session;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.feedback.FeedbackMessage;
import org.apache.wicket.markup.html.basic.Label;
@@ -41,7 +37,6 @@
import org.apache.wicket.protocol.http.UnitTestSettings;
import org.apache.wicket.protocol.http.WebApplication;
import org.apache.wicket.protocol.http.WebResponse;
-import org.apache.wicket.protocol.http.WebSession;
import org.apache.wicket.util.diff.DiffUtil;
@@ -168,20 +163,6 @@
protected WebResponse newWebResponse(final HttpServletResponse
servletResponse)
{
return new WebResponse(servletResponse);
- }
-
- public Session newSession(Request request, Response response)
- {
- return new WebSession(this, request)
- {
- private static final long serialVersionUID = 1L;
-
- public void cleanupFeedbackMessages(Page page)
- {
- // don't clean up so that we'll have
them available for
- // testing
- }
- };
}
}