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");
+ }
}