You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by sc...@apache.org on 2003/11/28 00:57:09 UTC

cvs commit: jakarta-commons/collections/src/java/org/apache/commons/collections/functors InstantiateFactory.java InvokerTransformer.java InstantiateTransformer.java PrototypeFactory.java MapTransformer.java

scolebourne    2003/11/27 15:57:09

  Modified:    collections/src/test/org/apache/commons/collections
                        TestFactoryUtils.java TestClosureUtils.java
                        TestTransformerUtils.java
               collections/src/java/org/apache/commons/collections/functors
                        InstantiateFactory.java InvokerTransformer.java
                        InstantiateTransformer.java PrototypeFactory.java
                        MapTransformer.java
  Log:
  Improve test coverage
  
  Revision  Changes    Path
  1.8       +54 -19    jakarta-commons/collections/src/test/org/apache/commons/collections/TestFactoryUtils.java
  
  Index: TestFactoryUtils.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/collections/src/test/org/apache/commons/collections/TestFactoryUtils.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- TestFactoryUtils.java	23 Nov 2003 17:48:19 -0000	1.7
  +++ TestFactoryUtils.java	27 Nov 2003 23:57:09 -0000	1.8
  @@ -57,17 +57,23 @@
    */
   package org.apache.commons.collections;
   
  +import java.io.ByteArrayInputStream;
  +import java.io.ByteArrayOutputStream;
   import java.io.IOException;
  +import java.io.NotSerializableException;
  +import java.io.ObjectInputStream;
  +import java.io.ObjectOutputStream;
   import java.io.Serializable;
   import java.util.Date;
   import java.util.TimeZone;
   
  -import org.apache.commons.collections.functors.FunctorException;
  -
   import junit.framework.Test;
   import junit.framework.TestSuite;
   import junit.textui.TestRunner;
   
  +import org.apache.commons.collections.functors.ConstantFactory;
  +import org.apache.commons.collections.functors.FunctorException;
  +
   /**
    * Tests the org.apache.commons.collections.FactoryUtils class.
    * 
  @@ -162,40 +168,69 @@
       //------------------------------------------------------------------
       
       public void testPrototypeFactoryNull() {
  -        try {
  -            Factory factory = FactoryUtils.prototypeFactory(null);
  -            
  -        } catch (IllegalArgumentException ex) {
  -            return;
  -        }
  -        fail();
  +        assertSame(ConstantFactory.NULL_INSTANCE, FactoryUtils.prototypeFactory(null));
       }
   
  -    public void testPrototypeFactoryPublicCloneMethod() {
  +    public void testPrototypeFactoryPublicCloneMethod() throws Exception {
           Date proto = new Date();
           Factory factory = FactoryUtils.prototypeFactory(proto);
           assertNotNull(factory);
           Object created = factory.create();
           assertTrue(proto != created);
           assertEquals(proto, created);
  +        
  +        // check serialisation works
  +        ByteArrayOutputStream buffer = new ByteArrayOutputStream();
  +        ObjectOutputStream out = new ObjectOutputStream(buffer);
  +        out.writeObject(factory);
  +        out.close();
  +        ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(buffer.toByteArray()));
  +        Object dest = in.readObject();
  +        in.close();
       }
   
  -    public void testPrototypeFactoryPublicCopyConstructor() {
  +    public void testPrototypeFactoryPublicCopyConstructor() throws Exception {
           Mock1 proto = new Mock1(6);
           Factory factory = FactoryUtils.prototypeFactory(proto);
           assertNotNull(factory);
           Object created = factory.create();
           assertTrue(proto != created);
           assertEquals(proto, created);
  +        
  +        // check serialisation works
  +        ByteArrayOutputStream buffer = new ByteArrayOutputStream();
  +        ObjectOutputStream out = new ObjectOutputStream(buffer);
  +        try {
  +            out.writeObject(factory);
  +        } catch (NotSerializableException ex) {
  +            out.close();
  +        }
  +        factory = FactoryUtils.prototypeFactory(new Mock2("S"));
  +        buffer = new ByteArrayOutputStream();
  +        out = new ObjectOutputStream(buffer);
  +        out.writeObject(factory);
  +        out.close();
  +        ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(buffer.toByteArray()));
  +        Object dest = in.readObject();
  +        in.close();
       }
   
  -    public void testPrototypeFactoryPublicSerialization() {
  +    public void testPrototypeFactoryPublicSerialization() throws Exception {
           Integer proto = new Integer(9);
           Factory factory = FactoryUtils.prototypeFactory(proto);
           assertNotNull(factory);
           Object created = factory.create();
           assertTrue(proto != created);
           assertEquals(proto, created);
  +        
  +        // check serialisation works
  +        ByteArrayOutputStream buffer = new ByteArrayOutputStream();
  +        ObjectOutputStream out = new ObjectOutputStream(buffer);
  +        out.writeObject(factory);
  +        out.close();
  +        ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(buffer.toByteArray()));
  +        Object dest = in.readObject();
  +        in.close();
       }
   
       public void testPrototypeFactoryPublicSerializationError() {
  @@ -270,7 +305,7 @@
       // instantiateFactory
       //------------------------------------------------------------------
       
  -    public void testReflectionFactoryNull() {
  +    public void testInstantiateFactoryNull() {
           try {
               Factory factory = FactoryUtils.instantiateFactory(null);
               
  @@ -280,7 +315,7 @@
           fail();
       }
   
  -    public void testReflectionFactorySimple() {
  +    public void testInstantiateFactorySimple() {
           Factory factory = FactoryUtils.instantiateFactory(Mock3.class);
           assertNotNull(factory);
           Object created = factory.create();
  @@ -289,7 +324,7 @@
           assertEquals(1, ((Mock3) created).getValue());
       }
   
  -    public void testReflectionFactoryMismatch() {
  +    public void testInstantiateFactoryMismatch() {
           try {
               Factory factory = FactoryUtils.instantiateFactory(Date.class, null, new Object[] {null});
               
  @@ -299,7 +334,7 @@
           fail();
       }
   
  -    public void testReflectionFactoryNoConstructor() {
  +    public void testInstantiateFactoryNoConstructor() {
           try {
               Factory factory = FactoryUtils.instantiateFactory(Date.class, new Class[] {Long.class}, new Object[] {null});
               
  @@ -309,7 +344,7 @@
           fail();
       }
   
  -    public void testReflectionFactoryComplex() {
  +    public void testInstantiateFactoryComplex() {
           TimeZone.setDefault(TimeZone.getTimeZone("GMT"));
           // 2nd Jan 1970
           Factory factory = FactoryUtils.instantiateFactory(Date.class,
  
  
  
  1.6       +48 -12    jakarta-commons/collections/src/test/org/apache/commons/collections/TestClosureUtils.java
  
  Index: TestClosureUtils.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/collections/src/test/org/apache/commons/collections/TestClosureUtils.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- TestClosureUtils.java	23 Nov 2003 17:01:36 -0000	1.5
  +++ TestClosureUtils.java	27 Nov 2003 23:57:09 -0000	1.6
  @@ -124,7 +124,14 @@
           public void execute(Object object) {
               count++;
           }
  -
  +    }
  +    static class MockTransformer implements Transformer {
  +        int count = 0;
  +        
  +        public Object transform(Object object) {
  +            count++;
  +            return object;
  +        }
       }
   
       // exceptionClosure
  @@ -189,12 +196,23 @@
           MockClosure cmd = new MockClosure();
           ClosureUtils.whileClosure(PredicateUtils.falsePredicate(), cmd).execute(null);
           assertEquals(0, cmd.count);
  +        
  +        cmd = new MockClosure();
  +        ClosureUtils.whileClosure(PredicateUtils.uniquePredicate(), cmd).execute(null);
  +        assertEquals(1, cmd.count);
  +        
  +        try {
  +            ClosureUtils.whileClosure(null, ClosureUtils.nopClosure());
  +            fail();
  +        } catch (IllegalArgumentException ex) {}
  +        try {
  +            ClosureUtils.whileClosure(PredicateUtils.falsePredicate(), null);
  +            fail();
  +        } catch (IllegalArgumentException ex) {}
           try {
               ClosureUtils.whileClosure(null, null);
  -        } catch (IllegalArgumentException ex) {
  -            return;
  -        }
  -        fail();
  +            fail();
  +        } catch (IllegalArgumentException ex) {}
       }
   
       // doWhileClosure
  @@ -204,12 +222,15 @@
           MockClosure cmd = new MockClosure();
           ClosureUtils.doWhileClosure(cmd, PredicateUtils.falsePredicate()).execute(null);
           assertEquals(1, cmd.count);
  +        
  +        cmd = new MockClosure();
  +        ClosureUtils.doWhileClosure(cmd, PredicateUtils.uniquePredicate()).execute(null);
  +        assertEquals(2, cmd.count);
  +        
           try {
               ClosureUtils.doWhileClosure(null, null);
  -        } catch (IllegalArgumentException ex) {
  -            return;
  -        }
  -        fail();
  +            fail();
  +        } catch (IllegalArgumentException ex) {}
       }
   
       // chainedClosure
  @@ -361,7 +382,9 @@
               fail();
           } catch (IllegalArgumentException ex) {}
           try {
  -            ClosureUtils.switchClosure(new Predicate[2], new Closure[1]);
  +            ClosureUtils.switchClosure(
  +                    new Predicate[] {PredicateUtils.truePredicate()},
  +                    new Closure[] {a,b});
               fail();
           } catch (IllegalArgumentException ex) {}
       }
  @@ -408,5 +431,18 @@
           } catch (IllegalArgumentException ex) {}
       }
       
  +    // asClosure
  +    //------------------------------------------------------------------
  +
  +    public void testTransformerClosure() {
  +        MockTransformer mock = new MockTransformer();
  +        Closure closure = ClosureUtils.asClosure(mock);
  +        closure.execute(null);
  +        assertEquals(1, mock.count);
  +        closure.execute(null);
  +        assertEquals(2, mock.count);
  +        
  +        assertSame(ClosureUtils.nopClosure(), ClosureUtils.asClosure(null));
  +    }
       
   }
  
  
  
  1.7       +46 -3     jakarta-commons/collections/src/test/org/apache/commons/collections/TestTransformerUtils.java
  
  Index: TestTransformerUtils.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/collections/src/test/org/apache/commons/collections/TestTransformerUtils.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- TestTransformerUtils.java	23 Nov 2003 23:25:33 -0000	1.6
  +++ TestTransformerUtils.java	27 Nov 2003 23:57:09 -0000	1.7
  @@ -60,6 +60,7 @@
   import java.util.ArrayList;
   import java.util.Collection;
   import java.util.Collections;
  +import java.util.Date;
   import java.util.HashMap;
   import java.util.List;
   import java.util.Map;
  @@ -171,6 +172,7 @@
           assertEquals(cObject, TransformerUtils.constantTransformer(cObject).transform(cObject));
           assertEquals(cObject, TransformerUtils.constantTransformer(cObject).transform(cString));
           assertEquals(cObject, TransformerUtils.constantTransformer(cObject).transform(cInteger));
  +        assertSame(ConstantTransformer.NULL_INSTANCE, TransformerUtils.constantTransformer(null));
       }
   
       // cloneTransformer
  @@ -200,6 +202,7 @@
           assertEquals(new Integer(1), TransformerUtils.mapTransformer(map).transform(cObject));
           assertEquals(new Integer(2), TransformerUtils.mapTransformer(map).transform(cString));
           assertEquals(null, TransformerUtils.mapTransformer(map).transform(cInteger));
  +        assertSame(ConstantTransformer.NULL_INSTANCE, TransformerUtils.mapTransformer(null));
       }
   
       // commandTransformer
  @@ -350,7 +353,9 @@
               fail();
           } catch (IllegalArgumentException ex) {}
           try {
  -            TransformerUtils.switchTransformer(new Predicate[2], new Transformer[1]);
  +            TransformerUtils.switchTransformer(
  +                    new Predicate[] {PredicateUtils.truePredicate()},
  +                    new Transformer[] {a,b});
               fail();
           } catch (IllegalArgumentException ex) {}
       }
  @@ -425,6 +430,18 @@
                   "noSuchMethod", new Class[] {Object.class}, new Object[] {cString}).transform(new Object());
               fail();
           } catch (FunctorException ex) {}
  +        try {
  +            TransformerUtils.invokerTransformer("badArgs", null, new Object[] { cString });
  +            fail();
  +        } catch (IllegalArgumentException ex) {}
  +        try {
  +            TransformerUtils.invokerTransformer("badArgs", new Class[] {Object.class}, null);
  +            fail();
  +        } catch (IllegalArgumentException ex) {}
  +        try {
  +            TransformerUtils.invokerTransformer("badArgs", new Class[] {}, new Object[] { cString });
  +            fail();
  +        } catch (IllegalArgumentException ex) {}
       }
       
       // stringValueTransformer
  @@ -439,4 +456,30 @@
               TransformerUtils.stringValueTransformer().transform(new Integer(6)));
       }
       
  +    // instantiateFactory
  +    //------------------------------------------------------------------
  +    
  +    public void testInstantiateTransformerNull() {
  +        try {
  +            Transformer trans = TransformerUtils.instantiateTransformer(null, new Object[] {"str"});
  +            fail();
  +        } catch (IllegalArgumentException ex) {}
  +        try {
  +            Transformer trans = TransformerUtils.instantiateTransformer(new Class[] {}, new Object[] {"str"});
  +            fail();
  +        } catch (IllegalArgumentException ex) {}
  +        
  +        Transformer trans = TransformerUtils.instantiateTransformer(new Class[] {Long.class}, new Object[] {null});
  +        try {
  +            trans.transform(String.class);
  +            fail();
  +        } catch (FunctorException ex) {}
  +        
  +        trans = TransformerUtils.instantiateTransformer();
  +        assertEquals("", trans.transform(String.class));
  +        
  +        trans = TransformerUtils.instantiateTransformer(new Class[] {Long.TYPE}, new Object[] {new Long(1000L)});
  +        assertEquals(new Date(1000L), trans.transform(Date.class));
  +    }
  +
   }
  
  
  
  1.2       +4 -5      jakarta-commons/collections/src/java/org/apache/commons/collections/functors/InstantiateFactory.java
  
  Index: InstantiateFactory.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/collections/src/java/org/apache/commons/collections/functors/InstantiateFactory.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- InstantiateFactory.java	23 Nov 2003 17:48:19 -0000	1.1
  +++ InstantiateFactory.java	27 Nov 2003 23:57:09 -0000	1.2
  @@ -103,13 +103,12 @@
           }
   
           if (paramTypes == null || paramTypes.length == 0) {
  -            paramTypes = null;
  -            args = null;
  +            return new InstantiateFactory(classToInstantiate);
           } else {
               paramTypes = (Class[]) paramTypes.clone();
               args = (Object[]) args.clone();
  +            return new InstantiateFactory(classToInstantiate, paramTypes, args);
           }
  -        return new InstantiateFactory(classToInstantiate, paramTypes, args);
       }
   
       /**
  
  
  
  1.2       +4 -5      jakarta-commons/collections/src/java/org/apache/commons/collections/functors/InvokerTransformer.java
  
  Index: InvokerTransformer.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/collections/src/java/org/apache/commons/collections/functors/InvokerTransformer.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- InvokerTransformer.java	23 Nov 2003 23:25:33 -0000	1.1
  +++ InvokerTransformer.java	27 Nov 2003 23:57:09 -0000	1.2
  @@ -99,13 +99,12 @@
               throw new IllegalArgumentException("The parameter types must match the arguments");
           }
           if (paramTypes == null || paramTypes.length == 0) {
  -            paramTypes = null;
  -            args = null;
  +            return new InvokerTransformer(methodName);
           } else {
               paramTypes = (Class[]) paramTypes.clone();
               args = (Object[]) args.clone();
  +            return new InvokerTransformer(methodName, paramTypes, args);
           }
  -        return new InvokerTransformer(methodName, paramTypes, args);
       }
   
       /**
  
  
  
  1.2       +3 -3      jakarta-commons/collections/src/java/org/apache/commons/collections/functors/InstantiateTransformer.java
  
  Index: InstantiateTransformer.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/collections/src/java/org/apache/commons/collections/functors/InstantiateTransformer.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- InstantiateTransformer.java	23 Nov 2003 23:25:33 -0000	1.1
  +++ InstantiateTransformer.java	27 Nov 2003 23:57:09 -0000	1.2
  @@ -142,7 +142,7 @@
               return con.newInstance(iArgs);
   
           } catch (NoSuchMethodException ex) {
  -            throw new IllegalArgumentException("InstantiateTransformer: The constructor must exist and be public ");
  +            throw new FunctorException("InstantiateTransformer: The constructor must exist and be public ");
           } catch (InstantiationException ex) {
               throw new FunctorException("InstantiateTransformer: InstantiationException", ex);
           } catch (IllegalAccessException ex) {
  
  
  
  1.2       +8 -15     jakarta-commons/collections/src/java/org/apache/commons/collections/functors/PrototypeFactory.java
  
  Index: PrototypeFactory.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/collections/src/java/org/apache/commons/collections/functors/PrototypeFactory.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- PrototypeFactory.java	23 Nov 2003 17:48:19 -0000	1.1
  +++ PrototypeFactory.java	27 Nov 2003 23:57:09 -0000	1.2
  @@ -97,11 +97,11 @@
        */
       public static Factory getInstance(Object prototype) {
           if (prototype == null) {
  -            throw new IllegalArgumentException("The prototype must not be null");
  +            return ConstantFactory.NULL_INSTANCE;
           }
           try {
  -            prototype.getClass().getMethod("clone", null);
  -            return new PrototypeCloneFactory(prototype);
  +            Method method = prototype.getClass().getMethod("clone", null);
  +            return new PrototypeCloneFactory(prototype, method);
   
           } catch (NoSuchMethodException ex) {
               try {
  @@ -145,16 +145,12 @@
           private transient Method iCloneMethod;
   
           /**
  -         * Constructor to store prototype
  +         * Constructor to store prototype.
            */
  -        private PrototypeCloneFactory(Object prototype) {
  +        private PrototypeCloneFactory(Object prototype, Method method) {
               super();
  -            if (prototype == null) {
  -                throw new IllegalArgumentException("PrototypeCloneFactory: The prototype must not be null");
  -            }
               iPrototype = prototype;
  -
  -            findCloneMethod();
  +            iCloneMethod = method;
           }
   
           /**
  @@ -207,9 +203,6 @@
            */
           private PrototypeSerializationFactory(Serializable prototype) {
               super();
  -            if (prototype == null) {
  -                throw new IllegalArgumentException("PrototypeSerializationFactory: The prototype must not be null");
  -            }
               iPrototype = prototype;
           }
   
  
  
  
  1.2       +9 -7      jakarta-commons/collections/src/java/org/apache/commons/collections/functors/MapTransformer.java
  
  Index: MapTransformer.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/collections/src/java/org/apache/commons/collections/functors/MapTransformer.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- MapTransformer.java	23 Nov 2003 23:25:33 -0000	1.1
  +++ MapTransformer.java	27 Nov 2003 23:57:09 -0000	1.2
  @@ -63,8 +63,8 @@
   import org.apache.commons.collections.Transformer;
   
   /**
  - * Predicate implementation that returns true the first time an object is
  - * passed into the predicate.
  + * Transformer implementation that returns the value held in a specified map
  + * using the input parameter as a key.
    * 
    * @since Commons Collections 3.0
    * @version $Revision$ $Date$
  @@ -81,13 +81,15 @@
   
       /**
        * Factory to create the transformer.
  +     * <p>
  +     * If the map is null, a transformer that always returns null is returned.
        * 
  -     * @return the map, not cloned, not null
  -     * @throws IllegalArgumentException if the map is null
  +     * @param the map, not cloned
  +     * @return the transformer
        */
       public static Transformer getInstance(Map map) {
           if (map == null) {
  -            throw new IllegalArgumentException("The map must not be null");
  +            return ConstantTransformer.NULL_INSTANCE;
           }
           return new MapTransformer(map);
       }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org