Author: mgrigorov Date: Fri May 27 12:21:18 2011 New Revision: 1128275 URL: http://svn.apache.org/viewvc?rev=1128275&view=rev Log: WICKET-3711 FormTester doesn't treat SubmitLink and AjaxSubmitLink correctly
Added: wicket/branches/wicket-1.4.x/wicket/src/test/java/org/apache/wicket/util/tester/FormTesterSubmitLinkTest$TestPage.html wicket/branches/wicket-1.4.x/wicket/src/test/java/org/apache/wicket/util/tester/FormTesterSubmitLinkTest.java Modified: wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/protocol/http/MockWebApplication.java wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/util/tester/FormTester.java Modified: wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/protocol/http/MockWebApplication.java URL: http://svn.apache.org/viewvc/wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/protocol/http/MockWebApplication.java?rev=1128275&r1=1128274&r2=1128275&view=diff ============================================================================== --- wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/protocol/http/MockWebApplication.java (original) +++ wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/protocol/http/MockWebApplication.java Fri May 27 12:21:18 2011 @@ -110,7 +110,7 @@ public class MockWebApplication private WebRequest wicketRequest; /** Parameters to be set on the next request. */ - private Map<String, String[]> parametersForNextRequest = new HashMap<String, String[]>(); + private Map<String, String[]> parametersForNextRequest; /** Response. */ private WebResponse wicketResponse; @@ -144,6 +144,7 @@ public class MockWebApplication */ public MockWebApplication(final WebApplication application, final String path) { + parametersForNextRequest = new HashMap<String, String[]>(); this.application = application; context = newServletContext(path); @@ -532,6 +533,8 @@ public class MockWebApplication } cycle.detach(); createRequestCycle(); + parametersForNextRequest.clear(); + servletRequest.getParameterMap().clear(); } finally { Modified: wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java URL: http://svn.apache.org/viewvc/wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java?rev=1128275&r1=1128274&r2=1128275&view=diff ============================================================================== --- wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java (original) +++ wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java Fri May 27 12:21:18 2011 @@ -1447,9 +1447,11 @@ public class BaseWicketTester extends Mo // Set request parameter with the field value, but do not modify an existing // request parameter explicitly set using FormTester.setValue() - if (requestParameters.containsKey(name) == false) + if (!getServletRequest().getParameterMap().containsKey(name) && + !getParametersForNextRequest().containsKey(name)) { - requestParameters.put(name, new String[] { value }); + getServletRequest().setParameter(name, value); + getParametersForNextRequest().put(name, new String[] { value }); } } } Modified: wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/util/tester/FormTester.java URL: http://svn.apache.org/viewvc/wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/util/tester/FormTester.java?rev=1128275&r1=1128274&r2=1128275&view=diff ============================================================================== --- wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/util/tester/FormTester.java (original) +++ wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/util/tester/FormTester.java Fri May 27 12:21:18 2011 @@ -831,6 +831,8 @@ public class FormTester */ private void setFormComponentValue(FormComponent<?> formComponent, String value) { + baseWicketTester.getParametersForNextRequest().put(formComponent.getInputName(), + new String[] { value }); baseWicketTester.getServletRequest().setParameter(formComponent.getInputName(), value); } Added: wicket/branches/wicket-1.4.x/wicket/src/test/java/org/apache/wicket/util/tester/FormTesterSubmitLinkTest$TestPage.html URL: http://svn.apache.org/viewvc/wicket/branches/wicket-1.4.x/wicket/src/test/java/org/apache/wicket/util/tester/FormTesterSubmitLinkTest%24TestPage.html?rev=1128275&view=auto ============================================================================== --- wicket/branches/wicket-1.4.x/wicket/src/test/java/org/apache/wicket/util/tester/FormTesterSubmitLinkTest$TestPage.html (added) +++ wicket/branches/wicket-1.4.x/wicket/src/test/java/org/apache/wicket/util/tester/FormTesterSubmitLinkTest$TestPage.html Fri May 27 12:21:18 2011 @@ -0,0 +1,15 @@ +<html xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd" > + <head> + <title>Wicket Quickstart Archetype Homepage</title> + </head> + <body> + <form wicket:id="form"> + <input type="text" wicket:id="text"/> + <a href="" wicket:id="submit">submit</a> + </form> + <form wicket:id="form2"> + <input type="text" wicket:id="text"/> + <a href="" wicket:id="submit">submit</a> + </form> + </body> +</html> Added: wicket/branches/wicket-1.4.x/wicket/src/test/java/org/apache/wicket/util/tester/FormTesterSubmitLinkTest.java URL: http://svn.apache.org/viewvc/wicket/branches/wicket-1.4.x/wicket/src/test/java/org/apache/wicket/util/tester/FormTesterSubmitLinkTest.java?rev=1128275&view=auto ============================================================================== --- wicket/branches/wicket-1.4.x/wicket/src/test/java/org/apache/wicket/util/tester/FormTesterSubmitLinkTest.java (added) +++ wicket/branches/wicket-1.4.x/wicket/src/test/java/org/apache/wicket/util/tester/FormTesterSubmitLinkTest.java Fri May 27 12:21:18 2011 @@ -0,0 +1,117 @@ +/* + * 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.util.tester; + +import junit.framework.TestCase; + +import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.ajax.markup.html.form.AjaxSubmitLink; +import org.apache.wicket.markup.html.WebPage; +import org.apache.wicket.markup.html.form.Form; +import org.apache.wicket.markup.html.form.SubmitLink; +import org.apache.wicket.markup.html.form.TextField; +import org.apache.wicket.model.Model; + +public class FormTesterSubmitLinkTest extends TestCase +{ + private WicketTester tester; + + @Override + protected void setUp() throws Exception + { + super.setUp(); + tester = new WicketTester(); + } + + /** + * this should work the same as regular submit + */ + public void testSubmitLink() throws Exception + { + tester.startPage(TestPage.class); + + FormTester form = tester.newFormTester("form"); + form.setValue("text", "some test text"); + form.submitLink("submit", false); + assertEquals("some test text", tester.getComponentFromLastRenderedPage("form:text") + .getDefaultModelObjectAsString()); + } + + public void testAjaxSubmitLink() throws Exception + { + tester.startPage(TestPage.class); + + FormTester form = tester.newFormTester("form2"); + form.setValue("text", "some test text"); + tester.clickLink("form2:submit", true); + assertEquals("some test text", tester.getComponentFromLastRenderedPage("form2:text") + .getDefaultModelObjectAsString()); + } + + public void testAjaxSubmitLinkMustNotLosePreviousInput() throws Exception + { + tester.startPage(TestPage.class); + + FormTester form = tester.newFormTester("form2"); + form.setValue("text", "some test text"); + tester.clickLink("form2:submit", true); + // click again for no-change resubmit. should still contain the same values now. + tester.clickLink("form2:submit", true); + assertEquals("some test text", tester.getComponentFromLastRenderedPage("form2:text") + .getDefaultModelObjectAsString()); + } + + public void testRegularSubmit() throws Exception + { + tester.startPage(TestPage.class); + + FormTester form = tester.newFormTester("form"); + form.setValue("text", "some test text"); + form.submit(); + assertEquals("some test text", tester.getComponentFromLastRenderedPage("form:text") + .getDefaultModelObjectAsString()); + } + + @Override + protected void tearDown() throws Exception + { + tester.destroy(); + super.tearDown(); + } + + public static class TestPage extends WebPage + { + public TestPage() + { + Form form = new Form("form"); + add(form); + form.add(new TextField<String>("text", Model.of(""), String.class)); + form.add(new SubmitLink("submit")); + Form form2 = new Form("form2"); + add(form2); + form2.add(new TextField<String>("text", Model.of(""), String.class)); + form2.add(new AjaxSubmitLink("submit") + { + @Override + protected void onSubmit(AjaxRequestTarget target, Form<?> form) + { + } + }); + } + } + +}