Author: mgrigorov
Date: Mon Dec 27 14:04:27 2010
New Revision: 1053071

URL: http://svn.apache.org/viewvc?rev=1053071&view=rev
Log:
WICKET-1721 FormTester doesnt support onSelectionChanged for RadioChoice
WICKET-1732 FormTester's DropDownChoice onSelectionChanged() behaviour doesn't 
reload page

Call #selectionChanged() for all form components which have 
#wantOnSelectionChangedNotifications()

Modified:
    
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/util/tester/FormTester.java

Modified: 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/util/tester/FormTester.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/util/tester/FormTester.java?rev=1053071&r1=1053070&r2=1053071&view=diff
==============================================================================
--- 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/util/tester/FormTester.java
 (original)
+++ 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/util/tester/FormTester.java
 Mon Dec 27 14:04:27 2010
@@ -35,6 +35,7 @@ import org.apache.wicket.markup.html.for
 import org.apache.wicket.markup.html.form.FormComponent;
 import org.apache.wicket.markup.html.form.IChoiceRenderer;
 import org.apache.wicket.markup.html.form.IFormSubmittingComponent;
+import org.apache.wicket.markup.html.form.IOnChangeListener;
 import org.apache.wicket.markup.html.form.ListMultipleChoice;
 import org.apache.wicket.markup.html.form.Radio;
 import org.apache.wicket.markup.html.form.RadioChoice;
@@ -79,7 +80,8 @@ public class FormTester
                        }
 
                        /**
-                        * @see 
org.apache.wicket.util.visit.IVisitor#component(Object, 
org.apache.wicket.util.visit.IVisit)
+                        * @see 
org.apache.wicket.util.visit.IVisitor#component(Object,
+                        *      org.apache.wicket.util.visit.IVisit)
                         */
                        public void component(final Component component, final 
IVisit<Component> visit)
                        {
@@ -302,7 +304,8 @@ public class FormTester
                        }
                        else
                        {
-                               fail("Selecting on the component:'" + 
formComponent.getPath() + "' is not supported.");
+                               fail("Selecting on the component:'" + 
formComponent.getPath() +
+                                       "' is not supported.");
                                return null;
                        }
                }
@@ -535,22 +538,30 @@ public class FormTester
 
                ChoiceSelector choiceSelector = 
choiceSelectorFactory.create(component);
                choiceSelector.doSelect(index);
-               if (component instanceof DropDownChoice)
+
+               try
                {
+                       Method wantOnSelectionChangedNotificationsMethod = 
component.getClass()
+                               
.getDeclaredMethod("wantOnSelectionChangedNotifications");
+
                        try
                        {
-                               Method 
wantOnSelectionChangedNotificationsMethod = 
DropDownChoice.class.getDeclaredMethod("wantOnSelectionChangedNotifications");
                                
wantOnSelectionChangedNotificationsMethod.setAccessible(true);
                                boolean wantOnSelectionChangedNotifications = 
(Boolean)wantOnSelectionChangedNotificationsMethod.invoke(component);
                                if (wantOnSelectionChangedNotifications)
                                {
-                                       
((DropDownChoice<?>)component).onSelectionChanged();
+                                       tester.executeListener(component, 
IOnChangeListener.INTERFACE);
                                }
                        }
-                       catch (Exception e)
+                       catch (final Exception x)
                        {
-                               throw new RuntimeException(e);
+                               throw new RuntimeException(x);
                        }
+
+               }
+               catch (final NoSuchMethodException ignored)
+               {
+                       // this form component has no auto page reload mechanism
                }
        }
 


Reply via email to