You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by jk...@apache.org on 2015/09/02 10:14:09 UTC

tapestry-5 git commit: TAP-2496: use TypeCoercer to convert enums to client-side values

Repository: tapestry-5
Updated Branches:
  refs/heads/master 8d155f91f -> b69ac22f3


TAP-2496: use TypeCoercer to convert enums to client-side values


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

Branch: refs/heads/master
Commit: b69ac22f31c324129d72b15bbd542b5a1f62c2bc
Parents: 8d155f9
Author: Jochen Kemnade <jo...@eddyson.de>
Authored: Wed Sep 2 10:09:17 2015 +0200
Committer: Jochen Kemnade <jo...@eddyson.de>
Committed: Wed Sep 2 10:09:17 2015 +0200

----------------------------------------------------------------------
 .../apache/tapestry5/util/EnumValueEncoder.java |  2 +-
 .../tapestry5/util/EnumValueEncoderTest.java    | 44 ++++++++++++++++++--
 2 files changed, 42 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/b69ac22f/tapestry-core/src/main/java/org/apache/tapestry5/util/EnumValueEncoder.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/main/java/org/apache/tapestry5/util/EnumValueEncoder.java b/tapestry-core/src/main/java/org/apache/tapestry5/util/EnumValueEncoder.java
index cc211c7..e6e06bb 100644
--- a/tapestry-core/src/main/java/org/apache/tapestry5/util/EnumValueEncoder.java
+++ b/tapestry-core/src/main/java/org/apache/tapestry5/util/EnumValueEncoder.java
@@ -40,7 +40,7 @@ public class EnumValueEncoder<E extends Enum<E>> implements ValueEncoder<E>
         if (value == null)
             return null;
 
-        return value.name();
+        return typeCoercer.coerce(value, String.class);
     }
 
     public E toValue(String clientValue)

http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/b69ac22f/tapestry-core/src/test/java/org/apache/tapestry5/util/EnumValueEncoderTest.java
----------------------------------------------------------------------
diff --git a/tapestry-core/src/test/java/org/apache/tapestry5/util/EnumValueEncoderTest.java b/tapestry-core/src/test/java/org/apache/tapestry5/util/EnumValueEncoderTest.java
index e713316..1100fc3 100644
--- a/tapestry-core/src/test/java/org/apache/tapestry5/util/EnumValueEncoderTest.java
+++ b/tapestry-core/src/test/java/org/apache/tapestry5/util/EnumValueEncoderTest.java
@@ -17,10 +17,15 @@ package org.apache.tapestry5.util;
 import java.util.List;
 
 import org.apache.tapestry5.internal.test.InternalBaseTestCase;
+import org.apache.tapestry5.ioc.internal.services.TypeCoercerImpl;
+import org.apache.tapestry5.ioc.internal.util.CollectionFactory;
+import org.apache.tapestry5.ioc.services.Coercion;
+import org.apache.tapestry5.ioc.services.CoercionTuple;
 import org.apache.tapestry5.ioc.services.TypeCoercer;
 import org.apache.tapestry5.ioc.util.UnknownValueException;
 import org.testng.annotations.Test;
 
+
 public class EnumValueEncoderTest extends InternalBaseTestCase
 {
     private enum Stooge
@@ -32,9 +37,10 @@ public class EnumValueEncoderTest extends InternalBaseTestCase
     // TAP5-1331
     public void valid_values_can_be_retrieved_from_exception()
     {
-        TypeCoercer typeCoercer = getService(TypeCoercer.class); 
+        TypeCoercer typeCoercer = getService(TypeCoercer.class);
         EnumValueEncoder<Stooge> encoder = new EnumValueEncoder<Stooge>(typeCoercer, Stooge.class);
-        try{
+        try
+        {
           encoder.toValue("Foo");
           fail();
         } catch (RuntimeException e){
@@ -45,5 +51,37 @@ public class EnumValueEncoderTest extends InternalBaseTestCase
           assertTrue(availableValues.contains("LARRY"));
           assertTrue(availableValues.contains("CURLY_JOE"));
         }
-    }   
+    }
+
+    @Test
+    // TAP5-2496
+    public void roundtrip_with_custom_coercer()
+    {
+
+        CoercionTuple<Stooge, String> stoogeToString = CoercionTuple.create(Stooge.class, String.class, new Coercion<Stooge, String>(){
+            @Override
+            public String coerce(Stooge input) {
+                return String.valueOf(input.ordinal());
+            }
+        });
+
+        CoercionTuple<String, Stooge> stringToStooge = CoercionTuple.create(String.class, Stooge.class, new Coercion<String, Stooge>(){
+
+            @Override
+            public Stooge coerce(String input) {
+                return Stooge.values()[Integer.parseInt(input)];
+            }
+
+        });
+
+        TypeCoercer typeCoercer =  new TypeCoercerImpl(CollectionFactory.newList(stoogeToString, stringToStooge));
+
+
+        EnumValueEncoder<Stooge> encoder = new EnumValueEncoder<Stooge>(typeCoercer, Stooge.class);
+        Stooge serverValue = Stooge.LARRY;
+        String clientValue = encoder.toClient(serverValue);
+        Stooge convertedBack = encoder.toValue(clientValue);
+        assertEquals(convertedBack, serverValue);
+
+    }
 }