Author: jbq
Date: Mon Jun 25 13:45:31 2007
New Revision: 550598
URL: http://svn.apache.org/viewvc?view=rev&rev=550598
Log:
WICKET-254 Allow to set field values before submitting a form with Ajax in
WicketTester
Added:
incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/util/tester/MockAjaxFormPage.html
(with props)
incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/util/tester/MockAjaxFormPage.java
(with props)
Modified:
incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/Component.java
incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/MockWebApplication.java
incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java
incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/util/tester/MockFormPage.html
incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/util/tester/MockFormPage.java
incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/util/tester/WicketTesterTest.java
Modified:
incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/Component.java
URL:
http://svn.apache.org/viewvc/incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/Component.java?view=diff&rev=550598&r1=550597&r2=550598
==============================================================================
---
incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/Component.java
(original)
+++
incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/Component.java
Mon Jun 25 13:45:31 2007
@@ -1410,7 +1410,13 @@
*/
public final Request getRequest()
{
- return getRequestCycle().getRequest();
+ RequestCycle requestCycle = getRequestCycle();
+ if (requestCycle == null)
+ {
+ // Happens often with WicketTester when one forgets to
call createRequestCycle()
+ throw new WicketRuntimeException("No RequestCycle is
currently set!");
+ }
+ return requestCycle.getRequest();
}
/**
Modified:
incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/MockWebApplication.java
URL:
http://svn.apache.org/viewvc/incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/MockWebApplication.java?view=diff&rev=550598&r1=550597&r2=550598
==============================================================================
---
incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/MockWebApplication.java
(original)
+++
incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/MockWebApplication.java
Mon Jun 25 13:45:31 2007
@@ -30,6 +30,7 @@
import org.apache.wicket.IRequestTarget;
import org.apache.wicket.Page;
import org.apache.wicket.PageParameters;
+import org.apache.wicket.RequestCycle;
import org.apache.wicket.Session;
import org.apache.wicket.markup.html.pages.ExceptionErrorPage;
import
org.apache.wicket.request.target.component.BookmarkablePageRequestTarget;
@@ -499,7 +500,7 @@
* the necessary wicket request, response and session objects. The
request
* and response objects can be accessed and initialised at this point.
*/
- public void setupRequestAndResponse()
+ public WebRequestCycle setupRequestAndResponse()
{
servletRequest.initialize();
servletResponse.initialize();
@@ -507,9 +508,10 @@
parametersForNextRequest.clear();
this.wicketRequest =
this.application.newWebRequest(servletRequest);
this.wicketResponse =
this.application.newWebResponse(servletResponse);
- createRequestCycle();
+ WebRequestCycle requestCycle = createRequestCycle();
this.application.getSessionStore().bind(wicketRequest,
wicketSession);
wicketResponse.setAjax(wicketRequest.isAjax());
+ return requestCycle;
}
/**
Modified:
incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java
URL:
http://svn.apache.org/viewvc/incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java?view=diff&rev=550598&r1=550597&r2=550598
==============================================================================
---
incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java
(original)
+++
incubator/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java
Mon Jun 25 13:45:31 2007
@@ -1067,8 +1067,12 @@
+ " which matches the event: " +
event.toString();
notNull(failMessage, ajaxEventBehavior);
- setupRequestAndResponse();
- RequestCycle requestCycle = createRequestCycle();
+ // initialize the request only if needed to allow the user to
pass request parameters, see WICKET-254
+ WebRequestCycle requestCycle;
+ if (RequestCycle.get() == null)
+ requestCycle = setupRequestAndResponse();
+ else
+ requestCycle = (WebRequestCycle)RequestCycle.get();
// If the event is an FormSubmitBehavior then also "submit" the
form
if (ajaxEventBehavior instanceof AjaxFormSubmitBehavior)
@@ -1080,7 +1084,7 @@
ajaxEventBehavior.onRequest();
// process the request target
- requestCycle.getRequestTarget().respond(requestCycle);
+ processRequestCycle(requestCycle);
}
/**
@@ -1146,7 +1150,9 @@
String name =
formComponent.getInputName();
String value = formComponent.getValue();
- getServletRequest().setParameter(name,
value);
+ // Set request parameter with the field
value, but do not modify an existing request parameter explicitly set using
FormTester.setValue()
+ if
(getServletRequest().getParameterMap().get(name) == null)
+
getServletRequest().setParameter(name, value);
}
}
});
Added:
incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/util/tester/MockAjaxFormPage.html
URL:
http://svn.apache.org/viewvc/incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/util/tester/MockAjaxFormPage.html?view=auto&rev=550598
==============================================================================
---
incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/util/tester/MockAjaxFormPage.html
(added)
+++
incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/util/tester/MockAjaxFormPage.html
Mon Jun 25 13:45:31 2007
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:wicket="http://www.wicketframework.org">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<title>Mock Ajax Form</title>
+</head>
+<body>
+ <form wicket:id="form">
+ <input wicket:id="text" type="text"/>
+ <input wicket:id="submit" type="submit"/>
+ </form>
+</body>
+</html>
Propchange:
incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/util/tester/MockAjaxFormPage.html
------------------------------------------------------------------------------
svn:eol-style = native
Added:
incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/util/tester/MockAjaxFormPage.java
URL:
http://svn.apache.org/viewvc/incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/util/tester/MockAjaxFormPage.java?view=auto&rev=550598
==============================================================================
---
incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/util/tester/MockAjaxFormPage.java
(added)
+++
incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/util/tester/MockAjaxFormPage.java
Mon Jun 25 13:45:31 2007
@@ -0,0 +1,88 @@
+/*
+ * 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 java.io.Serializable;
+
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.form.AjaxFormValidatingBehavior;
+import org.apache.wicket.markup.html.WebPage;
+import org.apache.wicket.markup.html.form.Button;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.form.TextField;
+import org.apache.wicket.model.CompoundPropertyModel;
+import org.apache.wicket.validation.validator.StringValidator;
+
+/**
+ * Web page that contains a form with ajax functionality.
+ *
+ * @author Kare Nuorteva
+ */
+public class MockAjaxFormPage extends WebPage
+{
+ private static final class MockDomainObject implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ private String text;
+
+ /**
+ * Gets text.
+ * @return text Text entered in the text field
+ */
+ public String getText()
+ {
+ return text;
+ }
+
+ /**
+ * Sets text.
+ * @param text New value for the text field
+ */
+ public void setText(String text)
+ {
+ this.text = text;
+ }
+ }
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * Construct.
+ */
+ public MockAjaxFormPage() {
+ Form form = new Form("form", new CompoundPropertyModel(new
MockDomainObject()));
+ add(form);
+ final Button submit = new Button("submit");
+ submit.setOutputMarkupId(true);
+ submit.setEnabled(false);
+ form.add(submit);
+ final TextField text = new TextField("text");
+ text.setRequired(true);
+ text.add(StringValidator.minimumLength(4));
+ text.add(new AjaxFormValidatingBehavior(form, "onkeyup") {
+ private static final long serialVersionUID = 1L;
+
+ protected void onEvent(AjaxRequestTarget target)
+ {
+ text.validate();
+ submit.setEnabled(text.isValid());
+ target.addComponent(submit);
+ }
+ });
+ form.add(text);
+ }
+}
Propchange:
incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/util/tester/MockAjaxFormPage.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/util/tester/MockAjaxFormPage.java
------------------------------------------------------------------------------
svn:keywords = Id
Modified:
incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/util/tester/MockFormPage.html
URL:
http://svn.apache.org/viewvc/incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/util/tester/MockFormPage.html?view=diff&rev=550598&r1=550597&r2=550598
==============================================================================
---
incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/util/tester/MockFormPage.html
(original)
+++
incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/util/tester/MockFormPage.html
Mon Jun 25 13:45:31 2007
@@ -10,6 +10,7 @@
<input type="text" wicket:id="text" />
<input type="checkbox" wicket:id="checkbox" />
<textarea wicket:id="textarea"></textarea>
+<input wicket:id="submit" type="submit"/>
</form>
</body>
</html>
Modified:
incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/util/tester/MockFormPage.java
URL:
http://svn.apache.org/viewvc/incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/util/tester/MockFormPage.java?view=diff&rev=550598&r1=550597&r2=550598
==============================================================================
---
incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/util/tester/MockFormPage.java
(original)
+++
incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/util/tester/MockFormPage.java
Mon Jun 25 13:45:31 2007
@@ -17,6 +17,7 @@
package org.apache.wicket.util.tester;
import org.apache.wicket.markup.html.WebPage;
+import org.apache.wicket.markup.html.form.Button;
import org.apache.wicket.markup.html.form.CheckBox;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.TextArea;
@@ -104,6 +105,7 @@
form.add(new TextField("text"));
form.add(new CheckBox("checkbox"));
form.add(new TextArea("textarea"));
+ form.add(new Button("submit"));
}
/**
Modified:
incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/util/tester/WicketTesterTest.java
URL:
http://svn.apache.org/viewvc/incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/util/tester/WicketTesterTest.java?view=diff&rev=550598&r1=550597&r2=550598
==============================================================================
---
incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/util/tester/WicketTesterTest.java
(original)
+++
incubator/wicket/trunk/jdk-1.4/wicket/src/test/java/org/apache/wicket/util/tester/WicketTesterTest.java
Mon Jun 25 13:45:31 2007
@@ -30,6 +30,7 @@
import org.apache.wicket.ajax.markup.html.AjaxLink;
import
org.apache.wicket.markup.html.PackageResource.PackageResourceBlockedException;
import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.form.Button;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.markup.html.link.Link;
import org.apache.wicket.request.target.coding.IRequestTargetUrlCodingStrategy;
@@ -370,5 +371,55 @@
IRequestTargetUrlCodingStrategy getRequestCodingStrategy() {
String relativePath =
tester.getApplication().getWicketFilter().getRelativePath(tester.getServletRequest());
return
tester.getApplication().getRequestCycleProcessor().getRequestCodingStrategy().urlCodingStrategyForPath(relativePath);
+ }
+
+ /**
+ * Toggle submit button to disabled state.
+ */
+ public void testToggleButtonEnabledState()
+ {
+ tester.startPage(MockFormPage.class);
+ Component submit =
tester.getComponentFromLastRenderedPage("form:submit");
+ assertTrue(submit.isEnabled());
+ tester.createRequestCycle();
+ submit.setEnabled(false);
+ assertFalse(submit.isEnabled());
+ }
+
+ /**
+ * Toggle submit button to enabled when text field validates.
+ */
+ public void testToggleAjaxFormButton()
+ {
+ tester.startPage(new MockAjaxFormPage());
+ Button submit = getSubmitButton();
+ assertFalse(submit.isEnabled());
+ FormTester form = tester.newFormTester("form");
+
+ tester.setupRequestAndResponse();
+ form.setValue("text", "XX");
+ setTextFieldAndAssertSubmit(false);
+ Session.get().cleanupFeedbackMessages();
+
+ tester.setupRequestAndResponse();
+ form.setValue("text", "XXXYYYXXX");
+ setTextFieldAndAssertSubmit(true);
+
+ tester.setupRequestAndResponse();
+ form.setValue("text", "");
+ setTextFieldAndAssertSubmit(false);
+ }
+
+ private void setTextFieldAndAssertSubmit(boolean expected)
+ {
+ tester.executeAjaxEvent("form:text", "onkeyup");
+ Button submit = getSubmitButton();
+ System.out.println(Session.get().getFeedbackMessages());
+ assertEquals(expected, submit.isEnabled());
+ }
+
+ private Button getSubmitButton()
+ {
+ return (Button)
tester.getComponentFromLastRenderedPage("form:submit");
}
}