You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by pe...@apache.org on 2011/01/04 11:27:00 UTC
svn commit: r1054961 - in /wicket/trunk:
wicket-core/src/main/java/org/apache/wicket/protocol/http/mock/
wicket-core/src/main/java/org/apache/wicket/util/tester/
wicket-core/src/test/java/org/apache/wicket/
wicket-core/src/test/java/org/apache/wicket/u...
Author: pedro
Date: Tue Jan 4 10:26:59 2011
New Revision: 1054961
URL: http://svn.apache.org/viewvc?rev=1054961&view=rev
Log:
changing MockHttpServletRequest to maintain users parameters set on request when setting an URL, and assemble an query string with all parameters values
Issue: WICKET-3272
Added:
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/MockPageParametersAware.java
Modified:
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/protocol/http/mock/MockHttpServletRequest.java
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/util/tester/WicketTesterTest.java
wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/string/StringValue.java
Modified: wicket/trunk/wicket-core/src/main/java/org/apache/wicket/protocol/http/mock/MockHttpServletRequest.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/protocol/http/mock/MockHttpServletRequest.java?rev=1054961&r1=1054960&r2=1054961&view=diff
==============================================================================
--- wicket/trunk/wicket-core/src/main/java/org/apache/wicket/protocol/http/mock/MockHttpServletRequest.java (original)
+++ wicket/trunk/wicket-core/src/main/java/org/apache/wicket/protocol/http/mock/MockHttpServletRequest.java Tue Jan 4 10:26:59 2011
@@ -742,17 +742,24 @@ public class MockHttpServletRequest impl
for (Iterator<String> iterator = parameters.keySet().iterator(); iterator.hasNext();)
{
final String name = iterator.next();
- final String value = getParameter(name);
- if (name != null)
+ final String[] values = getParameterValues(name);
+ for (int i = 0; i < values.length; i++)
{
- buf.append(UrlEncoder.QUERY_INSTANCE.encode(name,
- Charset.forName(getCharacterEncoding())));
- }
- buf.append('=');
- if (value != null)
- {
- buf.append(UrlEncoder.QUERY_INSTANCE.encode(value,
- Charset.forName(getCharacterEncoding())));
+ if (name != null)
+ {
+ buf.append(UrlEncoder.QUERY_INSTANCE.encode(name,
+ Charset.forName(getCharacterEncoding())));
+ }
+ buf.append('=');
+ if (values[i] != null)
+ {
+ buf.append(UrlEncoder.QUERY_INSTANCE.encode(values[i],
+ Charset.forName(getCharacterEncoding())));
+ }
+ if (i + 1 < values.length)
+ {
+ buf.append('&');
+ }
}
if (iterator.hasNext())
{
@@ -1283,8 +1290,11 @@ public class MockHttpServletRequest impl
setPath(url.substring(0, index));
String queryString = url.substring(index + 1);
-
- parameters.clear();
+/*
+ * We can't clear the parameters here because users may have set custom parameters in request. An
+ * better place to clear they is when tester setups the next request cycle
+ */
+// parameters.clear();
for (QueryParameter parameter : Url.parse("?" + queryString,
Charset.forName(getCharacterEncoding())).getQueryParameters())
{
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=1054961&r1=1054960&r2=1054961&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 Tue Jan 4 10:26:59 2011
@@ -310,9 +310,9 @@ public class BaseWicketTester
/**
* @return last rendered page
*/
- public Page getLastRenderedPage()
+ public <T extends Page> T getLastRenderedPage()
{
- return lastRenderedPage;
+ return (T)lastRenderedPage;
}
/**
Added: wicket/trunk/wicket-core/src/test/java/org/apache/wicket/MockPageParametersAware.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/MockPageParametersAware.java?rev=1054961&view=auto
==============================================================================
--- wicket/trunk/wicket-core/src/test/java/org/apache/wicket/MockPageParametersAware.java (added)
+++ wicket/trunk/wicket-core/src/test/java/org/apache/wicket/MockPageParametersAware.java Tue Jan 4 10:26:59 2011
@@ -0,0 +1,99 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket;
+
+import org.apache.wicket.markup.IMarkupResourceStreamProvider;
+import org.apache.wicket.markup.html.WebPage;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.TextField;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.request.IRequestParameters;
+import org.apache.wicket.request.component.IRequestableComponent;
+import org.apache.wicket.util.resource.IResourceStream;
+import org.apache.wicket.util.resource.StringResourceStream;
+
+
+/**
+ * Mock Page to maintain the request parameters after the request cycle end
+ */
+public class MockPageParametersAware extends WebPage
+ implements
+ IMarkupResourceStreamProvider,
+ IRequestableComponent
+{
+ private static final long serialVersionUID = 1L;
+
+ private IRequestParameters lastQueryParameters;
+ private IRequestParameters lastPostParameters;
+
+ /** */
+ public MockPageParametersAware()
+ {
+ Form<Void> form = new Form<Void>("form");
+ TextField<String> textField = new TextField<String>("textfield", Model.of(""));
+ form.add(textField);
+ add(form);
+ }
+
+ @Override
+ protected void onDetach()
+ {
+ super.onDetach();
+ lastQueryParameters = getRequest().getQueryParameters();
+ lastPostParameters = getRequest().getPostParameters();
+ }
+
+ /**
+ * @return IRequestParameters query parameters used on last request
+ */
+ public IRequestParameters getLastQueryParameters()
+ {
+ return lastQueryParameters;
+ }
+
+
+ /**
+ * @return IRequestParameters POST parameters used on last request
+ */
+ public IRequestParameters getLastPostParameters()
+ {
+ return lastPostParameters;
+ }
+
+ /**
+ * just an utility
+ */
+ public void printParameters()
+ {
+ for (String n : lastPostParameters.getParameterNames())
+ {
+ System.out.println("post: " + n + " : " + lastPostParameters.getParameterValues(n));
+ }
+ for (String n : lastQueryParameters.getParameterNames())
+ {
+ System.out.println("query: " + n + " : " + lastQueryParameters.getParameterValues(n));
+ }
+ }
+
+
+ public IResourceStream getMarkupResourceStream(MarkupContainer container,
+ Class<?> containerClass)
+ {
+ return new StringResourceStream(
+ "<html><body><form wicket:id=\"form\"><input wicket:id=\"textfield\"/></form></body></html>");
+ }
+}
Modified: wicket/trunk/wicket-core/src/test/java/org/apache/wicket/util/tester/WicketTesterTest.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/util/tester/WicketTesterTest.java?rev=1054961&r1=1054960&r2=1054961&view=diff
==============================================================================
--- wicket/trunk/wicket-core/src/test/java/org/apache/wicket/util/tester/WicketTesterTest.java (original)
+++ wicket/trunk/wicket-core/src/test/java/org/apache/wicket/util/tester/WicketTesterTest.java Tue Jan 4 10:26:59 2011
@@ -17,6 +17,7 @@
package org.apache.wicket.util.tester;
import java.util.Collection;
+import java.util.List;
import java.util.Locale;
import javax.servlet.http.Cookie;
@@ -25,6 +26,7 @@ import junit.framework.AssertionFailedEr
import junit.framework.TestCase;
import org.apache.wicket.Component;
+import org.apache.wicket.MockPageParametersAware;
import org.apache.wicket.MockPageWithLink;
import org.apache.wicket.MockPageWithOneComponent;
import org.apache.wicket.Page;
@@ -39,7 +41,15 @@ import org.apache.wicket.markup.html.for
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.markup.html.link.Link;
import org.apache.wicket.model.IModel;
+import org.apache.wicket.request.IRequestHandler;
+import org.apache.wicket.request.IRequestParameters;
+import org.apache.wicket.request.Url;
+import org.apache.wicket.request.handler.BookmarkablePageRequestHandler;
+import org.apache.wicket.request.handler.IPageProvider;
+import org.apache.wicket.request.handler.PageProvider;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.apache.wicket.request.resource.PackageResource.PackageResourceBlockedException;
+import org.apache.wicket.util.string.StringValue;
import org.apache.wicket.util.tester.MockPageParameterPage.MockInnerClassPage;
import org.apache.wicket.util.tester.MockPageWithFormAndAjaxFormSubmitBehavior.Pojo;
import org.apache.wicket.util.tester.apps_1.Book;
@@ -710,6 +720,108 @@ public class WicketTesterTest extends Te
}
/**
+ * Asserting that parameters set by user in request make part of the processed request
+ * parameters
+ */
+ public void testSetQueryParameter()
+ {
+ tester.getRequest().setParameter("p1", "v1");
+
+ tester.startPage(MockPageParametersAware.class);
+
+ MockPageParametersAware page = tester.getLastRenderedPage();
+ assertEquals("v1", page.getLastQueryParameters().getParameterValue("p1").toString());
+ }
+
+ /**
+ * Asserting that parameters set in request get processed, even if the request URL already has
+ * query parameters
+ */
+ public void testSetQueryParameterWhenRequestHasAnQueryUrl()
+ {
+ PageParameters parameters = new PageParameters();
+ parameters.set("q_1", "q_1_value");
+ IPageProvider testPageProvider = new PageProvider(MockPageParametersAware.class, parameters);
+ IRequestHandler pageRequestHandler = new BookmarkablePageRequestHandler(testPageProvider);
+ Url url = tester.getApplication().getRootRequestMapper().mapHandler(pageRequestHandler);
+ tester.getRequest().setParameter("q_2", "q_2_value");
+ tester.getRequest().setUrl(url);
+
+ tester.processRequest();
+
+ MockPageParametersAware page = tester.getLastRenderedPage();
+ assertEquals("q_1_value", page.getLastQueryParameters().getParameterValue("q_1").toString());
+ assertEquals("q_2_value", page.getLastQueryParameters().getParameterValue("q_2").toString());
+ }
+
+ /**
+ * Asserting that multiple parameters added in request and PageParameters get processed
+ */
+ public void testSetMultiValueQueryParameter()
+ {
+ PageParameters parameters = new PageParameters();
+ parameters.add("q_1", "q_1_value_1");
+ parameters.add("q_1", "q_1_value_2");
+ IPageProvider testPageProvider = new PageProvider(MockPageParametersAware.class, parameters);
+ IRequestHandler pageRequestHandler = new BookmarkablePageRequestHandler(testPageProvider);
+ Url url = tester.getApplication().getRootRequestMapper().mapHandler(pageRequestHandler);
+ tester.getRequest().addParameter("q_2", "q_2_value_1");
+ tester.getRequest().addParameter("q_2", "q_2_value_2");
+ tester.getRequest().setUrl(url);
+
+ tester.processRequest();
+
+ MockPageParametersAware page = tester.getLastRenderedPage();
+ IRequestParameters lastQueryParameter = page.getLastQueryParameters();
+ List<StringValue> q1ParameterValues = lastQueryParameter.getParameterValues("q_1");
+ assertTrue(q1ParameterValues.contains(StringValue.valueOf("q_1_value_1")));
+ assertTrue(q1ParameterValues.contains(StringValue.valueOf("q_1_value_2")));
+ List<StringValue> q2ParameterValues = lastQueryParameter.getParameterValues("q_2");
+ assertTrue(q2ParameterValues.contains(StringValue.valueOf("q_2_value_1")));
+ assertTrue(q2ParameterValues.contains(StringValue.valueOf("q_2_value_2")));
+ }
+
+ /**
+ * Asserting the parameters set by user in request get processed when submitting a form
+ */
+ public void testParametersOnFormSubmit()
+ {
+ tester.startPage(MockPageParametersAware.class);
+
+ FormTester formTester = tester.newFormTester("form");
+ formTester.setValue("textfield", "v1");
+ tester.getRequest().getPostParameters().setParameterValue("p_1", "p_1_value");
+ tester.getRequest().setParameter("q_1", "q_1_value");
+
+ formTester.submit();
+
+ MockPageParametersAware page = tester.getLastRenderedPage();
+ assertEquals("v1", page.getLastPostParameters().getParameterValue("textfield").toString());
+ assertEquals("p_1_value", page.getLastPostParameters().getParameterValue("p_1").toString());
+ assertEquals("q_1_value", page.getLastQueryParameters().getParameterValue("q_1").toString());
+ }
+
+ /**
+ * Asserting the parameters set by user on request get processed when submitting a form
+ */
+ public void testMultiValueParametersOnFormSubmit()
+ {
+ tester.startPage(MockPageParametersAware.class);
+
+ FormTester formTester = tester.newFormTester("form");
+ formTester.setValue("textfield", "v1");
+ tester.getRequest().getPostParameters().setParameterValue("p_1", "p_1_value");
+ tester.getRequest().setParameter("q_1", "q_1_value");
+
+ formTester.submit();
+
+ MockPageParametersAware page = tester.getLastRenderedPage();
+ assertEquals("v1", page.getLastPostParameters().getParameterValue("textfield").toString());
+ assertEquals("p_1_value", page.getLastPostParameters().getParameterValue("p_1").toString());
+ assertEquals("q_1_value", page.getLastQueryParameters().getParameterValue("q_1").toString());
+ }
+
+ /**
* Test that clickLink on a ResourceLink with a ResourceReference on it works.
*
* <p>
Modified: wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/string/StringValue.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/string/StringValue.java?rev=1054961&r1=1054960&r2=1054961&view=diff
==============================================================================
--- wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/string/StringValue.java (original)
+++ wicket/trunk/wicket-util/src/main/java/org/apache/wicket/util/string/StringValue.java Tue Jan 4 10:26:59 2011
@@ -23,6 +23,7 @@ import java.text.ParseException;
import java.util.Locale;
import org.apache.wicket.IClusterable;
+import org.apache.wicket.util.lang.Objects;
import org.apache.wicket.util.time.Duration;
import org.apache.wicket.util.time.Time;
@@ -751,4 +752,24 @@ public class StringValue implements IClu
return Strings.isEmpty(text);
}
+ @Override
+ public int hashCode()
+ {
+ return Objects.hashCode(locale, text);
+ }
+
+ @Override
+ public boolean equals(Object obj)
+ {
+ if (obj instanceof StringValue)
+ {
+ StringValue stringValue = (StringValue)obj;
+ return Objects.isEqual(text, stringValue.text) &&
+ Objects.isEqual(locale, stringValue.locale);
+ }
+ else
+ {
+ return false;
+ }
+ }
}