rwaldhoff 01/04/05 11:04:35 Modified: collections/src/org/apache/commons/collections TestCursorableLinkedList.java Added: collections/src/org/apache/commons/collections TestList.java TestCollection.java Log: added general Collection/List contract tests Revision Changes Path 1.2 +5 -4 jakarta-commons-sandbox/collections/src/org/apache/commons/collections/TestCursorableLinkedList.java Index: TestCursorableLinkedList.java =================================================================== RCS file: /home/cvs/jakarta-commons-sandbox/collections/src/org/apache/commons/collections/TestCursorableLinkedList.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- TestCursorableLinkedList.java 2001/04/03 17:12:00 1.1 +++ TestCursorableLinkedList.java 2001/04/05 18:04:34 1.2 @@ -1,7 +1,7 @@ /* - * $Header: /home/cvs/jakarta-commons-sandbox/collections/src/org/apache/commons/collections/TestCursorableLinkedList.java,v 1.1 2001/04/03 17:12:00 rwaldhoff Exp $ - * $Revision: 1.1 $ - * $Date: 2001/04/03 17:12:00 $ + * $Header: /home/cvs/jakarta-commons-sandbox/collections/src/org/apache/commons/collections/TestCursorableLinkedList.java,v 1.2 2001/04/05 18:04:34 rwaldhoff Exp $ + * $Revision: 1.2 $ + * $Date: 2001/04/05 18:04:34 $ * * ==================================================================== * @@ -66,9 +66,9 @@ /** * @author Rodney Waldhoff - * @version $Id: TestCursorableLinkedList.java,v 1.1 2001/04/03 17:12:00 rwaldhoff Exp $ + * @version $Id: TestCursorableLinkedList.java,v 1.2 2001/04/05 18:04:34 rwaldhoff Exp $ */ -public class TestCursorableLinkedList extends TestCase { +public class TestCursorableLinkedList extends TestList { public TestCursorableLinkedList(String testName) { super(testName); } @@ -86,6 +86,7 @@ public void setUp() { list = new CursorableLinkedList(); + setList(list); } public void testAdd() { 1.1 jakarta-commons-sandbox/collections/src/org/apache/commons/collections/TestList.java Index: TestList.java =================================================================== /* * $Header: /home/cvs/jakarta-commons-sandbox/collections/src/org/apache/commons/collections/TestList.java,v 1.1 2001/04/05 18:04:33 rwaldhoff Exp $ * $Revision: 1.1 $ * $Date: 2001/04/05 18:04:33 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2001 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Commons", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. * */ package org.apache.commons.collections; import junit.framework.*; import java.util.List; /** * @author Rodney Waldhoff * @version $Id: TestList.java,v 1.1 2001/04/05 18:04:33 rwaldhoff Exp $ */ public abstract class TestList extends TestCollection { public TestList(String testName) { super(testName); } private List _list = null; protected void setList(List l) { _list = l; setCollection(_list); } // placeholder. add list contract tests here } 1.1 jakarta-commons-sandbox/collections/src/org/apache/commons/collections/TestCollection.java Index: TestCollection.java =================================================================== /* * $Header: /home/cvs/jakarta-commons-sandbox/collections/src/org/apache/commons/collections/TestCollection.java,v 1.1 2001/04/05 18:04:34 rwaldhoff Exp $ * $Revision: 1.1 $ * $Date: 2001/04/05 18:04:34 $ * * ==================================================================== * * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2001 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Commons", and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. * */ package org.apache.commons.collections; import junit.framework.*; import java.util.Collection; import java.util.ArrayList; import java.util.Iterator; import java.util.NoSuchElementException; /** * @author Rodney Waldhoff * @version $Id: TestCollection.java,v 1.1 2001/04/05 18:04:34 rwaldhoff Exp $ */ public abstract class TestCollection extends TestCase { public TestCollection(String testName) { super(testName); } private Collection _collection = null; protected void setCollection(Collection c) { _collection = c; } // optional operation public void testCollectionAdd() { boolean added1 = false; try { added1 = _collection.add("element1"); } catch(UnsupportedOperationException e) { // ignored, must not be supported } catch(ClassCastException e) { // ignored, type must not be supported } catch(IllegalArgumentException e) { // ignored, element must not be supported } catch(Throwable t) { t.printStackTrace(); fail("Collection.add should only throw UnsupportedOperationException, ClassCastException or IllegalArgumentException. Found " + t.toString()); } boolean added2 = false; try { added2 = _collection.add("element2"); } catch(UnsupportedOperationException e) { // ignored, must not be supported } catch(ClassCastException e) { // ignored, type must not be supported } catch(IllegalArgumentException e) { // ignored, element must not be supported } catch(Throwable t) { t.printStackTrace(); fail("Collection.add should only throw UnsupportedOperationException, ClassCastException or IllegalArgumentException. Found " + t.toString()); } } // optional operation public void testCollectionAddAll() { Collection col = new ArrayList(); col.add("element1"); col.add("element2"); col.add("element3"); boolean added = false; try { added = _collection.addAll(col); } catch(UnsupportedOperationException e) { // ignored, must not be supported } catch(ClassCastException e) { // ignored, type must not be supported } catch(IllegalArgumentException e) { // ignored, element must not be supported } catch(Throwable t) { t.printStackTrace(); fail("Collection.addAll should only throw UnsupportedOperationException, ClassCastException or IllegalArgumentException. Found " + t.toString()); } } // optional operation public void testCollectionClear() { boolean cleared = false; try { _collection.clear(); cleared = true; } catch(UnsupportedOperationException e) { // ignored, must not be supported } catch(Throwable t) { t.printStackTrace(); fail("Collection.clear should only throw UnsupportedOperationException. Found " + t.toString()); } if(cleared) { assert("After Collection.clear(), Collection.isEmpty() should be true.",_collection.isEmpty()); } boolean added = false; try { added = _collection.add("element1"); } catch(UnsupportedOperationException e) { // ignored, must not be supported } catch(ClassCastException e) { // ignored, type must not be supported } catch(IllegalArgumentException e) { // ignored, element must not be supported } catch(Throwable t) { t.printStackTrace(); fail("Collection.add should only throw UnsupportedOperationException, ClassCastException or IllegalArgumentException. Found " + t.toString()); } if(added) { assert("After element is added, Collection.isEmpty() should be false.",!_collection.isEmpty()); boolean cleared2 = false; try { _collection.clear(); cleared2 = true; } catch(UnsupportedOperationException e) { // ignored, must not be supported } catch(Throwable t) { t.printStackTrace(); fail("Collection.clear should only throw UnsupportedOperationException. Found " + t.toString()); } if(cleared2) { assert("After Collection.clear(), Collection.isEmpty() should be true.",_collection.isEmpty()); } } } public void testCollectionContains() { boolean added1 = false; try { added1 = _collection.add("element1"); } catch(UnsupportedOperationException e) { // ignored, must not be supported } catch(ClassCastException e) { // ignored, type must not be supported } catch(IllegalArgumentException e) { // ignored, element must not be supported } catch(Throwable t) { t.printStackTrace(); fail("Collection.add should only throw UnsupportedOperationException, ClassCastException or IllegalArgumentException. Found " + t.toString()); } assert("If an element was added, it should be contained.",added1 == _collection.contains("element1")); boolean added2 = false; try { added2 = _collection.add("element2"); } catch(UnsupportedOperationException e) { // ignored, must not be supported } catch(ClassCastException e) { // ignored, type must not be supported } catch(IllegalArgumentException e) { // ignored, element must not be supported } catch(Throwable t) { t.printStackTrace(); fail("Collection.add should only throw UnsupportedOperationException, ClassCastException or IllegalArgumentException. Found " + t.toString()); } assert("If an element was added, it should be contained.",added1 == _collection.contains("element1")); assert("If an element was added, it should be contained.",added2 == _collection.contains("element2")); } public void testCollectionContainsAll() { Collection col = new ArrayList(); assert("Every Collection should contain all elements of an empty Collection.",_collection.containsAll(col)); col.add("element1"); assert("Empty Collection shouldn't contain all elements of a non-empty Collection.",!_collection.containsAll(col)); boolean added1 = false; try { added1 = _collection.add("element1"); } catch(UnsupportedOperationException e) { // ignored, must not be supported } catch(ClassCastException e) { // ignored, type must not be supported } catch(IllegalArgumentException e) { // ignored, element must not be supported } catch(Throwable t) { t.printStackTrace(); fail("Collection.add should only throw UnsupportedOperationException, ClassCastException or IllegalArgumentException. Found " + t.toString()); } if(added1) { assert("Should contain all.",_collection.containsAll(col)); } col.add("element2"); assert("Shouldn't contain all.",!_collection.containsAll(col)); boolean added2 = false; try { added2 = _collection.add("element2"); } catch(UnsupportedOperationException e) { // ignored, must not be supported } catch(ClassCastException e) { // ignored, type must not be supported } catch(IllegalArgumentException e) { // ignored, element must not be supported } catch(Throwable t) { t.printStackTrace(); fail("Collection.add should only throw UnsupportedOperationException, ClassCastException or IllegalArgumentException. Found " + t.toString()); } if(added1 && added2) { assert("Should contain all.",_collection.containsAll(col)); } } public void testCollectionEquals() { assertEquals("A Collection should equal itself",_collection,_collection); try { _collection.add("element1"); } catch(UnsupportedOperationException e) { // ignored, must not be supported } catch(ClassCastException e) { // ignored, type must not be supported } catch(IllegalArgumentException e) { // ignored, element must not be supported } catch(Throwable t) { t.printStackTrace(); fail("Collection.add should only throw UnsupportedOperationException, ClassCastException or IllegalArgumentException. Found " + t.toString()); } assertEquals("A Collection should equal itself",_collection,_collection); try { _collection.add("element1"); } catch(UnsupportedOperationException e) { // ignored, must not be supported } catch(ClassCastException e) { // ignored, type must not be supported } catch(IllegalArgumentException e) { // ignored, element must not be supported } catch(Throwable t) { t.printStackTrace(); fail("Collection.add should only throw UnsupportedOperationException, ClassCastException or IllegalArgumentException. Found " + t.toString()); } assertEquals("A Collection should equal itself",_collection,_collection); } public void testCollectionHashCode() { assertEquals("A Collection's hashCode should equal itself",_collection.hashCode(),_collection.hashCode()); } public void testCollectionIsEmpty() { assert("New Collection should be empty.",_collection.isEmpty()); boolean added = false; try { added = _collection.add("element1"); } catch(UnsupportedOperationException e) { // ignored, must not be supported } catch(ClassCastException e) { // ignored, type must not be supported } catch(IllegalArgumentException e) { // ignored, element must not be supported } catch(Throwable t) { t.printStackTrace(); fail("Collection.add should only throw UnsupportedOperationException, ClassCastException or IllegalArgumentException. Found " + t.toString()); } if(added) { assert("If an element was added, the Collection.isEmpty() should return false.",!_collection.isEmpty()); } } public void testCollectionIterator() { Iterator it1 = _collection.iterator(); assert("Iterator for empty Collection shouldn't have next.",!it1.hasNext()); try { it1.next(); fail("Iterator at end of Collection should throw NoSuchElementException when next is called."); } catch(NoSuchElementException e) { // expected } catch(Throwable t) { t.printStackTrace(); fail("Collection.iterator.next() should only throw NoSuchElementException. Found " + t.toString()); } boolean added = false; try { added = _collection.add("element1"); } catch(UnsupportedOperationException e) { // ignored, must not be supported } catch(ClassCastException e) { // ignored, type must not be supported } catch(IllegalArgumentException e) { // ignored, element must not be supported } catch(Throwable t) { t.printStackTrace(); fail("Collection.add should only throw UnsupportedOperationException, ClassCastException or IllegalArgumentException. Found " + t.toString()); } if(added) { Iterator it2 = _collection.iterator(); assert("Iterator for non-empty Collection should have next.",it2.hasNext()); assertEquals("element1",it2.next()); assert("Iterator at end of Collection shouldn't have next.",!it2.hasNext()); try { it2.next(); fail("Iterator at end of Collection should throw NoSuchElementException when next is called."); } catch(NoSuchElementException e) { // expected } catch(Throwable t) { t.printStackTrace(); fail("Collection.iterator.next() should only throw NoSuchElementException. Found " + t.toString()); } } } // optional operation public void testCollectionRemove() { boolean added = false; try { added = _collection.add("element1"); } catch(UnsupportedOperationException e) { // ignored, must not be supported } catch(ClassCastException e) { // ignored, type must not be supported } catch(IllegalArgumentException e) { // ignored, element must not be supported } catch(Throwable t) { t.printStackTrace(); fail("Collection.add should only throw UnsupportedOperationException, ClassCastException or IllegalArgumentException. Found " + t.toString()); } try { assert("Shouldn't be able to remove an element that wasn't added.",!_collection.remove("element2")); } catch(UnsupportedOperationException e) { } catch(Throwable t) { t.printStackTrace(); fail("Collection.remove should only throw UnsupportedOperationException. Found " + t.toString()); } try { assert("If added, should be removed by call to remove.",added == _collection.remove("element1")); assert("If removed, shouldn't be contained.",!_collection.contains("element1")); } catch(UnsupportedOperationException e) { } catch(Throwable t) { t.printStackTrace(); fail("Collection.remove should only throw UnsupportedOperationException. Found " + t.toString()); } } // optional operation public void testCollectionRemoveAll() { assert("Initial Collection is empty.",_collection.isEmpty()); try { _collection.removeAll(_collection); } catch(UnsupportedOperationException e) { // expected } catch(Throwable t) { t.printStackTrace(); fail("Collection.removeAll should only throw UnsupportedOperationException. Found " + t.toString()); } assert("Collection is still empty.",_collection.isEmpty()); boolean added = false; try { added = _collection.add("element1"); } catch(UnsupportedOperationException e) { // ignored, must not be supported } catch(ClassCastException e) { // ignored, type must not be supported } catch(IllegalArgumentException e) { // ignored, element must not be supported } catch(Throwable t) { t.printStackTrace(); fail("Collection.add should only throw UnsupportedOperationException, ClassCastException or IllegalArgumentException. Found " + t.toString()); } if(added) { assert("Collection is not empty.",!_collection.isEmpty()); try { _collection.removeAll(_collection); assert("Collection is empty.",_collection.isEmpty()); } catch(UnsupportedOperationException e) { // expected } catch(Throwable t) { t.printStackTrace(); fail("Collection.removeAll should only throw UnsupportedOperationException. Found " + t.toString()); } } } // optional operation public void testCollectionRemoveAll2() { Collection col = new ArrayList(); col.add("element1"); col.add("element2"); col.add("element3"); boolean added = false; try { added = _collection.addAll(col); if(added) { added = _collection.add("element0"); } } catch(UnsupportedOperationException e) { // ignored, must not be supported } catch(ClassCastException e) { // ignored, type must not be supported } catch(IllegalArgumentException e) { // ignored, element must not be supported } catch(Throwable t) { t.printStackTrace(); fail("Collection.addAll should only throw UnsupportedOperationException, ClassCastException or IllegalArgumentException. Found " + t.toString()); } col.add("element4"); if(added) { assert("Collection is not empty.",!_collection.isEmpty()); try { assert("Should be changed",_collection.removeAll(col)); assert("Collection is not empty.",!_collection.isEmpty()); assert("Collection should contain element",_collection.contains("element0")); assert("Collection shouldn't contain removed element",!_collection.contains("element1")); assert("Collection shouldn't contain removed element",!_collection.contains("element2")); assert("Collection shouldn't contain removed element",!_collection.contains("element3")); assert("Collection shouldn't contain removed element",!_collection.contains("element4")); } catch(UnsupportedOperationException e) { // expected } catch(Throwable t) { t.printStackTrace(); fail("Collection.removeAll should only throw UnsupportedOperationException. Found " + t.toString()); } } } // optional operation public void testCollectionRetainAll() { } public void testCollectionSize() { assertEquals("Size of new Collection is 0.",0,_collection.size()); boolean added = false; try { added = _collection.add("element1"); } catch(UnsupportedOperationException e) { // ignored, must not be supported } catch(ClassCastException e) { // ignored, type must not be supported } catch(IllegalArgumentException e) { // ignored, element must not be supported } catch(Throwable t) { t.printStackTrace(); fail("Collection.add should only throw UnsupportedOperationException, ClassCastException or IllegalArgumentException. Found " + t.toString()); } if(added) { assertEquals("If one element was added, the Collection.size() should be 1.",1,_collection.size()); } } public void testCollectionToArray() { } public void testCollectionToArray2() { } }