You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by jk...@apache.org on 2015/09/01 16:58:08 UTC

tapestry-5 git commit: TAP5-2495: Report an error if an EnumSelectModel is created for property conduit that does not return an enum type.

Repository: tapestry-5
Updated Branches:
  refs/heads/master fb1d26825 -> 40d8cb13d


TAP5-2495: Report an error if an EnumSelectModel is created for property conduit that does not return an enum type.


Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo
Commit: http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/40d8cb13
Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/40d8cb13
Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/40d8cb13

Branch: refs/heads/master
Commit: 40d8cb13de3b44345e2cbe3de84c61ed185a59fe
Parents: fb1d268
Author: Jochen Kemnade <jo...@eddyson.de>
Authored: Tue Sep 1 16:56:12 2015 +0200
Committer: Jochen Kemnade <jo...@eddyson.de>
Committed: Tue Sep 1 16:56:12 2015 +0200

----------------------------------------------------------------------
 .../corelib/pages/PropertyEditBlocks.java        |  8 +++++++-
 .../apache/tapestry5/util/EnumSelectModel.java   |  5 +++++
 .../tapestry5/util/EnumSelectModelTest.java      | 19 ++++++++++++++++++-
 3 files changed, 30 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/40d8cb13/tapestry-core/src/main/java/org/apache/tapestry5/corelib/pages/PropertyEditBlocks.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/pages/PropertyEditBlocks.java b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/pages/PropertyEditBlocks.java
index 19326cc..e1627af 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/corelib/pages/PropertyEditBlocks.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/corelib/pages/PropertyEditBlocks.java
@@ -172,6 +172,12 @@ public class PropertyEditBlocks
     @SuppressWarnings("unchecked")
     public SelectModel getSelectModelForProperty()
     {
-        return new EnumSelectModel(context.getPropertyType(), context.getContainerMessages());
+        Class propertyType = context.getPropertyType();
+        if (!Enum.class.isAssignableFrom(propertyType))
+        {
+            throw new IllegalStateException("Cannot create a select model for property " + context.getPropertyId()
+              + ". The property type is " + propertyType + " which is not an enum class.");
+        }
+        return new EnumSelectModel(propertyType, context.getContainerMessages());
     }
 }

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/40d8cb13/tapestry-core/src/main/java/org/apache/tapestry5/util/EnumSelectModel.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/util/EnumSelectModel.java b/tapestry-core/src/main/java/org/apache/tapestry5/util/EnumSelectModel.java
index e8596ba..ef3f89b 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/util/EnumSelectModel.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/util/EnumSelectModel.java
@@ -45,6 +45,11 @@ public final class EnumSelectModel extends AbstractSelectModel implements Serial
     {
         assert enumClass != null;
         assert messages != null;
+        if (!Enum.class.isAssignableFrom(enumClass))
+        {
+            throw new IllegalArgumentException("Cannot create " + this.getClass().getSimpleName()
+                + " from " + enumClass.getName() + ", not an enum class.");
+        }
         String prefix = enumClass.getSimpleName();
 
         for (T value : values)

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/40d8cb13/tapestry-core/src/test/java/org/apache/tapestry5/util/EnumSelectModelTest.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/util/EnumSelectModelTest.java b/tapestry-core/src/test/java/org/apache/tapestry5/util/EnumSelectModelTest.java
index ee3abe1..cc438c5 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/util/EnumSelectModelTest.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/util/EnumSelectModelTest.java
@@ -97,8 +97,25 @@ public class EnumSelectModelTest extends TapestryTestCase
 
         verify();
     }
+    
+    @Test
+    //TAP5-2495
+    public void error_on_invalid_class()
+    {
+        Messages messages = mockMessages();
+
+        replay();
+        Class c = String.class;
+        try {
+          SelectModel model = new EnumSelectModel(c, messages);
+          fail("should have thrown an exception");
+        } catch (IllegalArgumentException e){
+          assertMessageContains(e, "not an enum class");
+        }
+        verify();
+    }
 
-    private void checkOption(List<OptionModel> options, int i, String label, Stooge value)
+    private void checkOption(final List<OptionModel> options, final int i, final String label, final Stooge value)
     {
         OptionModel model = options.get(i);