You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by hl...@apache.org on 2010/05/10 23:15:26 UTC

svn commit: r942905 - in /tapestry/tapestry5/trunk/tapestry-ioc/src: main/java/org/apache/tapestry5/ioc/services/TapestryIOCModule.java test/java/org/apache/tapestry5/ioc/internal/services/TypeCoercerImplTest.java

Author: hlship
Date: Mon May 10 21:15:25 2010
New Revision: 942905

URL: http://svn.apache.org/viewvc?rev=942905&view=rev
Log:
TAP5-1141: Type coercion from arbitrary object to Boolean will NPE when the object's toString() returns null (should coerce to false)

Modified:
    tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/services/TapestryIOCModule.java
    tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/services/TypeCoercerImplTest.java

Modified: tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/services/TapestryIOCModule.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/services/TapestryIOCModule.java?rev=942905&r1=942904&r2=942905&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/services/TapestryIOCModule.java (original)
+++ tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/services/TapestryIOCModule.java Mon May 10 21:15:25 2010
@@ -252,7 +252,7 @@ public final class TapestryIOCModule
         {
             public Boolean coerce(String input)
             {
-                String trimmed = input.trim();
+                String trimmed = input == null ? "" : input.trim();
 
                 if (trimmed.equalsIgnoreCase("false") || trimmed.length() == 0) return false;
 

Modified: tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/services/TypeCoercerImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/services/TypeCoercerImplTest.java?rev=942905&r1=942904&r2=942905&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/services/TypeCoercerImplTest.java (original)
+++ tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/services/TypeCoercerImplTest.java Mon May 10 21:15:25 2010
@@ -282,6 +282,7 @@ public class TypeCoercerImplTest extends
         { StringBuffer.class, Integer.class, "Object --> String, String --> Long, Long --> Integer" },
         { void.class, Map.class, "null --> null" },
         { void.class, Boolean.class, "null --> Boolean" },
+        { Object[].class, Boolean.class, "Object[] --> java.util.List, java.util.Collection --> Boolean" },
         { String[].class, List.class, "Object[] --> java.util.List" },
         { Float.class, Double.class, "Float --> Double" },
         { Double.class, BigDecimal.class, "Object --> String, String --> java.math.BigDecimal" }, };
@@ -307,4 +308,25 @@ public class TypeCoercerImplTest extends
 
         assertArraysEqual(result, input.toArray());
     }
+
+    /** TAP5-1141 */
+    @Test
+    public void object_whose_toString_returns_null_to_boolean()
+    {
+        Object idiot = new Object()
+        {
+            public String toString()
+            {
+                return null;
+            }
+        };
+
+        // To be honest, the proper result here is up for grabs. The object is not null, so you'd kind of think that the
+        // result should be true ... but the rules are to look for a known coercion, and it finds Object --> String,
+        // String --> Boolean. Converting a null String is the same as an empty String : false.
+
+        assertFalse(coercer.coerce(idiot, Boolean.class));
+
+        assertEquals(coercer.explain(idiot.getClass(), Boolean.class), "Object --> String, String --> Boolean");
+    }
 }