rwaldhoff 2003/11/24 13:56:43 Modified: functor/src/test/org/apache/commons/functor/core/collection TestIsElementOf.java functor/src/java/org/apache/commons/functor/core/collection IsElementOf.java Log: support Arrays in isElementOf, add tests Revision Changes Path 1.6 +50 -5 jakarta-commons-sandbox/functor/src/test/org/apache/commons/functor/core/collection/TestIsElementOf.java Index: TestIsElementOf.java =================================================================== RCS file: /home/cvs/jakarta-commons-sandbox/functor/src/test/org/apache/commons/functor/core/collection/TestIsElementOf.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- TestIsElementOf.java 24 Nov 2003 20:31:20 -0000 1.5 +++ TestIsElementOf.java 24 Nov 2003 21:56:43 -0000 1.6 @@ -96,7 +96,7 @@ // Tests // ------------------------------------------------------------------------ - public void testTest() throws Exception { + public void testTestCollection() throws Exception { ArrayList list = new ArrayList(); list.add(new Integer(5)); list.add(new Integer(10)); @@ -112,12 +112,57 @@ } - public void testNullWrapper() { + public void testTestArray() throws Exception { + int[] list = new int[] { 5, 10, 15 }; + + UnaryPredicate p = IsElementOf.instance(list); + assertTrue(p.test(new Integer(5))); + assertTrue(p.test(new Integer(10))); + assertTrue(p.test(new Integer(15))); + + assertTrue(!p.test(new Integer(4))); + assertTrue(!p.test(new Integer(11))); + } + + public void testTestArrayWithNull() throws Exception { + assertTrue(! IsElementOf.instance().test(null,new int[] { 5, 10, 15 })); + assertTrue(IsElementOf.instance().test(null,new Integer[] { new Integer(5), null, new Integer(15) })); + assertTrue(IsElementOf.instance().test(new Integer(15),new Integer[] { new Integer(5), null, new Integer(15) })); + } + + public void testWrapNull() { try { IsElementOf.instance(null); + fail("expected NullPointerException"); + } catch (NullPointerException e) { + // expected + } + } + + public void testWrapNonCollection() { + try { + IsElementOf.instance(new Integer(3)); + fail("expected IllegalArgumentException"); + } catch (IllegalArgumentException e) { + // expected + } + } + + public void testTestNull() { + try { + IsElementOf.instance().test(new Integer(5),null); + fail("expected NullPointerException"); + } catch (NullPointerException e) { + // expected + } + } + + public void testTestNonCollection() { + try { + IsElementOf.instance().test(new Integer(5),new Long(5)); fail("expected IllegalArgumentException"); } catch (IllegalArgumentException e) { - // good + // expected } } 1.4 +40 -11 jakarta-commons-sandbox/functor/src/java/org/apache/commons/functor/core/collection/IsElementOf.java Index: IsElementOf.java =================================================================== RCS file: /home/cvs/jakarta-commons-sandbox/functor/src/java/org/apache/commons/functor/core/collection/IsElementOf.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- IsElementOf.java 24 Nov 2003 20:29:23 -0000 1.3 +++ IsElementOf.java 24 Nov 2003 21:56:43 -0000 1.4 @@ -58,6 +58,7 @@ 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.BinaryPredicate; @@ -85,13 +86,17 @@ //--------------------------------------------------------------- public boolean test(Object obj, Object col) { - return test(obj,(Collection)col); + if(col instanceof Collection) { + return testCollection(obj,(Collection)col); + } else if(null != col && col.getClass().isArray()) { + return testArray(obj,col); + } else if(null == col) { + throw new NullPointerException("Right side argument must not be null."); + } else { + throw new IllegalArgumentException("Expected Collection or Array, found " + col.getClass()); + } } - public boolean test(Object obj, Collection col) { - return col.contains(obj); - } - public boolean equals(Object obj) { return (obj instanceof IsElementOf); } @@ -104,6 +109,25 @@ return "IsElementOf"; } + private boolean testCollection(Object obj, Collection col) { + return col.contains(obj); + } + + private boolean testArray(Object obj, Object array) { + for(int i=0,m=Array.getLength(array);i<m;i++) { + Object value = Array.get(array,i); + if(null == obj) { + if(null == value) { + return true; + } + } else if(obj.equals(value)) { + return true; + } + } + return false; + } + + // class methods //--------------------------------------------------------------- @@ -111,11 +135,16 @@ return INSTANCE; } - public static UnaryPredicate instance(Collection col) { - if(null == col) { - throw new IllegalArgumentException("Collection must not be null"); + public static UnaryPredicate instance(Object obj) { + if(null == obj) { + throw new NullPointerException("Argument must not be null"); + } else if(obj instanceof Collection) { + return new RightBoundPredicate(instance(),obj); + } else if(obj.getClass().isArray()) { + return new RightBoundPredicate(instance(),obj); + } else { + throw new IllegalArgumentException("Expected Collection or Array, found " + obj.getClass()); } - return new RightBoundPredicate(instance(),col); } // class variables
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]