You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by jo...@apache.org on 2007/04/12 20:58:31 UTC

svn commit: r528089 - in /incubator/wicket/branches/wicket-1.x/jdk-1.4/wicket/src/main/java/org/apache/wicket: ./ protocol/http/ util/lang/ util/tester/

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
-				}
-			};
 		}
 	}