Repository: tapestry-5
Updated Branches:
  refs/heads/5.4.x af1118b5d -> 45eaae528


TAP5-2565, TAP5-2496: always use name() when coercing enum values to String


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

Branch: refs/heads/5.4.x
Commit: 45eaae528a4e418cecb03e41d47104853e973aa7
Parents: af1118b
Author: Jochen Kemnade <jkemn...@apache.org>
Authored: Thu Sep 22 12:05:49 2016 +0200
Committer: Jochen Kemnade <jkemn...@apache.org>
Committed: Thu Sep 22 15:10:18 2016 +0200

----------------------------------------------------------------------
 .../ioc/internal/services/TypeCoercerImpl.java    | 14 ++++++++++++++
 .../test/groovy/ioc/specs/TypeCoercerSpec.groovy  |  7 ++++++-
 .../src/test/java/com/example/Animal.java         | 18 ++++++++++++++++++
 3 files changed, 38 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/45eaae52/commons/src/main/java/org/apache/tapestry5/ioc/internal/services/TypeCoercerImpl.java
----------------------------------------------------------------------
diff --git 
a/commons/src/main/java/org/apache/tapestry5/ioc/internal/services/TypeCoercerImpl.java
 
b/commons/src/main/java/org/apache/tapestry5/ioc/internal/services/TypeCoercerImpl.java
index 2b157b7..23639ba 100644
--- 
a/commons/src/main/java/org/apache/tapestry5/ioc/internal/services/TypeCoercerImpl.java
+++ 
b/commons/src/main/java/org/apache/tapestry5/ioc/internal/services/TypeCoercerImpl.java
@@ -121,6 +121,15 @@ public class TypeCoercerImpl extends LockSupport 
implements TypeCoercer
         }
     };
 
+    private static final Coercion COERCION_ENUM_TO_STRING = new Coercion<Enum, 
String>()
+    {
+        @Override
+        public String coerce(Enum input)
+        {
+            return input.name();
+        }
+    };
+
     public TypeCoercerImpl(Collection<CoercionTuple> tuples)
     {
         for (CoercionTuple tuple : tuples)
@@ -495,6 +504,11 @@ public class TypeCoercerImpl extends LockSupport 
implements TypeCoercer
         {
             tuples = extend(tuples, new CoercionTuple(sourceType, targetType, 
new StringToEnumCoercion(targetType)));
         }
+        else if (Enum.class.isAssignableFrom(sourceType) && targetType == 
String.class)
+        {
+            // TAP5-2565
+            tuples = extend(tuples, new CoercionTuple(sourceType, targetType, 
COERCION_ENUM_TO_STRING));
+        }
 
         return tuples;
     }

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/45eaae52/tapestry-ioc/src/test/groovy/ioc/specs/TypeCoercerSpec.groovy
----------------------------------------------------------------------
diff --git a/tapestry-ioc/src/test/groovy/ioc/specs/TypeCoercerSpec.groovy 
b/tapestry-ioc/src/test/groovy/ioc/specs/TypeCoercerSpec.groovy
index 9a388fb..985d0e4 100644
--- a/tapestry-ioc/src/test/groovy/ioc/specs/TypeCoercerSpec.groovy
+++ b/tapestry-ioc/src/test/groovy/ioc/specs/TypeCoercerSpec.groovy
@@ -5,6 +5,9 @@ import org.apache.tapestry5.ioc.annotations.AnnotationUseContext
 import org.apache.tapestry5.ioc.services.TypeCoercer
 import org.apache.tapestry5.ioc.util.TimeInterval
 import org.apache.tapestry5.plastic.PlasticUtils
+
+import com.example.Animal;
+
 import spock.lang.Unroll
 
 class TypeCoercerSpec extends AbstractSharedRegistrySpecification {
@@ -97,7 +100,9 @@ class TypeCoercerSpec extends 
AbstractSharedRegistrySpecification {
     "mixin"                           | AnnotationUseContext | 
AnnotationUseContext.MIXIN
     123                               | Object[]             | [123] as 
Object[]
     [1, 2, 3]                         | Object[]             | [1, 2, 3] as 
Object[]
-
+    // TAP5-2565
+    Animal.DOG                        | String               | 'DOG'
+    'CAT'                             | Animal               | Animal.CAT
 
     inputTypeName = PlasticUtils.toTypeName(input.getClass())
     typeName = PlasticUtils.toTypeName(type)

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/45eaae52/tapestry-ioc/src/test/java/com/example/Animal.java
----------------------------------------------------------------------
diff --git a/tapestry-ioc/src/test/java/com/example/Animal.java 
b/tapestry-ioc/src/test/java/com/example/Animal.java
new file mode 100644
index 0000000..75826ec
--- /dev/null
+++ b/tapestry-ioc/src/test/java/com/example/Animal.java
@@ -0,0 +1,18 @@
+package com.example;
+
+public enum Animal {
+
+  CAT("Cat"), DOG("Dog");
+  
+  private final String displayName;
+
+  private Animal(String displayName) {
+    this.displayName = displayName;
+  }
+  
+  @Override
+  public String toString() {
+    return displayName;
+  }
+  
+}

Reply via email to