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

Reply via email to