This is an automated email from the ASF dual-hosted git repository.
reiern70 pushed a commit to branch wicket-8.x
in repository https://gitbox.apache.org/repos/asf/wicket.git
The following commit(s) were added to refs/heads/wicket-8.x by this push:
new 401d352 [WICKET-6716] improve error reporting for AutoLabelResolver
401d352 is described below
commit 401d352eb78b5bcdd3828d1ad3210d8d57cc4596
Author: reiern70 <[email protected]>
AuthorDate: Wed Dec 4 19:07:20 2019 +0300
[WICKET-6716] improve error reporting for AutoLabelResolver
(cherry picked from commit 539bc95b697aac3daf8e6cccc244ca4600e90627)
---
.../wicket/markup/html/form/AutoLabelResolver.java | 4 +-
...LocatorTest$WrongLabelProviderLocatorPanel.html | 10 +++
.../form/AutoLabelLabelProviderLocatorTest.java | 71 ++++++++++++++++++++++
3 files changed, 83 insertions(+), 2 deletions(-)
diff --git
a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/AutoLabelResolver.java
b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/AutoLabelResolver.java
index ed2ccaa..b4aa42b 100644
---
a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/AutoLabelResolver.java
+++
b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/AutoLabelResolver.java
@@ -110,8 +110,8 @@ public class AutoLabelResolver implements IComponentResolver
if (!(component instanceof ILabelProvider))
{
- throw new WicketRuntimeException("Component pointed to
by wicket:for attribute '" + path +
- "' does not implement " +
ILabelProvider.class.getName());
+ throw new WicketRuntimeException("Component '" +
(component == null ? "null" : component.getClass().getName())
+ + "', pointed to by wicket:for
attribute '" + path + "', does not implement " +
ILabelProvider.class.getName());
}
if (!component.getOutputMarkupId())
diff --git
a/wicket-core/src/test/java/org/apache/wicket/markup/html/form/AutoLabelLabelProviderLocatorTest$WrongLabelProviderLocatorPanel.html
b/wicket-core/src/test/java/org/apache/wicket/markup/html/form/AutoLabelLabelProviderLocatorTest$WrongLabelProviderLocatorPanel.html
new file mode 100644
index 0000000..ae8565e
--- /dev/null
+++
b/wicket-core/src/test/java/org/apache/wicket/markup/html/form/AutoLabelLabelProviderLocatorTest$WrongLabelProviderLocatorPanel.html
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:wicket="http://wicket.apache.org">
+<body>
+<wicket:panel>
+ <div wicket:id="dummy">
+ <input wicket:id="text" type="text" id="dummy_text"/>
+ </div>
+</wicket:panel>
+</body>
+</html>
\ No newline at end of file
diff --git
a/wicket-core/src/test/java/org/apache/wicket/markup/html/form/AutoLabelLabelProviderLocatorTest.java
b/wicket-core/src/test/java/org/apache/wicket/markup/html/form/AutoLabelLabelProviderLocatorTest.java
index b3c6294..6d7141d 100644
---
a/wicket-core/src/test/java/org/apache/wicket/markup/html/form/AutoLabelLabelProviderLocatorTest.java
+++
b/wicket-core/src/test/java/org/apache/wicket/markup/html/form/AutoLabelLabelProviderLocatorTest.java
@@ -20,6 +20,7 @@ import java.util.ArrayList;
import java.util.List;
import org.apache.wicket.AttributeModifier;
import org.apache.wicket.Component;
+import org.apache.wicket.WicketRuntimeException;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.basic.Label;
@@ -28,6 +29,7 @@ import org.apache.wicket.markup.repeater.RepeatingView;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.util.tester.WicketTestCase;
+import org.junit.Assert;
import org.junit.Test;
/**
@@ -85,6 +87,28 @@ public class AutoLabelLabelProviderLocatorTest extends
WicketTestCase
}
}
+ static class WrongLabelProviderLocatorPanel extends Panel implements
ILabelProviderLocator
+ {
+
+ private WebMarkupContainer dummy;
+
+ WrongLabelProviderLocatorPanel(String id)
+ {
+ super(id);
+ dummy = new WebMarkupContainer("dummy");
+ dummy.add(AttributeModifier.replace("class", "dummy1"));
+ add(dummy);
+ TextField<String> text = new TextField<>("text",
Model.of(""));
+ dummy.add(text);
+ }
+
+ @Override
+ public Component getAutoLabelComponent()
+ {
+ return dummy;
+ }
+ }
+
private interface IEditPanelProvider
{
IModel<String> getLabelText();
@@ -151,4 +175,51 @@ public class AutoLabelLabelProviderLocatorTest extends
WicketTestCase
tester.assertContains("for=\"dummy_dummy1_text\"><span
wicket:id=\"label\">Example2</span>");
}
+ @Test
+ public void testFailingILabelProviderLocator()
+ {
+ List<IEditPanelProvider> providers = new ArrayList<>();
+
+ providers.add(new IEditPanelProvider()
+ {
+ @Override
+ public IModel<String> getLabelText()
+ {
+ return Model.of("Example1");
+ }
+
+ @Override
+ public Panel createEditPanel(String id)
+ {
+ return new ILabelProviderLocatorPanel1(id);
+ }
+ });
+
+ providers.add(new IEditPanelProvider()
+ {
+ @Override
+ public IModel<String> getLabelText()
+ {
+ return Model.of("Example2");
+ }
+
+ @Override
+ public Panel createEditPanel(String id)
+ {
+ return new WrongLabelProviderLocatorPanel(id);
+ }
+ });
+
+ try
+ {
+ EditPage editPage = new EditPage(providers);
+ tester.startPage(editPage);
+ Assert.fail("Page rendering should produce a
WicketRuntimeException");
+ }
+ catch (WicketRuntimeException e)
+ {
+ Assert.assertEquals("Component
'org.apache.wicket.markup.html.WebMarkupContainer', pointed to by wicket:for
attribute 'edit-component', does not implement
org.apache.wicket.markup.html.form.ILabelProvider", e.getMessage());
+ }
+ }
+
}