rwaldhoff    01/04/25 17:06:01

  Modified:    collections/src/test/org/apache/commons/collections
                        TestList.java
  Log:
  several additional tests
  
  Revision  Changes    Path
  1.3       +349 -66   
jakarta-commons/collections/src/test/org/apache/commons/collections/TestList.java
  
  Index: TestList.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-commons/collections/src/test/org/apache/commons/collections/TestList.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- TestList.java     2001/04/20 16:54:04     1.2
  +++ TestList.java     2001/04/26 00:06:00     1.3
  @@ -1,7 +1,7 @@
   /*
  - * $Header: 
/home/cvs/jakarta-commons/collections/src/test/org/apache/commons/collections/TestList.java,v
 1.2 2001/04/20 16:54:04 rwaldhoff Exp $
  - * $Revision: 1.2 $
  - * $Date: 2001/04/20 16:54:04 $
  + * $Header: 
/home/cvs/jakarta-commons/collections/src/test/org/apache/commons/collections/TestList.java,v
 1.3 2001/04/26 00:06:00 rwaldhoff Exp $
  + * $Revision: 1.3 $
  + * $Date: 2001/04/26 00:06:00 $
    *
    * ====================================================================
    *
  @@ -64,6 +64,9 @@
   import junit.framework.*;
   import java.util.List;
   import java.util.Collection;
  +import java.util.Arrays;
  +import java.util.ArrayList;
  +import java.util.Iterator;
   
   /**
    * Tests base {@link java.util.List} methods and contracts.
  @@ -76,7 +79,7 @@
    * test case (method) your {@link List} fails.
    *
    * @author Rodney Waldhoff
  - * @version $Id: TestList.java,v 1.2 2001/04/20 16:54:04 rwaldhoff Exp $
  + * @version $Id: TestList.java,v 1.3 2001/04/26 00:06:00 rwaldhoff Exp $
    */
   public abstract class TestList extends TestCollection {
       public TestList(String testName) {
  @@ -92,67 +95,344 @@
           return makeList();
       }
   
  -    /*
  +    public void testListAddByIndexBoundsChecking() {
  +        List list = makeList();
   
  -    // optional operation
  -    public void testListAddByIndex() {
  -        // XXX finish me
  -    }
  -
  -    // optional operation
  -    public void testListAdd() {
  -        // XXX finish me
  -    }
  -
  -    // optional operation
  -    public void testListAddAll() {
  -        // XXX finish me
  +        try {
  +            list.add(Integer.MIN_VALUE,"element");
  +            fail("Shouldn't get here [Integer.MIN_VALUE]");
  +        } catch(UnsupportedOperationException e) {
  +            // expected
  +        } catch(ClassCastException e) {
  +            // expected
  +        } catch(IllegalArgumentException e) {
  +            // expected
  +        } catch(IndexOutOfBoundsException e) {
  +            // expected
  +        }
  +
  +        try {
  +            list.add(-1,"element");
  +            fail("Shouldn't get here [-1]");
  +        } catch(UnsupportedOperationException e) {
  +            // expected
  +        } catch(ClassCastException e) {
  +            // expected
  +        } catch(IllegalArgumentException e) {
  +            // expected
  +        } catch(IndexOutOfBoundsException e) {
  +            // expected
  +        }
  +
  +        try {
  +            list.add(1,"element");
  +            fail("Shouldn't get here [1]");
  +        } catch(UnsupportedOperationException e) {
  +            // expected
  +        } catch(ClassCastException e) {
  +            // expected
  +        } catch(IllegalArgumentException e) {
  +            // expected
  +        } catch(IndexOutOfBoundsException e) {
  +            // expected
  +        }
  +
  +        try {
  +            list.add(Integer.MAX_VALUE,"element");
  +            fail("Shouldn't get here [Integer.MAX_VALUE]");
  +        } catch(UnsupportedOperationException e) {
  +            // expected
  +        } catch(ClassCastException e) {
  +            // expected
  +        } catch(IllegalArgumentException e) {
  +            // expected
  +        } catch(IndexOutOfBoundsException e) {
  +            // expected
  +        }
  +    }
  +
  +    public void testListAddByIndexBoundsChecking2() {
  +        List list = makeList();
  +        boolean added = tryToAdd(list,"element");
  +
  +        try {
  +            list.add(-1,"element2");
  +            fail("Shouldn't get here [-1]");
  +        } catch(UnsupportedOperationException e) {
  +            // expected
  +        } catch(ClassCastException e) {
  +            // expected
  +        } catch(IllegalArgumentException e) {
  +            // expected
  +        } catch(IndexOutOfBoundsException e) {
  +            // expected
  +        }
  +
  +        try {
  +            list.add(2,"element2");
  +            fail("Shouldn't get here [2]");
  +        } catch(UnsupportedOperationException e) {
  +            // expected
  +        } catch(ClassCastException e) {
  +            // expected
  +        } catch(IllegalArgumentException e) {
  +            // expected
  +        } catch(IndexOutOfBoundsException e) {
  +            // expected
  +        }
       }
   
  -    // optional operation
  -    public void testListClear() {
  -        // XXX finish me
  -    }
  -
  -    public void testListContains() {
  -        // XXX finish me
  -        // is this any different from Collection.contains?
  +    public void testListAddByIndex() {
  +        List list = makeList();
  +        assertEquals(0,list.size());
  +        if(tryToAdd(list,0,"element2")) {
  +            assertEquals(1,list.size());
  +            if(tryToAdd(list,0,"element0")) {
  +                assert(Arrays.equals(new String[] { "element0", "element2" 
},list.toArray()));
  +                if(tryToAdd(list,1,"element1")) {
  +                    assert(Arrays.equals(new String[] { "element0", "element1", 
"element2" },list.toArray()));
  +                    if(tryToAdd(list,4,"element3")) {
  +                        assert(Arrays.equals(new String[] { "element0", "element1", 
"element2", "element3" },list.toArray()));
  +                    }
  +                }
  +            }
  +        }
       }
   
  -    public void testListContainsAll() {
  -        // XXX finish me
  -        // is this any different from Collection.containsAll?
  +    public void testListAdd() {
  +        List list = makeList();
  +        if(tryToAdd(list,"1")) {
  +            assert(list.contains("1"));
  +            if(tryToAdd(list,"2")) {
  +                assert(list.contains("1"));
  +                assert(list.contains("2"));
  +                if(tryToAdd(list,"3")) {
  +                    assert(list.contains("1"));
  +                    assert(list.contains("2"));
  +                    assert(list.contains("3"));
  +                    if(tryToAdd(list,"4")) {
  +                        assert(list.contains("1"));
  +                        assert(list.contains("2"));
  +                        assert(list.contains("3"));
  +                        assert(list.contains("4"));
  +                    }
  +                }
  +            }
  +        }
  +    }
  +
  +    public void testListEqualsSelf() {
  +        List list = makeList();
  +        assert(list.equals(list));
  +        tryToAdd(list,"elt");
  +        assert(list.equals(list));
  +        tryToAdd(list,"elt2");
  +        assert(list.equals(list));
  +    }
  +
  +    public void testListEqualsArrayList() {
  +        List list1 = makeList();
  +        List list2 = new ArrayList();
  +        assert(list1.equals(list2));
  +        assertEquals(list1.hashCode(),list2.hashCode());
  +        tryToAdd(list1,"a");
  +        assert(!list1.equals(list2));
  +        tryToAdd(list1,"b");
  +        tryToAdd(list1,"c");
  +        tryToAdd(list1,"d");
  +        tryToAdd(list1,"b");
  +
  +        Iterator it = list1.iterator();
  +        while(it.hasNext()) {
  +            list2.add(it.next());
  +        }
  +        assert(list1.equals(list2));
  +        assertEquals(list1.hashCode(),list2.hashCode());
       }
   
       public void testListEquals() {
  -        // XXX finish me
  +        List list1 = makeList();
  +        List list2 = makeList();
  +        assert(list1.equals(list2));
  +        if(tryToAdd(list1,"a") && tryToAdd(list2,"a")) {
  +            assert(list1.equals(list2));
  +            if(tryToAdd(list1,"b") && tryToAdd(list2,"b")) {
  +                assert(list1.equals(list2));
  +                if(tryToAdd(list1,"c") && tryToAdd(list2,"c")) {
  +                    assert(list1.equals(list2));
  +                    if(tryToAdd(list1,"b") && tryToAdd(list2,"b")) {
  +                        assert(list1.equals(list2));
  +                    }
  +                }
  +            }
  +        }
       }
   
       public void testListGetByIndex() {
  -        // XXX finish me
  +        List list = makeList();
  +        tryToAdd(list,"a");
  +        tryToAdd(list,"b");
  +        tryToAdd(list,"c");
  +        tryToAdd(list,"d");
  +        tryToAdd(list,"e");
  +        tryToAdd(list,"f");
  +        Object[] expected = list.toArray();
  +        for(int i=0;i<expected.length;i++) {
  +            assertEquals(expected[i],list.get(i));
  +        }
  +    }
  +
  +    public void testListGetByIndexBoundsChecking() {
  +        List list = makeList();
  +
  +        try {
  +            list.get(Integer.MIN_VALUE);
  +            fail("Shouldn't get here [Integer.MIN_VALUE]");
  +        } catch(IndexOutOfBoundsException e) {
  +            // expected
  +        }
  +
  +        try {
  +            list.get(-1);
  +            fail("Shouldn't get here [-1]");
  +        } catch(IndexOutOfBoundsException e) {
  +            // expected
  +        }
  +
  +        try {
  +            list.get(0);
  +            fail("Shouldn't get here [0]");
  +        } catch(IndexOutOfBoundsException e) {
  +            // expected
  +        }
  +
  +        try {
  +            list.get(1);
  +            fail("Shouldn't get here [1]");
  +        } catch(IndexOutOfBoundsException e) {
  +            // expected
  +        }
  +
  +        try {
  +            list.get(Integer.MAX_VALUE);
  +            fail("Shouldn't get here [Integer.MAX_VALUE]");
  +        } catch(IndexOutOfBoundsException e) {
  +            // expected
  +        }
  +    }
  +
  +    public void testListGetByIndexBoundsChecking2() {
  +        List list = makeList();
  +        boolean added = tryToAdd(list,"a");
  +
  +        try {
  +            list.get(Integer.MIN_VALUE);
  +            fail("Shouldn't get here [Integer.MIN_VALUE]");
  +        } catch(IndexOutOfBoundsException e) {
  +            // expected
  +        }
  +
  +        try {
  +            list.get(-1);
  +            fail("Shouldn't get here [-1]");
  +        } catch(IndexOutOfBoundsException e) {
  +            // expected
  +        }
  +
  +        try {
  +            list.get(1);
  +            fail("Shouldn't get here [1]");
  +        } catch(IndexOutOfBoundsException e) {
  +            // expected
  +        }
  +
  +        try {
  +            list.get(Integer.MAX_VALUE);
  +            fail("Shouldn't get here [Integer.MAX_VALUE]");
  +        } catch(IndexOutOfBoundsException e) {
  +            // expected
  +        }
       }
   
  -    public void testListHashCode() {
  -        // XXX finish me
  -    }
  -
       public void testListIndexOf() {
  -        // XXX finish me
  -    }
  -
  -    public void testListIsEmpty() {
  -        // XXX finish me
  -        // is this any different from Collection.isEmpty?
  -    }
  -
  -    public void testListIterator() {
  -        // XXX finish me
  -        // is this any different from Collection.iterator?
  +        List list = makeList();
  +        tryToAdd(list,"a");
  +        tryToAdd(list,"b");
  +        tryToAdd(list,"c");
  +        tryToAdd(list,"d");
  +        tryToAdd(list,"e");
  +        tryToAdd(list,"f");
  +        Object[] expected = list.toArray();
  +        for(int i=0;i<expected.length;i++) {
  +            assertEquals(i,list.indexOf(expected[i]));
  +        }
  +        assertEquals(-1,list.indexOf("g"));
  +    }
  +
  +    public void testListLastIndexOf1() {
  +        List list = makeList();
  +        tryToAdd(list,"a");
  +        tryToAdd(list,"b");
  +        tryToAdd(list,"c");
  +        tryToAdd(list,"d");
  +        tryToAdd(list,"e");
  +        tryToAdd(list,"f");
  +        Object[] expected = list.toArray();
  +        for(int i=0;i<expected.length;i++) {
  +            assertEquals(i,list.lastIndexOf(expected[i]));
  +        }
  +        assertEquals(-1,list.indexOf("g"));
  +    }
  +
  +    public void testListLastIndexOf2() {
  +        List list = makeList();
  +        tryToAdd(list,"a");
  +        tryToAdd(list,"b");
  +        tryToAdd(list,"c");
  +        tryToAdd(list,"d");
  +        tryToAdd(list,"e");
  +        tryToAdd(list,"f");
  +        tryToAdd(list,"a");
  +        tryToAdd(list,"b");
  +        tryToAdd(list,"c");
  +        tryToAdd(list,"d");
  +        tryToAdd(list,"e");
  +        tryToAdd(list,"f");
  +        Object[] expected = list.toArray();
  +        int lastIndexOfA = -1;
  +        int lastIndexOfB = -1;
  +        int lastIndexOfC = -1;
  +        int lastIndexOfD = -1;
  +        int lastIndexOfE = -1;
  +        int lastIndexOfF = -1;
  +        int lastIndexOfG = -1;
  +        for(int i=0;i<expected.length;i++) {
  +            if("a".equals(expected[i])) {
  +                lastIndexOfA = i;
  +            } else if("b".equals(expected[i])) {
  +                lastIndexOfB = i;
  +            } else if("c".equals(expected[i])) {
  +                lastIndexOfC = i;
  +            } else if("d".equals(expected[i])) {
  +                lastIndexOfD = i;
  +            } else if("e".equals(expected[i])) {
  +                lastIndexOfE = i;
  +            } else if("f".equals(expected[i])) {
  +                lastIndexOfF = i;
  +            } else if("g".equals(expected[i])) {
  +                lastIndexOfG = i;
  +            }
  +        }
  +        assertEquals(lastIndexOfA,list.lastIndexOf("a"));
  +        assertEquals(lastIndexOfB,list.lastIndexOf("b"));
  +        assertEquals(lastIndexOfC,list.lastIndexOf("c"));
  +        assertEquals(lastIndexOfD,list.lastIndexOf("d"));
  +        assertEquals(lastIndexOfE,list.lastIndexOf("e"));
  +        assertEquals(lastIndexOfF,list.lastIndexOf("f"));
  +        assertEquals(lastIndexOfG,list.lastIndexOf("g"));
       }
   
  -    public void testListLastIndexOf() {
  -        // XXX finish me
  -    }
  +    /*
   
       public void testListListIterator() {
           // XXX finish me
  @@ -173,30 +453,33 @@
       }
   
       // optional operation
  -    public void testListRemoveAll() {
  -        // XXX finish me
  -        // is this any different from Collection.removeAll?
  -    }
  -
  -    // optional operation
  -    public void testListRetainAll() {
  -        // XXX finish me
  -        // is this any different from Collection.retainAll?
  -    }
  -
  -    // optional operation
       public void testListSet() {
           // XXX finish me
       }
   
  -    // size() same as Collection.size() ?
  -
       public void testListSubList() {
           // XXX finish me
       }
   
  -    // toArray() same as Collection.toArray() ?
  -    // toArray(Object[]) same as Collection.toArray(Object[]) ?
  -
       */
  +
  +    private boolean tryToAdd(List list, int index, Object obj) {
  +        try {
  +            list.add(index,obj);
  +            return true;
  +        } catch(UnsupportedOperationException e) {
  +            return false;
  +        } catch(ClassCastException e) {
  +            return false;
  +        } catch(IllegalArgumentException e) {
  +            return false;
  +        } catch(IndexOutOfBoundsException e) {
  +            return false;
  +        } catch(Throwable t) {
  +            t.printStackTrace();
  +            fail("List.add should only throw UnsupportedOperationException, 
ClassCastException, IllegalArgumentException, or IndexOutOfBoundsException. Found " + 
t.toString());
  +            return false; // never get here, since fail throws exception
  +        }
  +    }
  +
   }
  
  
  

Reply via email to