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 <[email protected]> Authored: Tue Sep 1 16:56:12 2015 +0200 Committer: Jochen Kemnade <[email protected]> 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);
