Author: jdonnerstag Date: Sun Jun 12 10:18:20 2011 New Revision: 1134901 URL: http://svn.apache.org/viewvc?rev=1134901&view=rev Log: fixed: Add methods to allow for better configuration of header values in WicketTester Issue: WICKET-3775
Modified: wicket/trunk/wicket-core/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java wicket/trunk/wicket-core/src/test/java/org/apache/wicket/WicketTestCase.java wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/XmlDeclResponseTest.java Modified: wicket/trunk/wicket-core/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java?rev=1134901&r1=1134900&r2=1134901&view=diff ============================================================================== --- wicket/trunk/wicket-core/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java (original) +++ wicket/trunk/wicket-core/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java Sun Jun 12 10:18:20 2011 @@ -197,6 +197,10 @@ public class BaseWicketTester // see https://issues.apache.org/jira/browse/WICKET-1214 private Component startComponent; + // User may provide request header value any time. They get applied (and reset) upon next + // invocation of processRequest() + private Map<String, String> preHeader; + /** * Creates <code>WicketTester</code> and automatically create a <code>WebApplication</code>, but * the tester will have no home page. @@ -291,6 +295,8 @@ public class BaseWicketTester // initialize the application application.initApplication(); + // We don't expect any changes during testing. In addition we avoid creating + // ModificationWatcher threads tests. application.getResourceSettings().setResourcePollFrequency(getResourcePollFrequency()); // reconfigure application for the test environment @@ -505,13 +511,20 @@ public class BaseWicketTester } /** + * Process the request. This is a fairly central function and is almost always invoked for + * executing the request. + * <p> + * You may subclass processRequest it, to monitor or change any pre-configured value. Request + * headers can be configured more easily by calling {@link #addRequestHeader(String, String)}. * * @param forcedRequest + * Can be null. * @param forcedRequestHandler + * Can be null. * @param redirect * @return true, if process was executed successfully */ - private boolean processRequest(final MockHttpServletRequest forcedRequest, + protected boolean processRequest(final MockHttpServletRequest forcedRequest, final IRequestHandler forcedRequestHandler, final boolean redirect) { if (forcedRequest != null) @@ -526,6 +539,21 @@ public class BaseWicketTester lastRenderedPage = null; } + // Add or replace any system provided header entry with the user provided. + if ((request != null) && (preHeader != null)) + { + for (Map.Entry<String, String> entry : preHeader.entrySet()) + { + if (Strings.isEmpty(entry.getKey()) == false) + { + request.addHeader(entry.getKey(), entry.getValue()); + } + } + + // Reset the user provided headers + preHeader = null; + } + try { if (!redirect) @@ -593,6 +621,30 @@ public class BaseWicketTester } /** + * Allows to set Request header value any time. They'll be applied (add/modify) on process + * execution {@link #processRequest(MockHttpServletRequest, IRequestHandler, boolean)}. They are + * reset immediately after and thus are not re-used for a sequence of requests. + * <p> + * Deletion (not replace) of pre-configured header value can be achieved by subclassing + * {@link #processRequest(MockHttpServletRequest, IRequestHandler, boolean)} and modifying the + * request header directly. + * + * @param key + * @param value + */ + public final void addRequestHeader(final String key, final String value) + { + Args.notEmpty(key, "key"); + + if (preHeader == null) + { + preHeader = Generics.newHashMap(); + } + + preHeader.put(key, value); + } + + /** * */ private void recordRequestResponse() Modified: wicket/trunk/wicket-core/src/test/java/org/apache/wicket/WicketTestCase.java URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/WicketTestCase.java?rev=1134901&r1=1134900&r2=1134901&view=diff ============================================================================== --- wicket/trunk/wicket-core/src/test/java/org/apache/wicket/WicketTestCase.java (original) +++ wicket/trunk/wicket-core/src/test/java/org/apache/wicket/WicketTestCase.java Sun Jun 12 10:18:20 2011 @@ -66,7 +66,7 @@ public abstract class WicketTestCase ext protected void setUp() throws Exception { WebApplication application = newApplication(); - tester = new WicketTester(application); + tester = newWicketTester(application); } /** @@ -78,6 +78,18 @@ public abstract class WicketTestCase ext } /** + * In case you need to subclass WicketTester and want to be independent on possible changes in + * setUp(). + * + * @param app + * @return WIcketTester + */ + protected WicketTester newWicketTester(final WebApplication app) + { + return new WicketTester(app); + } + + /** * @see junit.framework.TestCase#tearDown() */ @Override Modified: wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/XmlDeclResponseTest.java URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/XmlDeclResponseTest.java?rev=1134901&r1=1134900&r2=1134901&view=diff ============================================================================== --- wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/XmlDeclResponseTest.java (original) +++ wicket/trunk/wicket-core/src/test/java/org/apache/wicket/markup/html/XmlDeclResponseTest.java Sun Jun 12 10:18:20 2011 @@ -22,9 +22,6 @@ import org.apache.wicket.markup.IMarkupF import org.apache.wicket.markup.Markup; import org.apache.wicket.markup.MarkupType; import org.apache.wicket.protocol.http.WebApplication; -import org.apache.wicket.protocol.http.mock.MockHttpServletRequest; -import org.apache.wicket.request.IRequestHandler; -import org.apache.wicket.util.tester.WicketTester; import org.junit.Test; /** @@ -40,13 +37,6 @@ public class XmlDeclResponseTest extends private int insertXmlDecl = 0; @Override - protected void setUp() throws Exception - { - WebApplication application = newApplication(); - tester = new MyWicketTester(application); - } - - @Override protected WebApplication newApplication() { return new WebApplication() @@ -85,22 +75,22 @@ public class XmlDeclResponseTest extends doc = tester.getLastResponseAsString(); assertEquals(markupWith, doc); - ((MyWicketTester)tester).acceptHeader = acceptString; + tester.addRequestHeader("HTTP_ACCEPT", acceptString); tester.startPage(new SimplePage(MarkupType.HTML_MIME)); doc = tester.getLastResponseAsString(); assertEquals(markupWith, doc); - ((MyWicketTester)tester).acceptHeader = acceptString; + tester.addRequestHeader("HTTP_ACCEPT", acceptString); tester.startPage(new SimplePage(MarkupType.XML_MIME)); doc = tester.getLastResponseAsString(); assertEquals(markupWith, doc); - ((MyWicketTester)tester).acceptHeader = "xx"; + tester.addRequestHeader("HTTP_ACCEPT", "xx"); tester.startPage(new SimplePage(MarkupType.HTML_MIME)); doc = tester.getLastResponseAsString(); assertEquals(markupWith, doc); - ((MyWicketTester)tester).acceptHeader = "xx"; + tester.addRequestHeader("HTTP_ACCEPT", "xx"); tester.startPage(new SimplePage(MarkupType.XML_MIME)); doc = tester.getLastResponseAsString(); assertEquals(markupWith, doc); @@ -120,22 +110,22 @@ public class XmlDeclResponseTest extends doc = tester.getLastResponseAsString(); assertEquals(markupWithout, doc); - ((MyWicketTester)tester).acceptHeader = acceptString; + tester.addRequestHeader("HTTP_ACCEPT", acceptString); tester.startPage(new SimplePage(MarkupType.HTML_MIME)); doc = tester.getLastResponseAsString(); assertEquals(markupWithout, doc); - ((MyWicketTester)tester).acceptHeader = acceptString; + tester.addRequestHeader("HTTP_ACCEPT", acceptString); tester.startPage(new SimplePage(MarkupType.XML_MIME)); doc = tester.getLastResponseAsString(); assertEquals(markupWithout, doc); - ((MyWicketTester)tester).acceptHeader = "xx"; + tester.addRequestHeader("HTTP_ACCEPT", "xx"); tester.startPage(new SimplePage(MarkupType.HTML_MIME)); doc = tester.getLastResponseAsString(); assertEquals(markupWithout, doc); - ((MyWicketTester)tester).acceptHeader = "xx"; + tester.addRequestHeader("HTTP_ACCEPT", "xx"); tester.startPage(new SimplePage(MarkupType.XML_MIME)); doc = tester.getLastResponseAsString(); assertEquals(markupWithout, doc); @@ -155,22 +145,22 @@ public class XmlDeclResponseTest extends doc = tester.getLastResponseAsString(); assertEquals(markupWith, doc); - ((MyWicketTester)tester).acceptHeader = acceptString; + tester.addRequestHeader("HTTP_ACCEPT", acceptString); tester.startPage(new SimplePage(MarkupType.HTML_MIME)); doc = tester.getLastResponseAsString(); assertEquals(markupWithout, doc); - ((MyWicketTester)tester).acceptHeader = acceptString; + tester.addRequestHeader("HTTP_ACCEPT", acceptString); tester.startPage(new SimplePage(MarkupType.XML_MIME)); doc = tester.getLastResponseAsString(); assertEquals(markupWith, doc); - ((MyWicketTester)tester).acceptHeader = "xx"; + tester.addRequestHeader("HTTP_ACCEPT", "xx"); tester.startPage(new SimplePage(MarkupType.HTML_MIME)); doc = tester.getLastResponseAsString(); assertEquals(markupWithout, doc); - ((MyWicketTester)tester).acceptHeader = "xx"; + tester.addRequestHeader("HTTP_ACCEPT", "xx"); tester.startPage(new SimplePage(MarkupType.XML_MIME)); doc = tester.getLastResponseAsString(); assertEquals(markupWithout, doc); @@ -205,31 +195,4 @@ public class XmlDeclResponseTest extends return Markup.of(markupWithout); } } - - /** */ - public static class MyWicketTester extends WicketTester - { - /** */ - public String acceptHeader; - - /** - * @param app - */ - public MyWicketTester(final WebApplication app) - { - super(app); - } - - @Override - public boolean processRequest(final MockHttpServletRequest request, - final IRequestHandler forcedRequestHandler) - { - if (acceptHeader != null) - { - request.addHeader("HTTP_ACCEPT", acceptHeader); - } - - return super.processRequest(request, forcedRequestHandler); - } - } }