This is an automated email from the ASF dual-hosted git repository.
reiern70 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/wicket.git
The following commit(s) were added to refs/heads/master by this push:
new 539bc95 [WICKET-6716] improve error reporting for AutoLabelResolver
539bc95 is described below
commit 539bc95b697aac3daf8e6cccc244ca4600e90627
Author: reiern70 <[email protected]>
AuthorDate: Thu Dec 5 06:07:20 2019 +0300
[WICKET-6716] improve error reporting for AutoLabelResolver
---
.../wicket/markup/html/form/AutoLabelResolver.java | 4 +-
...LocatorTest$WrongLabelProviderLocatorPanel.html | 10 +++
.../form/AutoLabelLabelProviderLocatorTest.java | 72 ++++++++++++++++++++++
3 files changed, 84 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 96e09c6..4ca498a 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 10dc0f1..a19b551 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,8 @@ 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.assertj.core.api.Assert;
+import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
/**
@@ -85,6 +88,28 @@ 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 +176,51 @@ class AutoLabelLabelProviderLocatorTest extends
WicketTestCase
tester.assertContains("for=\"dummy_dummy1_text\"><span
wicket:id=\"label\">Example2</span>");
}
+ @Test
+ 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);
+ Assertions.fail("Page rendering should produce a
WicketRuntimeException");
+ }
+ catch (WicketRuntimeException e)
+ {
+ Assertions.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());
+ }
+ }
+
}