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


Reply via email to