You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by iv...@apache.org on 2011/09/17 20:54:12 UTC

svn commit: r1172048 - in /wicket/trunk/wicket-core/src: main/java/org/apache/wicket/util/tester/BaseWicketTester.java main/java/org/apache/wicket/util/tester/FormTester.java test/java/org/apache/wicket/util/tester/FormTesterTest.java

Author: ivaynberg
Date: Sat Sep 17 18:54:11 2011
New Revision: 1172048

URL: http://svn.apache.org/viewvc?rev=1172048&view=rev
Log:

Issue: WICKET-3977

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

Modified: wicket/trunk/wicket-core/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java?rev=1172048&r1=1172047&r2=1172048&view=diff
==============================================================================
--- wicket/trunk/wicket-core/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java (original)
+++ wicket/trunk/wicket-core/src/main/java/org/apache/wicket/util/tester/BaseWicketTester.java Sat Sep 17 18:54:11 2011
@@ -989,6 +989,28 @@ public class BaseWicketTester
 	}
 
 	/**
+	 * Simulates invoking a listener on a component. As opposed to the
+	 * {@link #executeListener(Component)} method, current request/response objects will be used
+	 * 
+	 * After the listener interface is invoked the page containing the component will be rendered
+	 * (with an optional redirect - depending on {@link RenderStrategy}).
+	 * 
+	 * @param component
+	 * @param listener
+	 */
+	public void invokeListener(final Component component, final RequestListenerInterface listener)
+	{
+		Args.notNull(component, "component");
+
+		// there are two ways to do this. RequestCycle could be forced to call the handler
+		// directly but constructing and parsing the URL increases the chance of triggering bugs
+		IRequestHandler handler = new ListenerInterfaceRequestHandler(new PageAndComponentProvider(
+			component.getPage(), component), listener);
+
+		processRequest(handler);
+	}
+
+	/**
 	 * Builds and processes a request suitable for invoking a listener. The <code>Component</code>
 	 * must implement any of the known <code>IListener</code> interfaces.
 	 * 

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=1172048&r1=1172047&r2=1172048&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 Sat Sep 17 18:54:11 2011
@@ -123,12 +123,7 @@ public class FormTester
 		protected abstract void assignValueToFormComponent(FormComponent<?> formComponent,
 			String value);
 
-		/**
-		 * Selects a given index in a selectable <code>FormComponent</code>.
-		 * 
-		 * @param index
-		 */
-		protected final void doSelect(final int index)
+		public String getChoiceValueForIndex(int index)
 		{
 			if (formComponent instanceof RadioGroup)
 			{
@@ -137,9 +132,9 @@ public class FormTester
 				if (foundRadio == null)
 				{
 					fail("RadioGroup " + formComponent.getPath() + " does not have index:" + index);
-					return;
+					return null;
 				}
-				assignValueToFormComponent(formComponent, foundRadio.getValue());
+				return foundRadio.getValue();
 			}
 			else if (formComponent instanceof CheckGroup)
 			{
@@ -148,10 +143,10 @@ public class FormTester
 				if (foundCheck == null)
 				{
 					fail("CheckGroup " + formComponent.getPath() + " does not have index:" + index);
-					return;
+					return null;
 				}
 
-				assignValueToFormComponent(formComponent, foundCheck.getValue());
+				return foundCheck.getValue();
 			}
 			else
 			{
@@ -159,12 +154,25 @@ public class FormTester
 				if (idValue == null)
 				{
 					fail(formComponent.getPath() + " is not a selectable Component.");
+					return null;
 				}
 				else
 				{
-					assignValueToFormComponent(formComponent, idValue);
+					return idValue;
 				}
 			}
+
+		}
+
+		/**
+		 * Selects a given index in a selectable <code>FormComponent</code>.
+		 * 
+		 * @param index
+		 */
+		protected final void doSelect(final int index)
+		{
+			String value = getChoiceValueForIndex(index);
+			assignValueToFormComponent(formComponent, value);
 		}
 
 		/**
@@ -546,7 +554,7 @@ public class FormTester
 				boolean wantOnSelectionChangedNotifications = (Boolean)wantOnSelectionChangedNotificationsMethod.invoke(component);
 				if (wantOnSelectionChangedNotifications)
 				{
-					tester.executeListener(component, IOnChangeListener.INTERFACE);
+					tester.invokeListener(component, IOnChangeListener.INTERFACE);
 				}
 			}
 			catch (final Exception x)

Modified: wicket/trunk/wicket-core/src/test/java/org/apache/wicket/util/tester/FormTesterTest.java
URL: http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/util/tester/FormTesterTest.java?rev=1172048&r1=1172047&r2=1172048&view=diff
==============================================================================
--- wicket/trunk/wicket-core/src/test/java/org/apache/wicket/util/tester/FormTesterTest.java (original)
+++ wicket/trunk/wicket-core/src/test/java/org/apache/wicket/util/tester/FormTesterTest.java Sat Sep 17 18:54:11 2011
@@ -16,15 +16,25 @@
  */
 package org.apache.wicket.util.tester;
 
+import java.util.Arrays;
+import java.util.List;
 import java.util.Locale;
 
 import org.apache.wicket.Component;
+import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.Session;
 import org.apache.wicket.WicketTestCase;
+import org.apache.wicket.markup.IMarkupResourceStreamProvider;
+import org.apache.wicket.markup.html.WebPage;
+import org.apache.wicket.markup.html.form.DropDownChoice;
+import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.markup.html.form.upload.FileUpload;
+import org.apache.wicket.model.Model;
 import org.apache.wicket.request.handler.ListenerInvocationNotAllowedException;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 import org.apache.wicket.util.file.File;
+import org.apache.wicket.util.resource.IResourceStream;
+import org.apache.wicket.util.resource.StringResourceStream;
 import org.apache.wicket.util.tester.MockFormFileUploadPage.MockDomainObjectFileUpload;
 import org.apache.wicket.util.tester.MockFormPage.MockDomainObject;
 
@@ -238,7 +248,52 @@ public class FormTesterTest extends Wick
 		}
 		catch (ListenerInvocationNotAllowedException expected)
 		{
-			;
+			// expected
 		}
 	}
+
+	public void testWantOnChangeSelectionNotification()
+	{
+		class TestPage extends WebPage implements IMarkupResourceStreamProvider
+		{
+			private String selection;
+
+			public TestPage()
+			{
+				Form<Object> form = new Form<Object>("form");
+				add(form);
+				List<String> choices = Arrays.asList(new String[] { "opt 1", "opt 2" });
+				form.add(new DropDownChoice<String>("selector", Model.of(""), choices)
+				{
+					@Override
+					protected boolean wantOnSelectionChangedNotifications()
+					{
+						return true;
+					}
+
+					@Override
+					protected void onSelectionChanged(final String newSelection)
+					{
+						selection = newSelection;
+					}
+				});
+			}
+
+			public IResourceStream getMarkupResourceStream(MarkupContainer container,
+				Class<?> containerClass)
+			{
+				return new StringResourceStream(
+					"<html><body><form wicket:id='form'><select wicket:id='selector'></select></form></body></html>");
+			}
+		}
+
+		TestPage page = new TestPage();
+		tester.startPage(page);
+
+		final FormTester form = tester.newFormTester("form");
+		form.select("selector", 0);
+
+		// Fails, because of null value passed to onSelectionChanged.
+		assertEquals("opt 1", page.selection);
+	}
 }