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
<[email protected]> 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: [email protected]
> For additional commands, e-mail: [email protected]
>
--
Martin Grigorov
jWeekend
Training, Consulting, Development
http://jWeekend.com
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]