Hi,
  here it is
https://issues.apache.org/jira/browse/WICKET-4670
Thanks,
      Giovanni

Il 24/07/12 09.22, Martin Grigorov ha scritto:
Hi,

File a ticket with a test case.

On Tue, Jul 24, 2012 at 9:34 AM, Giovanni Cuccu
<[email protected]> wrote:
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
<[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]


--
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]




--
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]

Reply via email to