Hi,
    sorry for the late response. Should I file a bug for this?
Thanks,
    Giovanni
Il 11/07/12 15.13, Giovanni Cuccu ha scritto:
Hi Martin,
     I did the change you suggested but the test fails with esame error:

junit.framework.AssertionFailedError: expect no error message, but contains
   Field 'combo1' is required.

Thanks,
     Giovanni
Il 11/07/12 09.23, Martin Grigorov ha scritto:
Hi,

Try with:

tester.getRequest().setParameter("form:combo1", "0");
tester.executeAjaxEvent("form:combo1", "onchange");

On Tue, Jul 10, 2012 at 10:10 AM, Giovanni Cuccu
<giovanni.cu...@cup2000.it> wrote:
Hi,
     can someone give me an hint on this?
I tried to explain my problem providing a complete example and explaining
what I was trying to achieve.
I'd like to know if there is a specific reason of getting no answer so I can
change something on my side the next time I need to write to the list.
Thanks,
     Giovanni
Il 05/07/12 08.10, Giovanni Cuccu ha scritto:

Hi all,
     I'm trying to test a wicket 1.5.7 application and I'm hitting a
strange (at least for me) issue.
I have two dropdowns (combo 1 and combo2) and when I select one value
from combo1 I fire an AjaxUpdateBehavior on onchange event which selects
a value on combo2.
If I use the application everything is working as expected but If I try
to simulate the application with wicket tester I come into trouble.
Basically the test code is the following one:

WicketTester tester= new WicketTester(new WicketApplication());
         tester.startPage(TestAjaxDropDown.class);
         FormTester formTester=tester.newFormTester("form");
         formTester.select("combo1", 0);
         tester.executeAjaxEvent("form:combo1", "onchange");
         formTester.submit();
         tester.assertNoErrorMessage();

what I got is that after firing the onchange event combo1 gets a null
value as object model and this does not happen when I use a browser. If
I do not fire the event the application reports that combo2 has no
element selected.
Am I  missing something or is it a bug?

Grazie,
       Giovanni

P.S. I built a simple test case that I insert here

main page class

package com.sg2net.test;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.form.ChoiceRenderer;
import org.apache.wicket.markup.html.form.DropDownChoice;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.panel.FeedbackPanel;
import org.apache.wicket.model.PropertyModel;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


public class TestAjaxDropDown extends WebPage {

     private static final Logger
logger=LoggerFactory.getLogger(TestAjaxDropDown.class.getName());

     public TestAjaxDropDown() {
         add(new FeedbackPanel("feedback"));
         add(new TestAjaxDropDownFrom("form"));
     }

     private class DomainObject1 implements Serializable {
         public DomainObject1(long id, String description) {
             super();
             this.id = id;
             this.description = description;
         }
         private static final long serialVersionUID = 1L;
         private long id;
         private String description;

         public long getId() {
             return id;
         }
         public void setId(long id) {
             this.id = id;
         }
         public String getDescription() {
             return description;
         }
         public void setDescription(String description) {
             this.description = description;
         }
         @Override
         public int hashCode() {
             final int prime = 31;
             int result = 1;
             result = prime * result + getOuterType().hashCode();
             result = prime * result + (int) (id ^ (id >>> 32));
             return result;
         }
         @Override
         public boolean equals(Object obj) {
             if (this == obj)
                 return true;
             if (obj == null)
                 return false;
             if (getClass() != obj.getClass())
                 return false;
             DomainObject1 other = (DomainObject1) obj;
             if (!getOuterType().equals(other.getOuterType()))
                 return false;
             if (id != other.id)
                 return false;
             return true;
         }
         private TestAjaxDropDown getOuterType() {
             return TestAjaxDropDown.this;
         }

     }

     private class DomainObject2 implements Serializable {
         public DomainObject2(long id, String description) {
             super();
             this.id = id;
             this.description = description;
         }
         private static final long serialVersionUID = 1L;
         private long id;
         private String description;

         public long getId() {
             return id;
         }
         public void setId(long id) {
             this.id = id;
         }
         public String getDescription() {
             return description;
         }
         public void setDescription(String description) {
             this.description = description;
         }
         @Override
         public int hashCode() {
             final int prime = 31;
             int result = 1;
             result = prime * result + getOuterType().hashCode();
             result = prime * result + (int) (id ^ (id >>> 32));
             return result;
         }
         @Override
         public boolean equals(Object obj) {
             if (this == obj)
                 return true;
             if (obj == null)
                 return false;
             if (getClass() != obj.getClass())
                 return false;
             DomainObject2 other = (DomainObject2) obj;
             if (!getOuterType().equals(other.getOuterType()))
                 return false;
             if (id != other.id)
                 return false;
             return true;
         }
         private TestAjaxDropDown getOuterType() {
             return TestAjaxDropDown.this;
         }

     }

     private static final long serialVersionUID = 1L;

     private class TestAjaxDropDownFrom extends Form<Void> {

         private static final long serialVersionUID = 1L;
         private DomainObject1 domainObject1;
         private DomainObject2 domainObject2;
         private DropDownChoice<DomainObject2> secondCombo;

         public TestAjaxDropDownFrom(String id) {
             super(id);
             List<DomainObject1> choicesForCombo1= new
ArrayList<DomainObject1>();
             choicesForCombo1.add(new DomainObject1(1L,"uno"));
             choicesForCombo1.add(new DomainObject1(2L,"due"));
             choicesForCombo1.add(new DomainObject1(3L,"tre"));
             DropDownChoice<DomainObject1> firstCombo= new
DropDownChoice<DomainObject1>("combo1",
                     new
PropertyModel<DomainObject1>(this,"domainObject1"),choicesForCombo1,
                     new ChoiceRenderer<DomainObject1>("description",
"id"));
             firstCombo.setRequired(true);
             firstCombo.setNullValid(true);
             firstCombo.add(new AjaxUpdateBehavior("onchange"));
             add(firstCombo);

             List<DomainObject2> choicesForCombo2= new
ArrayList<DomainObject2>();
             choicesForCombo2.add(new DomainObject2(10L,"unozero"));
             choicesForCombo2.add(new DomainObject2(20L,"duezero"));
             choicesForCombo2.add(new DomainObject2(30L,"trezero"));
             secondCombo= new DropDownChoice<DomainObject2>("combo2",
                     new
PropertyModel<DomainObject2>(this,"domainObject2"),choicesForCombo2,
                     new ChoiceRenderer<DomainObject2>("description",
"id"));
             secondCombo.setOutputMarkupId(true);
             secondCombo.setNullValid(true);
             add(secondCombo);

         }

         @Override
         public void onSubmit() {
             if (domainObject2==null) {
                 error("Domain object2 is null");
             } else {
                 info("OK");
             }
         }

         private class AjaxUpdateBehavior extends
AjaxFormComponentUpdatingBehavior {


             private static final long serialVersionUID = 1L;

             public AjaxUpdateBehavior(String event) {
                 super(event);
             }

             @Override
             protected void onUpdate(AjaxRequestTarget target) {
                 if (domainObject1!=null) {
                     logger.warn("domainObject1.getId()=" +
domainObject1.getId());
                     if (domainObject1.getId()==1L) {
domainObject2=new DomainObject2(10L,"unozero");
logger.warn("domainObject2.getId()=" +
domainObject2.getId());
                     }
                     if (domainObject1.getId()==2L) {
domainObject2=new DomainObject2(20L,"duezero");
logger.warn("domainObject2.getId()=" +
domainObject2.getId());
                     }
                     if (domainObject1.getId()==3L) {
domainObject2=new DomainObject2(30L,"trezero");
logger.warn("domainObject2.getId()=" +
domainObject2.getId());
                     }
                     secondCombo.modelChanged();
                     target.add(secondCombo);
                 } else {
                     logger.warn("domainObject1==null");
                 }
             }
         }

     }
}

test class

package com.sg2net.test;

import org.apache.wicket.util.tester.FormTester;
import org.apache.wicket.util.tester.WicketTester;
import org.testng.annotations.Test;

public class WicketTesterAjaxDropDown {
     @Test
     public void testAjaxDropDown() {
WicketTester tester= new WicketTester(new WicketApplication());
         tester.startPage(TestAjaxDropDown.class);
         FormTester formTester=tester.newFormTester("form");
         formTester.select("combo1", 0);
         tester.executeAjaxEvent("form:combo1", "onchange");
         //formTester.select("combo1", 0);
         formTester.submit();
         tester.assertNoErrorMessage();
     }
}

wicket application class

package com.sg2net.test;
import org.apache.wicket.Page;
import org.apache.wicket.protocol.http.WebApplication;

import com.sg2net.test.TestAjaxDropDown;


public class WicketApplication extends WebApplication {

     @Override
     public Class<? extends Page> getHomePage() {

         return TestAjaxDropDown.class;
     }

     protected void init() {
getMarkupSettings().setDefaultMarkupEncoding("UTF-8");
     }

}



--
Giovanni Cuccu
Responsabile area sviluppo - CUP 2000 Spa
Via del Borgo di S. Pietro, 90/c - 40126 Bologna
e-mail: giovanni.cuccu _at_ cup2000.it




---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
For additional commands, e-mail: users-h...@wicket.apache.org





--
Giovanni Cuccu
Responsabile area sviluppo - CUP 2000 Spa
Via del Borgo di S. Pietro, 90/c - 40126 Bologna
e-mail: giovanni.cuccu _at_ cup2000.it


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
For additional commands, e-mail: users-h...@wicket.apache.org

Reply via email to