rwaldhoff 2003/11/24 13:29:28 Modified: functor/src/java/org/apache/commons/functor/core/collection Size.java functor/src/test/org/apache/commons/functor/core/collection TestSize.java Log: support Strings and arrays in Size function, add tests Revision Changes Path 1.3 +29 -4 jakarta-commons-sandbox/functor/src/java/org/apache/commons/functor/core/collection/Size.java Index: Size.java =================================================================== RCS file: /home/cvs/jakarta-commons-sandbox/functor/src/java/org/apache/commons/functor/core/collection/Size.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- Size.java 24 Nov 2003 20:12:17 -0000 1.2 +++ Size.java 24 Nov 2003 21:29:28 -0000 1.3 @@ -57,11 +57,14 @@ package org.apache.commons.functor.core.collection; import java.io.Serializable; +import java.lang.reflect.Array; import java.util.Collection; import org.apache.commons.functor.UnaryFunction; /** + * Returns the size of the specified Collection, or the length + * of the specified array or String. * @version $Revision$ $Date$ * @author Rodney Waldhoff */ @@ -73,7 +76,17 @@ public Size() { } public Object evaluate(Object obj) { - return new Integer(((Collection)obj).size()); + if(obj instanceof Collection) { + return evaluate((Collection)obj); + } else if(obj instanceof String) { + return evaluate((String)obj); + } else if(null != obj && obj.getClass().isArray()) { + return evaluateArray(obj); + } else if(null == obj){ + throw new NullPointerException("Argument must not be null"); + } else { + throw new ClassCastException("Expected Collection, String or Array, found " + obj); + } } /** @@ -100,7 +113,19 @@ public static final Size instance() { return INSTANCE; } + + private Object evaluate(Collection col) { + return new Integer(col.size()); + } + + private Object evaluate(String str) { + return new Integer(str.length()); + } + + private Object evaluateArray(Object array) { + return new Integer(Array.getLength(array)); + } private static final Size INSTANCE = new Size(); - + } 1.3 +9 -3 jakarta-commons-sandbox/functor/src/test/org/apache/commons/functor/core/collection/TestSize.java Index: TestSize.java =================================================================== RCS file: /home/cvs/jakarta-commons-sandbox/functor/src/test/org/apache/commons/functor/core/collection/TestSize.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- TestSize.java 24 Nov 2003 20:12:17 -0000 1.2 +++ TestSize.java 24 Nov 2003 21:29:28 -0000 1.3 @@ -139,7 +139,7 @@ } } - public void testTestNonCollection() throws Exception { + public void testEvaluateNonCollection() throws Exception { try { Size.instance().evaluate(new Integer(3)); fail("Expected ClassCastException"); @@ -148,6 +148,12 @@ } } + public void testEvaluateArray() throws Exception { + assertEquals(new Integer(10),Size.instance().evaluate(new int[10])); + assertEquals(new Integer(7),Size.instance().evaluate(new String[7])); + assertEquals(new Integer("xyzzy".length()),Size.instance().evaluate("xyzzy")); + } + public void testEquals() throws Exception { UnaryFunction f = new Size(); assertEquals(f,f);
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]