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);
+ }
}