import java.util.Iterator; import junit.framework.TestCase; // Class: TestAnyCS210ListImplementation // // Author: Alyce Brady // // Created on Oct 6, 2006 // // Modifier: Pam Cutter // October 16, 2007: Edited names to correspond to CS210 F07 // names for methods & List interface. // April 22, 2008: Edited to work with CS210ListADT S08 // October 14, 2008: Edited to work with CS210ListADT F08 //Modifier: Nathan Sprague // Oct. 11, 2009 Edited to work with CS210ListADT F09 // // License Information: // This class is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation. // // This class is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. /** * A TestAnyCS210ListImplementation object * tests the various methods of any class implementing the * CS210List interface. * * @author Alyce Brady, Pam Cutter * @version Oct 13, 2008 */ public abstract class TestAnyCS210ListImplementation extends TestCase { public TestAnyCS210ListImplementation(String name) { super(name); } public abstract CS210ListADT makeEmptyIntegerList(); public abstract CS210ListADT makeAListWithNoDuplicates(); public abstract CS210ListADT makeAListWithNoDuplicatesInReverse(); public abstract CS210ListADT makeAListWithDuplicates(); public abstract CS210ListADT makeSingleElementList(); public abstract CS210ListADT makeLongerListWithNoDuplicates(); public abstract CS210ListADT makeListWithNoDuplicatesWithoutSecondElt(); public void testConstructorAndToStringOnEmptyList() { CS210ListADT list = makeEmptyIntegerList(); assertEquals("[ ]", list.toString()); } public void testIsEmptyOnEmptyList() { CS210ListADT list = makeEmptyIntegerList(); assertEquals(true, list.isEmpty()); } public void testIsEmptyOnNonEmptyList() { CS210ListADT list = makeAListWithNoDuplicates(); assertEquals(false, list.isEmpty()); } public void testSizeOnNonEmptyList() { // Test list has no duplicates so there's no ambiguity // about what size should return. CS210ListADT list = makeAListWithNoDuplicates(); assertEquals(4, list.size()); } public void testSizeOnEmptyList() { CS210ListADT list = makeEmptyIntegerList(); assertEquals(0, list.size()); } public void testIteratingThroughEmptyList() { CS210ListADT listToTest = makeEmptyIntegerList(); assertEquals(false, listToTest.iterator().hasNext()); } /** Tests contains on empty list. */ public void testContainsOnEmptyList() { CS210ListADT listToTest = makeEmptyIntegerList(); assertEquals(false, listToTest.contains(3)); } /** Tests contains when object is first in list. */ public void testContainsOnFirstObjInList() { CS210ListADT listToTest = makeAListWithNoDuplicates(); assertEquals(true, listToTest.contains(3)); } /** Tests contains when object is last in list. */ public void testContainsOnLastObjInList() { CS210ListADT listToTest = makeAListWithNoDuplicates(); assertEquals(true, listToTest.contains(12)); } /** Tests contains when object is in middle of list. */ public void testContainsOnMiddleObjInList() { CS210ListADT listToTest = makeAListWithNoDuplicates(); assertEquals(true, listToTest.contains(5)); } /** Tests contains when object is not in non-empty list. */ public void testContainsOnObjNotInList() { CS210ListADT listToTest = makeAListWithNoDuplicates(); assertEquals(false, listToTest.contains(42)); } /** Tests clear on empty list. */ public void testClearOnEmptyList() { CS210ListADT listToTest = makeEmptyIntegerList(); listToTest.clear(); assertEquals(makeEmptyIntegerList(), listToTest); } /** Tests clear on list with one element. */ public void testClearOnListWith1Element() { CS210ListADT listToTest = makeSingleElementList(); listToTest.clear(); assertEquals(makeEmptyIntegerList(), listToTest); } /** Tests clear on list with multiple elements. */ public void testClearOnListWithMultElements() { CS210ListADT listToTest = makeAListWithNoDuplicates(); listToTest.clear(); assertEquals(makeEmptyIntegerList(), listToTest); } // Do not need to test getFirst on an empty list because it has // a pre-condition that the list not be empty. public void testFirstOnListWith1Element() { CS210ListADT list = makeSingleElementList(); assertEquals(3, list.first().intValue()); } public void testFirstOnListWithMultElements() { CS210ListADT list = makeAListWithNoDuplicates(); assertEquals(3, list.first().intValue()); } // Do not need to test getLast on an empty list // because both have a pre-condition that the list not be empty. public void testLastOnListWith1Element() { CS210ListADT list = makeSingleElementList(); assertEquals(3, list.last().intValue()); } public void testLastOnListWithMultElements() { CS210ListADT list = makeAListWithNoDuplicates(); assertEquals(12, list.last().intValue()); } public void testFirstNextIteratingThroughNonEmptyList() { CS210ListADT listToTest = makeAListWithNoDuplicates(); int firstVal = listToTest.iterator().next(); assertEquals(3, firstVal); } public void testPenultimateNextIteratingThroughNonEmptyList() { CS210ListADT list = makeAListWithNoDuplicates(); Integer penultimate = null, last = null; Iterator it = list.iterator(); while ( it.hasNext() ) { penultimate = last; last = it.next(); } assertEquals(8, penultimate.intValue()); } public void testLastNextIteratingThroughNonEmptyList() { CS210ListADT list = makeAListWithNoDuplicates(); Integer last = null; Iterator it = list.iterator(); while ( it.hasNext() ) last = it.next(); assertEquals(12, last.intValue()); } public void testForEachConstruct() { CS210ListADT list = makeAListWithNoDuplicates(); int count = 0; for ( Integer last : list ) count++; assertEquals(list.size(), count); } // Do not need to test remove on empty list, nor two removes in a row; // both are illegal. public void testIteratorRemoveFirstElementInList() { CS210ListADT list = makeSingleElementList(); Iterator it = list.iterator(); Integer firstItem = it.next(); it.remove(); assertEquals(makeEmptyIntegerList(), list); } public void testIteratorRemoveLastElementInList() { CS210ListADT list = makeAListWithNoDuplicates(); //list.addLast(10); String rep = "["; Iterator it = list.iterator(); for ( int i = 0; i < list.size()-2; i++ ) rep = rep+it.next()+", "; rep = rep+it.next(); rep = rep+"]"; it.next(); it.remove(); assertEquals(rep, list.toString()); } public void testIteratorRemoveMiddleElementInList() { CS210ListADT list = makeAListWithNoDuplicates(); Iterator it = list.iterator(); it.next(); it.next(); it.remove(); assertEquals(makeListWithNoDuplicatesWithoutSecondElt(), list); } public void testIteratorRemoveNextRemove() { CS210ListADT list = makeLongerListWithNoDuplicates(); Iterator it = list.iterator(); // Remove first two elements in list. Integer item = it.next(); it.remove(); item = it.next(); it.remove(); assertEquals("[8, 10, 12, 20]", list.toString()); } public void testRemoveFirstOnListWith1Elt() { CS210ListADT listToTest = makeSingleElementList(); listToTest.removeFirst(); assertEquals(makeEmptyIntegerList(), listToTest); } public void testRemoveFirstOnListWithMultElts() { CS210ListADT listToTest = makeAListWithDuplicates(); //listToTest.addFirst(42); //listToTest.addAll(makeAListWithNoDuplicates()); listToTest.removeFirst(); assertEquals(makeAListWithNoDuplicates(), listToTest); } public void testRemoveLastOnListWith1Elt() { CS210ListADT listToTest = makeSingleElementList(); listToTest.removeLast(); assertEquals(makeEmptyIntegerList(), listToTest); } public void testRemoveLastOnListWithMultElts() { CS210ListADT listToTest = makeAListWithNoDuplicates(); //listToTest.addLast(42); listToTest.removeLast(); assertEquals("[3, 5, 8]", listToTest.toString()); } /** Tests remove when object is first in list. */ public void testRemoveResultOnFirstObjInList() { CS210ListADT listToTest = makeAListWithNoDuplicates(); //listToTest.addFirst(42); assertEquals(true, listToTest.remove(listToTest.first())); } /** Tests remove when object is last in list. */ public void testRemoveResultOnLastObjInList() { CS210ListADT listToTest = makeAListWithNoDuplicates(); //listToTest.addLast(42); assertEquals(true, listToTest.remove(listToTest.last())); } /** Tests remove when object is last in list. */ public void testRemoveResultOnObjInMiddleOfList() { CS210ListADT listToTest = makeAListWithNoDuplicates(); //listToTest.addLast(42); assertEquals(true, listToTest.remove(12)); } /** Tests remove when object is not in in non-empty list. */ public void testRemoveResultOnObjNotInList() { CS210ListADT listToTest = makeAListWithNoDuplicates(); assertEquals(null, listToTest.remove(42)); } /** Tests remove when object is first in list. */ public void testRemoveEffectOnFirstObjInList() { CS210ListADT listToTest = makeAListWithDuplicates(); listToTest.remove(listToTest.first()); assertEquals(makeAListWithNoDuplicates(), listToTest); } /** Tests remove when object is last in list. */ public void testRemoveEffectOnLastObjInList() { CS210ListADT listToTest = makeAListWithNoDuplicates(); //listToTest.addLast(42); listToTest.remove(listToTest.last()); assertEquals("[3, 5, 8]", listToTest.toString()); } /** Tests remove when object is not in in non-empty list. */ public void testRemoveEffectOnObjNotInList() { CS210ListADT listToTest = makeAListWithNoDuplicates(); listToTest.remove(42); assertEquals(makeAListWithNoDuplicates(), listToTest); } public void testRemoveAllWithSingleElt() { CS210ListADT list = makeAListWithNoDuplicates(); CS210ListADT listToRemove = makeSingleElementList(); list.removeAll(listToRemove); CS210ListADT controlList = makeAListWithNoDuplicates(); controlList.remove(listToRemove.first()); assertEquals(controlList,list); } public void testRemoveAllWithSingleRepeatedElt() { CS210ListADT list = makeAListWithDuplicates(); CS210ListADT listToRemove = makeSingleElementList(); list.removeAll(listToRemove); CS210ListADT controlList = makeAListWithNoDuplicates(); controlList.remove(listToRemove.first()); assertEquals(controlList,list); } public void testRemoveAllWithAllObjectsInList() { CS210ListADT list = makeAListWithDuplicates(); CS210ListADT listToRemove = makeAListWithNoDuplicates(); list.removeAll(listToRemove); assertEquals(makeEmptyIntegerList(),list); } }