/******************************************************************************* * Copyright (c) 2005, 2010 Oracle. All rights reserved. * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0, which accompanies this distribution * and is available at http://www.eclipse.org/legal/epl-v10.html. * * Contributors: * Oracle - initial API and implementation ******************************************************************************/ package org.eclipse.jpt.utility.tests.internal; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.Comparator; import java.util.HashSet; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.ListIterator; import java.util.NoSuchElementException; import java.util.Random; import java.util.Set; import java.util.SortedSet; import java.util.TreeSet; import java.util.Vector; import junit.framework.TestCase; import org.eclipse.jpt.utility.internal.Bag; import org.eclipse.jpt.utility.internal.CollectionTools; import org.eclipse.jpt.utility.internal.HashBag; import org.eclipse.jpt.utility.internal.Range; import org.eclipse.jpt.utility.internal.ReflectionTools; import org.eclipse.jpt.utility.internal.ReverseComparator; import org.eclipse.jpt.utility.internal.enumerations.EmptyEnumeration; import org.eclipse.jpt.utility.internal.iterables.EmptyIterable; import org.eclipse.jpt.utility.internal.iterators.ArrayIterator; import org.eclipse.jpt.utility.internal.iterators.EmptyIterator; @SuppressWarnings("nls") public class CollectionToolsTests extends TestCase { public CollectionToolsTests(String name) { super(name); } // ********** add all ********** public void testAddAllCollectionIterable_StringModified() { List list1 = this.buildStringList1(); Iterable iterable2 = this.buildStringList2(); assertTrue(CollectionTools.addAll(list1, iterable2.iterator())); assertEquals(6, list1.size()); assertTrue(list1.containsAll(this.buildStringList2())); } public void testAddAllCollectionIterable_StringUnmodified() { Set set1 = this.buildStringSet1(); Iterable iterable3 = this.buildStringList1(); // same elements as set1 assertFalse(CollectionTools.addAll(set1, iterable3.iterator())); assertEquals(3, set1.size()); assertTrue(set1.containsAll(this.buildStringList1())); } public void testAddAllCollectionIterable_ObjectModified() { List list1 = this.buildObjectList1(); Iterable iterable2 = this.buildStringList2(); assertTrue(CollectionTools.addAll(list1, iterable2)); assertEquals(6, list1.size()); assertTrue(list1.containsAll((List) iterable2)); } public void testAddAllCollectionIterable_ObjectUnmodified() { Set set1 = this.buildObjectSet1(); Iterable iterable3 = this.buildStringList1(); // same elements as set1 assertFalse(CollectionTools.addAll(set1, iterable3)); assertEquals(3, set1.size()); assertTrue(set1.containsAll((List) iterable3)); } public void testAddAllCollectionIterable_EmptyIterable() { Set set1 = this.buildObjectSet1(); assertFalse(CollectionTools.addAll(set1, EmptyIterable.instance())); assertEquals(3, set1.size()); } public void testAddAllCollectionIterableInt_Modified() { List list1 = this.buildStringList1(); List list2 = this.buildStringList2(); Iterable iterable2 = list2; assertTrue(CollectionTools.addAll(list1, iterable2, list2.size())); assertEquals(6, list1.size()); assertTrue(list1.containsAll(this.buildStringList2())); } public void testAddAllCollectionIterableInt_Unmodified() { Set set1 = this.buildStringSet1(); List list1 = this.buildStringList1(); // same elements as set1 Iterable iterable3 = list1; assertFalse(CollectionTools.addAll(set1, iterable3, list1.size())); assertEquals(3, set1.size()); assertTrue(set1.containsAll(this.buildStringList1())); } public void testAddAllCollectionIterator_StringModified() { List list1 = this.buildStringList1(); List list2 = this.buildStringList2(); assertTrue(CollectionTools.addAll(list1, list2.iterator())); assertEquals(6, list1.size()); assertTrue(list1.containsAll(list2)); } public void testAddAllCollectionIterator_StringUnmodified() { Set set1 = this.buildStringSet1(); List list3 = this.buildStringList1(); // same elements as s1 assertFalse(CollectionTools.addAll(set1, list3.iterator())); assertEquals(3, set1.size()); assertTrue(set1.containsAll(list3)); } public void testAddAllCollectionIterator_ObjectModified() { List list1 = this.buildObjectList1(); List list2 = this.buildStringList2(); assertTrue(CollectionTools.addAll(list1, list2.iterator())); assertEquals(6, list1.size()); assertTrue(list1.containsAll(list2)); } public void testAddAllCollectionIterator_ObjectUnmodified() { Set set1 = this.buildObjectSet1(); List list3 = this.buildStringList1(); // same elements as s1 assertFalse(CollectionTools.addAll(set1, list3.iterator())); assertEquals(3, set1.size()); assertTrue(set1.containsAll(list3)); } public void testAddAllCollectionIterator_EmptyIterator() { List list1 = this.buildStringList1(); assertFalse(CollectionTools.addAll(list1, EmptyIterator.instance())); assertEquals(3, list1.size()); } public void testAddAllCollectionIteratorInt_Modified() { List list1 = this.buildStringList1(); List list2 = this.buildStringList2(); assertTrue(CollectionTools.addAll(list1, list2.iterator(), 3)); assertEquals(6, list1.size()); assertTrue(list1.containsAll(list2)); } public void testAddAllCollectionIteratorInt_Unmodified() { Set set1 = this.buildStringSet1(); List list3 = this.buildStringList1(); // same elements as s1 assertFalse(CollectionTools.addAll(set1, list3.iterator(), 3)); assertEquals(3, set1.size()); assertTrue(set1.containsAll(list3)); } public void testAddAllCollectionIteratorInt_EmptyIterator() { List list1 = this.buildStringList1(); assertFalse(CollectionTools.addAll(list1, EmptyIterator.instance(), 0)); assertEquals(3, list1.size()); } public void testAddAllCollectionObjectArray_StringModified() { List list = this.buildStringList1(); String[] a = this.buildStringArray1(); assertTrue(CollectionTools.addAll(list, a)); assertEquals(6, list.size()); assertTrue(list.containsAll(CollectionTools.collection(a))); } public void testAddAllCollectionObjectArray_StringListEmptyArray() { List list = this.buildStringList1(); assertFalse(CollectionTools.addAll(list, new String[0])); } public void testAddAllCollectionObjectArray_StringUnmodified() { Set set = this.buildStringSet1(); String[] a = this.buildStringArray1(); assertFalse(CollectionTools.addAll(set, a)); assertEquals(3, set.size()); assertTrue(set.containsAll(CollectionTools.collection(a))); assertFalse(CollectionTools.addAll(set, new String[0])); } public void testAddAllCollectionObjectArray_StringSetEmptyArray() { Set set = this.buildStringSet1(); assertFalse(CollectionTools.addAll(set, new String[0])); } public void testAddAllCollectionObjectArray_ObjectModified() { List list = this.buildObjectList1(); String[] a = this.buildStringArray1(); assertTrue(CollectionTools.addAll(list, a)); assertEquals(6, list.size()); assertTrue(list.containsAll(CollectionTools.collection(a))); } public void testAddAllCollectionObjectArray_ObjectUnmodified() { String[] a = this.buildStringArray1(); Set set = this.buildObjectSet1(); assertFalse(CollectionTools.addAll(set, a)); assertEquals(3, set.size()); assertTrue(set.containsAll(CollectionTools.collection(a))); } public void testAddAllListIntObjectArray() { List list = this.buildStringList1(); CollectionTools.addAll(list, 2, new String[] { "X", "X", "X" }); assertEquals(6, list.size()); assertTrue(list.contains("X")); assertTrue(Arrays.equals(new Object[] { "zero", "one", "X", "X", "X", "two" }, list.toArray())); } public void testAddAllListIntObjectArray_Zero() { List list = new ArrayList(); CollectionTools.addAll(list, 0, new String[] { "X", "X", "X" }); assertEquals(3, list.size()); assertTrue(list.contains("X")); assertTrue(Arrays.equals(new Object[] { "X", "X", "X" }, list.toArray())); } public void testAddAllListIntObjectArray_EmptyArray() { List list = this.buildStringList1(); CollectionTools.addAll(list, 2, new String[0]); assertEquals(3, list.size()); assertTrue(Arrays.equals(new Object[] { "zero", "one", "two" }, list.toArray())); } public void testAddAllListIntIterable() { List list = this.buildStringList1(); Iterable iterable = Arrays.asList(new String[] { "X", "X", "X" }); CollectionTools.addAll(list, 2, iterable); assertEquals(6, list.size()); assertTrue(list.contains("X")); assertTrue(Arrays.equals(new Object[] { "zero", "one", "X", "X", "X", "two" }, list.toArray())); } public void testAddAllListIntIterable_Zero() { List list = new ArrayList(); Iterable iterable = Arrays.asList(new String[] { "X", "X", "X" }); CollectionTools.addAll(list, 0, iterable); assertEquals(3, list.size()); assertTrue(list.contains("X")); assertTrue(Arrays.equals(new Object[] { "X", "X", "X" }, list.toArray())); } public void testAddAllListIntIterable_EmptyIterable() { List list = this.buildStringList1(); Iterable iterable = EmptyIterable.instance(); CollectionTools.addAll(list, 2, iterable); assertEquals(3, list.size()); assertTrue(Arrays.equals(new Object[] { "zero", "one", "two" }, list.toArray())); } public void testAddAllListIntIterableInt() { List list = this.buildStringList1(); Iterable iterable = Arrays.asList(new String[] { "X", "X", "X" }); CollectionTools.addAll(list, 2, iterable, 3); assertEquals(6, list.size()); assertTrue(list.contains("X")); assertTrue(Arrays.equals(new Object[] { "zero", "one", "X", "X", "X", "two" }, list.toArray())); } public void testAddAllListIntIterableInt_Zero() { List list = new ArrayList(); Iterable iterable = Arrays.asList(new String[] { "X", "X", "X" }); CollectionTools.addAll(list, 0, iterable, 3); assertEquals(3, list.size()); assertTrue(list.contains("X")); assertTrue(Arrays.equals(new Object[] { "X", "X", "X" }, list.toArray())); } public void testAddAllListIntIterableInt_EmptyIterable() { List list = this.buildStringList1(); Iterable iterable = EmptyIterable.instance(); CollectionTools.addAll(list, 2, iterable, 0); assertEquals(3, list.size()); assertTrue(Arrays.equals(new Object[] { "zero", "one", "two" }, list.toArray())); } public void testAddAllListIntIterator() { List list = this.buildStringList1(); Iterator iterator = Arrays.asList(new String[] { "X", "X", "X" }).iterator(); CollectionTools.addAll(list, 2, iterator); assertEquals(6, list.size()); assertTrue(list.contains("X")); assertTrue(Arrays.equals(new Object[] { "zero", "one", "X", "X", "X", "two" }, list.toArray())); } public void testAddAllListIntIterator_Zero() { List list = new ArrayList(); Iterator iterator = Arrays.asList(new String[] { "X", "X", "X" }).iterator(); CollectionTools.addAll(list, 0, iterator); assertEquals(3, list.size()); assertTrue(list.contains("X")); assertTrue(Arrays.equals(new Object[] { "X", "X", "X" }, list.toArray())); } public void testAddAllListIntIterator_EmptyIterator() { List list = this.buildStringList1(); Iterator iterator = EmptyIterator.instance(); CollectionTools.addAll(list, 2, iterator); assertEquals(3, list.size()); assertTrue(Arrays.equals(new Object[] { "zero", "one", "two" }, list.toArray())); } public void testAddAllListIntIteratorInt() { List list = this.buildStringList1(); Iterator iterator = Arrays.asList(new String[] { "X", "X", "X" }).iterator(); CollectionTools.addAll(list, 2, iterator, 3); assertEquals(6, list.size()); assertTrue(list.contains("X")); assertTrue(Arrays.equals(new Object[] { "zero", "one", "X", "X", "X", "two" }, list.toArray())); } public void testAddAllListIntIteratorInt_Zero() { List list = new ArrayList(); Iterator iterator = Arrays.asList(new String[] { "X", "X", "X" }).iterator(); CollectionTools.addAll(list, 0, iterator, 3); assertEquals(3, list.size()); assertTrue(list.contains("X")); assertTrue(Arrays.equals(new Object[] { "X", "X", "X" }, list.toArray())); } public void testAddAllListIntIteratorInt_EmptyIterator() { List list = this.buildStringList1(); Iterator iterator = EmptyIterator.instance(); CollectionTools.addAll(list, 2, iterator, 0); assertEquals(3, list.size()); assertTrue(Arrays.equals(new Object[] { "zero", "one", "two" }, list.toArray())); } // ********** bag ********** public void testBagEnumeration_String() { Bag b = CollectionTools.bag(this.buildStringVector1().elements()); assertEquals(3, b.size()); assertTrue(b.containsAll(this.buildStringVector1())); } public void testBagEnumeration_Object() { Bag b = CollectionTools.bag(this.buildStringVector1().elements()); assertEquals(3, b.size()); assertTrue(b.containsAll(this.buildStringVector1())); } public void testBagEnumeration_Empty() { Bag b = CollectionTools.bag(EmptyEnumeration.instance()); assertEquals(0, b.size()); } public void testBagEnumerationInt() { Bag b = CollectionTools.bag(this.buildStringVector1().elements(), 3); assertEquals(3, b.size()); assertTrue(b.containsAll(this.buildStringVector1())); } public void testBagEnumerationInt_Empty() { Bag b = CollectionTools.bag(EmptyEnumeration.instance(), 3); assertEquals(0, b.size()); } public void testBagIterable() { Iterable iterable = this.buildStringList1(); Bag b = CollectionTools.bag(iterable); assertEquals(3, b.size()); assertTrue(b.containsAll(this.buildStringList1())); } public void testBagIterableInt() { Iterable iterable = this.buildStringList1(); Bag b = CollectionTools.bag(iterable, 3); assertEquals(3, b.size()); assertTrue(b.containsAll(this.buildStringList1())); } public void testBagIterator_String() { Bag b = CollectionTools.bag(this.buildStringList1().iterator()); assertEquals(3, b.size()); assertTrue(b.containsAll(this.buildStringList1())); } public void testBagIterator_StringObject() { Collection c = new ArrayList(); c.add("zero"); c.add("one"); c.add("two"); c.add("three"); Bag b = CollectionTools.bag(c.iterator()); assertEquals(4, b.size()); assertTrue(b.containsAll(c)); } public void testBagIterator_Empty() { Bag b = CollectionTools.bag(EmptyIterator.instance()); assertEquals(0, b.size()); } public void testBagIteratorInt() { Bag b = CollectionTools.bag(this.buildStringList1().iterator(), 3); assertEquals(3, b.size()); assertTrue(b.containsAll(this.buildStringList1())); } public void testBagIteratorInt_Empty() { Bag b = CollectionTools.bag(EmptyIterator.instance(), 3); assertEquals(0, b.size()); } public void testBagObjectArray() { Bag b = CollectionTools.bag(this.buildStringArray1()); assertEquals(3, b.size()); assertTrue(CollectionTools.containsAll(b, (Object[]) this.buildStringArray1())); } public void testBagObjectArray_Vararg() { Bag b = CollectionTools.bag("foo", "bar", "baz"); assertEquals(3, b.size()); assertTrue(CollectionTools.containsAll(b, new Object[]{"foo", "bar", "baz"})); } public void testBagObjectArray_Empty() { Bag b = CollectionTools.bag(Bag.Empty.instance()); assertEquals(0, b.size()); } // ********** collection ********** public void testCollectionEnumeration() { Collection c = CollectionTools.collection(this.buildStringVector1().elements()); assertEquals(3, c.size()); assertTrue(c.containsAll(this.buildStringVector1())); } public void testCollectionEnumeration_ObjectString() { Collection c = CollectionTools.collection(this.buildStringVector1().elements()); assertEquals(3, c.size()); assertTrue(c.containsAll(this.buildStringVector1())); } public void testCollectionEnumerationInt() { Collection c = CollectionTools.collection(this.buildStringVector1().elements(), 3); assertEquals(3, c.size()); assertTrue(c.containsAll(this.buildStringVector1())); } public void testCollectionIterable() { Iterable iterable = this.buildStringList1(); Collection c = CollectionTools.collection(iterable); assertEquals(3, c.size()); assertTrue(c.containsAll(this.buildStringList1())); } public void testCollectionIterableInt() { Iterable iterable = this.buildStringList1(); Collection c = CollectionTools.collection(iterable, 3); assertEquals(3, c.size()); assertTrue(c.containsAll(this.buildStringList1())); } public void testCollectionIterator() { Collection c = CollectionTools.collection(this.buildStringList1().iterator()); assertEquals(3, c.size()); assertTrue(c.containsAll(this.buildStringList1())); } public void testCollectionIterator_ObjectString() { Collection c = CollectionTools.collection(this.buildStringList1().iterator()); assertEquals(3, c.size()); assertTrue(c.containsAll(this.buildStringList1())); } public void testCollectionIteratorInt() { Collection c = CollectionTools.collection(this.buildStringList1().iterator(), 3); assertEquals(3, c.size()); assertTrue(c.containsAll(this.buildStringList1())); } public void testCollectionObjectArray() { Collection c = CollectionTools.collection(this.buildStringArray1()); assertEquals(3, c.size()); assertTrue(CollectionTools.containsAll(c, (Object[]) this.buildStringArray1())); } // ********** contains ********** public void testContainsEnumerationObject_String() { Vector v = this.buildStringVector1(); assertTrue(CollectionTools.contains(v.elements(), "one")); assertFalse(CollectionTools.contains(v.elements(), null)); v.add(null); assertTrue(CollectionTools.contains(v.elements(), null)); } public void testContainsEnumerationObject_Object() { Vector c = new Vector(); c.add("zero"); c.add("one"); c.add("two"); c.add("three"); String one = "one"; assertTrue(CollectionTools.contains(c.elements(), one)); assertFalse(CollectionTools.contains(c.elements(), null)); c.add(null); assertTrue(CollectionTools.contains(c.elements(), null)); } public void testContainsIterableObject() { Collection c = this.buildStringList1(); Iterable iterable = c; assertTrue(CollectionTools.contains(iterable, "one")); assertFalse(CollectionTools.contains(iterable, null)); c.add(null); assertTrue(CollectionTools.contains(iterable, null)); } public void testContainsIteratorObject_String() { Collection c = this.buildStringList1(); assertTrue(CollectionTools.contains(c.iterator(), "one")); assertFalse(CollectionTools.contains(c.iterator(), null)); c.add(null); assertTrue(CollectionTools.contains(c.iterator(), null)); } public void testContainsIteratorObject_Object() { Collection c = new HashBag(); c.add("zero"); c.add("one"); c.add("two"); c.add("three"); String one = "one"; assertTrue(CollectionTools.contains(c.iterator(), one)); assertFalse(CollectionTools.contains(c.iterator(), null)); c.add(null); assertTrue(CollectionTools.contains(c.iterator(), null)); } // ********** contains all ********** public void testContainsAllCollectionIterable() { Iterable iterable = this.buildStringList1(); assertTrue(CollectionTools.containsAll(this.buildStringList1(), iterable)); } public void testContainsAllCollectionIterator_String() { assertTrue(CollectionTools.containsAll(this.buildStringList1(), this.buildStringList1().iterator())); } public void testContainsAllCollectionIterator_Object() { Collection c1 = new ArrayList(); c1.add("zero"); c1.add("one"); c1.add("two"); Collection c2 = new ArrayList(); c2.add("two"); c2.add("zero"); c2.add("one"); assertTrue(CollectionTools.containsAll(c1, c2.iterator())); } public void testContainsAllCollectionObjectArray_StringObject() { assertTrue(CollectionTools.containsAll(this.buildStringList1(), this.buildObjectArray1())); } public void testContainsAllCollectionObjectArray() { Object[] a = new Object[] { "zero", "one", "two" }; assertTrue(CollectionTools.containsAll(this.buildStringList1(), a)); } public void testContainsAllIterableCollection() { Iterable iterable = this.buildStringList1(); assertTrue(CollectionTools.containsAll(iterable, this.buildStringList1())); } public void testContainsAllIterableIntCollection() { Iterable iterable = this.buildStringList1(); assertTrue(CollectionTools.containsAll(iterable, 3, this.buildStringList1())); } public void testContainsAllIterableIterable() { Iterable iterable1 = this.buildStringList1(); Iterable iterable2 = this.buildStringList1(); assertTrue(CollectionTools.containsAll(iterable1, iterable2)); } public void testContainsAllIterableIntIterable() { Iterable iterable1 = this.buildStringList1(); Iterable iterable2 = this.buildStringList1(); assertTrue(CollectionTools.containsAll(iterable1, 3, iterable2)); } public void testContainsAllIterableIterator() { Iterable iterable = this.buildStringList1(); assertTrue(CollectionTools.containsAll(iterable, this.buildStringList1().iterator())); } public void testContainsAllIterableIntIterator() { Iterable iterable = this.buildStringList1(); assertTrue(CollectionTools.containsAll(iterable, 3, this.buildStringList1().iterator())); } public void testContainsAllIterableObjectArray() { Iterable iterable = this.buildStringList1(); assertTrue(CollectionTools.containsAll(iterable, this.buildObjectArray1())); iterable = this.buildStringList2(); assertFalse(CollectionTools.containsAll(iterable, this.buildObjectArray1())); } public void testContainsAllIterableIntObjectArray() { Iterable iterable = this.buildStringList1(); assertTrue(CollectionTools.containsAll(iterable, 3, this.buildObjectArray1())); iterable = this.buildStringList2(); assertFalse(CollectionTools.containsAll(iterable, 3, this.buildObjectArray1())); } public void testContainsAllIteratorCollection_StringString() { assertTrue(CollectionTools.containsAll(this.buildStringList1().iterator(), this.buildStringList1())); assertFalse(CollectionTools.containsAll(this.buildStringList1().iterator(), this.buildStringList2())); } public void testContainsAllIteratorCollection_ObjectString() { Collection c1 = new ArrayList(); c1.add("zero"); c1.add("one"); c1.add("two"); Collection c2 = new ArrayList(); c2.add("zero"); c2.add("one"); c2.add("two"); assertTrue(CollectionTools.containsAll(c1.iterator(), c2)); } public void testContainsAllIteratorIntCollection() { assertTrue(CollectionTools.containsAll(this.buildStringList1().iterator(), 5, this.buildStringList1())); assertFalse(CollectionTools.containsAll(this.buildStringList1().iterator(), 5, this.buildStringList2())); } public void testContainsAllIteratorIterable() { Iterable iterable = this.buildStringList1(); assertTrue(CollectionTools.containsAll(this.buildStringList1().iterator(), iterable)); iterable = this.buildStringList2(); assertFalse(CollectionTools.containsAll(this.buildStringList1().iterator(), iterable)); } public void testContainsAllIteratorIntIterable() { Iterable iterable = this.buildStringList1(); assertTrue(CollectionTools.containsAll(this.buildStringList1().iterator(), 3, iterable)); iterable = this.buildStringList2(); assertFalse(CollectionTools.containsAll(this.buildStringList1().iterator(), 3, iterable)); } public void testContainsAllIteratorIterator_StringString() { assertTrue(CollectionTools.containsAll(this.buildStringList1().iterator(), this.buildStringList1().iterator())); assertFalse(CollectionTools.containsAll(this.buildStringList1().iterator(), this.buildStringList2().iterator())); } public void testContainsAllIteratorIterator_ObjectString() { Collection c1 = new ArrayList(); c1.add("zero"); c1.add("one"); c1.add("two"); Collection c2 = new ArrayList(); c2.add("zero"); c2.add("one"); c2.add("two"); assertTrue(CollectionTools.containsAll(c1.iterator(), c2.iterator())); } public void testContainsAllIteratorIntIterator() { assertTrue(CollectionTools.containsAll(this.buildStringList1().iterator(), 3, this.buildStringList1().iterator())); assertFalse(CollectionTools.containsAll(this.buildStringList1().iterator(), 3, this.buildStringList2().iterator())); } public void testContainsAllIteratorObjectArray() { assertTrue(CollectionTools.containsAll(this.buildStringList1().iterator(), this.buildObjectArray1())); assertFalse(CollectionTools.containsAll(this.buildStringList1().iterator(), this.buildObjectArray2())); } public void testContainsAllIteratorIntObjectArray() { assertTrue(CollectionTools.containsAll(this.buildStringList1().iterator(), 3, this.buildObjectArray1())); assertFalse(CollectionTools.containsAll(this.buildStringList1().iterator(), 3, this.buildObjectArray2())); } // ********** diff ********** public void testDiffEndListList() { List list1 = new ArrayList(); list1.add("a"); list1.add("b"); list1.add("c"); List list2 = new ArrayList(); list2.add(new String("a")); list2.add(new String("b")); list2.add(new String("c")); assertEquals(-1, CollectionTools.diffEnd(list1, list2)); } public void testDiffRangeListList() { List list1 = new ArrayList(); list1.add("a"); list1.add("b"); list1.add("c"); List list2 = new ArrayList(); list2.add(new String("a")); list2.add(new String("b")); list2.add(new String("c")); assertEquals(new Range(3, -1), CollectionTools.diffRange(list1, list2)); } public void testDiffStartListList() { List list1 = new ArrayList(); list1.add("a"); list1.add("b"); list1.add("c"); List list2 = new ArrayList(); list2.add(new String("a")); list2.add(new String("b")); list2.add(new String("c")); assertEquals(3, CollectionTools.diffStart(list1, list2)); } // ********** identity diff ********** public void testIdentityDiffEndListList() { List list1 = new ArrayList(); list1.add("a"); list1.add("b"); list1.add("c"); List list2 = new ArrayList(); list2.add("a"); list2.add("b"); list2.add("c"); assertEquals(-1, CollectionTools.identityDiffEnd(list1, list2)); } public void testIdentityDiffRangeListList() { List list1 = new ArrayList(); list1.add("a"); list1.add("b"); list1.add("c"); List list2 = new ArrayList(); list2.add("a"); list2.add("b"); list2.add("c"); assertEquals(new Range(3, -1), CollectionTools.identityDiffRange(list1, list2)); } public void testIdentityDiffStartListList() { List list1 = new ArrayList(); list1.add("a"); list1.add("b"); list1.add("c"); List list2 = new ArrayList(); list2.add("a"); list2.add("b"); list2.add("c"); assertEquals(3, CollectionTools.identityDiffStart(list1, list2)); } // ********** elements are equal ********** public void testElementsAreDifferentIterableIterable() { List list1 = new ArrayList(); list1.add("1000"); list1.add("2000"); list1.add("3000"); list1.add("4000"); List list2 = new ArrayList(); assertTrue(CollectionTools.elementsAreDifferent(list1, list2)); assertFalse(CollectionTools.elementsAreEqual(list1, list2)); } public void testElementsAreDifferentIteratorIterator() { List list1 = new ArrayList(); list1.add("1000"); list1.add("2000"); list1.add("3000"); list1.add("4000"); List list2 = new ArrayList(); assertTrue(CollectionTools.elementsAreDifferent(list1.iterator(), list2.iterator())); assertFalse(CollectionTools.elementsAreEqual(list1, list2)); } public void testElementsAreEqualIterableIterable() { List list1 = new ArrayList(); list1.add("1000"); list1.add("2000"); list1.add("3000"); list1.add("4000"); List list2 = new ArrayList(); for (int i = 0; i < list1.size(); i++) { list2.add(String.valueOf((i + 1) * 1000)); } assertFalse(CollectionTools.elementsAreIdentical(list1, list2)); assertFalse(CollectionTools.elementsAreDifferent(list1, list2)); assertTrue(CollectionTools.elementsAreEqual(list1, list2)); } public void testElementsAreEqualIteratorIterator() { List list1 = new ArrayList(); list1.add("1000"); list1.add("2000"); list1.add("3000"); list1.add("4000"); List list2 = new ArrayList(); for (int i = 0; i < list1.size(); i++) { list2.add(String.valueOf((i + 1) * 1000)); } assertFalse(CollectionTools.elementsAreIdentical(list1.iterator(), list2.iterator())); assertFalse(CollectionTools.elementsAreDifferent(list1.iterator(), list2.iterator())); assertTrue(CollectionTools.elementsAreEqual(list1.iterator(), list2.iterator())); } // ********** elements are identical ********** public void testElementsAreIdenticalIterableIterable() { List list1 = new ArrayList(); list1.add("0"); list1.add("1"); list1.add("2"); list1.add("3"); Iterable iterable1 = list1; List list2 = new ArrayList(); for (String s : list1) { list2.add(s); } Iterable iterable2 = list2; assertTrue(CollectionTools.elementsAreIdentical(iterable1, iterable2)); assertTrue(CollectionTools.elementsAreEqual(iterable1, iterable2)); } public void testElementsAreIdenticalIteratorIterator() { List list1 = new ArrayList(); list1.add("0"); list1.add("1"); list1.add("2"); list1.add("3"); List list2 = new ArrayList(); for (String s : list1) { list2.add(s); } assertTrue(CollectionTools.elementsAreIdentical(list1.iterator(), list2.iterator())); assertTrue(CollectionTools.elementsAreEqual(list1.iterator(), list2.iterator())); } public void testElementsAreIdenticalIteratorIterator_Not() { List list1 = new ArrayList(); list1.add("0"); list1.add("1"); list1.add("2"); list1.add("3"); List list2 = new ArrayList(); for (String s : list1) { list2.add(s); } list2.remove(0); assertFalse(CollectionTools.elementsAreIdentical(list1.iterator(), list2.iterator())); assertFalse(CollectionTools.elementsAreEqual(list1.iterator(), list2.iterator())); } public void testElementsAreIdenticalIteratorIterator_DifferentSizes() { List list1 = new ArrayList(); list1.add("0"); list1.add("1"); list1.add("2"); list1.add("3"); List list2 = new ArrayList(); for (String s : list1) { list2.add(s); } list2.remove(3); assertFalse(CollectionTools.elementsAreIdentical(list1.iterator(), list2.iterator())); assertFalse(CollectionTools.elementsAreEqual(list1.iterator(), list2.iterator())); } // ********** get ********** public void testGetIterableInt() { List list = this.buildStringList1(); Iterable iterable = list; String o = CollectionTools.get(iterable, 1); assertEquals("one", o); list.add(null); o = CollectionTools.get(iterable, 3); assertNull(o); } public void testGetIteratorInt1() { List list = this.buildStringList1(); String o = CollectionTools.get(list.iterator(), 1); assertEquals("one", o); list.add(null); o = CollectionTools.get(list.iterator(), list.size() - 1); assertNull(o); } public void testGetIteratorInt2() { List list = this.buildStringList1(); boolean exCaught = false; try { CollectionTools.get(list.iterator(), list.size()); fail(); } catch (IndexOutOfBoundsException ex) { exCaught = true; } assertTrue(exCaught); } // ********** hash code ********** public void testHashCodeIterable1() { Iterable iterable = null; assertEquals(0, CollectionTools.hashCode(iterable)); } public void testHashCodeIterable2() { List list = this.buildStringList1(); Iterable iterable = list; int hashCode = CollectionTools.hashCode(iterable); assertEquals(list.hashCode(), hashCode); list.add(null); hashCode = CollectionTools.hashCode(iterable); assertEquals(list.hashCode(), hashCode); } // ********** index of ********** public void testIndexOfIterableObject_String() { Iterable iterable = this.buildStringList1(); assertEquals(1, CollectionTools.indexOf(iterable, "one")); } public void testIndexOfIteratorObject_String() { List list = this.buildStringList1(); assertEquals(1, CollectionTools.indexOf(list.iterator(), "one")); } public void testIndexOfIteratorObject_String_Not() { List list = this.buildStringList1(); assertEquals(-1, CollectionTools.indexOf(list.iterator(), null)); assertEquals(-1, CollectionTools.indexOf(list.iterator(), "shazam")); } public void testIndexOfIteratorObject_Null() { List list = this.buildStringList1(); list.add(null); assertEquals(list.size() - 1, CollectionTools.indexOf(list.iterator(), null)); } public void testIndexOfIteratorObject_Object() { List list = new ArrayList(); list.add("0"); list.add("1"); list.add("2"); list.add("3"); String one = "1"; assertEquals(1, CollectionTools.indexOf(list.iterator(), one)); list.add(null); assertEquals(list.size() - 1, CollectionTools.indexOf(list.iterator(), null)); } // ********** insertion index of ********** public void testInsertionIndexOfListComparable() { List list = Arrays.asList(new String[] { "A", "C", "D" }); assertEquals(1, CollectionTools.insertionIndexOf(list, "B")); list = Arrays.asList(new String[] { "A", "B", "C", "D" }); assertEquals(2, CollectionTools.insertionIndexOf(list, "B")); list = Arrays.asList(new String[] { "A", "B", "B", "B", "C", "D" }); assertEquals(4, CollectionTools.insertionIndexOf(list, "B")); list = Arrays.asList(new String[] { "A", "B", "B", "B", "C", "D" }); assertEquals(6, CollectionTools.insertionIndexOf(list, "E")); list = Arrays.asList(new String[] { "B", "B", "B", "C", "D" }); assertEquals(0, CollectionTools.insertionIndexOf(list, "A")); list = Arrays.asList(new String[] { "A", "A", "B", "B", "C", "D" }); assertEquals(2, CollectionTools.insertionIndexOf(list, "A")); } public void testInsertionIndexOfListObjectComparator() { Comparator c = new ReverseComparator(); List list = Arrays.asList(new String[] { "D", "C", "A" }); assertEquals(2, CollectionTools.insertionIndexOf(list, "B", c)); list = Arrays.asList(new String[] { "D", "C", "B", "A" }); assertEquals(3, CollectionTools.insertionIndexOf(list, "B", c)); list = Arrays.asList(new String[] { "D", "C", "B", "B", "B", "A" }); assertEquals(5, CollectionTools.insertionIndexOf(list, "B", c)); list = Arrays.asList(new String[] { "D", "C", "B", "B", "B", "A" }); assertEquals(0, CollectionTools.insertionIndexOf(list, "E", c)); list = Arrays.asList(new String[] { "D", "C", "B", "B", "B" }); assertEquals(5, CollectionTools.insertionIndexOf(list, "A", c)); list = Arrays.asList(new String[] { "D", "C", "B", "B", "A", "A" }); assertEquals(6, CollectionTools.insertionIndexOf(list, "A", c)); } // ********** is empty ********** public void testIsEmptyIterable() { assertFalse(CollectionTools.isEmpty(buildObjectList1())); assertTrue(CollectionTools.isEmpty(EmptyIterable.instance())); } public void testIsEmptyIterator() { assertFalse(CollectionTools.isEmpty(buildObjectList1().iterator())); assertTrue(CollectionTools.isEmpty(EmptyIterator.instance())); } // ********** iterable/iterator ********** public void testIterableObjectArray() { String[] strings = this.buildStringArray1(); int i = 0; for (String string : CollectionTools.iterable(strings)) { assertEquals(strings[i++], string); } } public void testIteratorObjectArray() { String[] a = this.buildStringArray1(); int i = 0; for (Iterator stream = CollectionTools.iterator(a); stream.hasNext(); i++) { assertEquals(a[i], stream.next()); } } // ********** last ********** public void testLastIterable1() { List list = this.buildStringList1(); Iterable iterable = list; assertEquals("two", CollectionTools.last(iterable)); list.add(null); assertEquals(null, CollectionTools.last(iterable)); } public void testLastIterable2() { Iterable iterable = new ArrayList(); boolean exCaught = false; try { CollectionTools.last(iterable); fail(); } catch (NoSuchElementException ex) { exCaught = true; } assertTrue(exCaught); } public void testLastIterator1() { List list = this.buildStringList1(); assertEquals("two", CollectionTools.last(list.iterator())); list.add(null); assertEquals(null, CollectionTools.last(list.iterator())); } public void testLastIterator2() { List list = new ArrayList(); boolean exCaught = false; try { CollectionTools.last(list.iterator()); fail(); } catch (NoSuchElementException ex) { exCaught = true; } assertTrue(exCaught); } // ********** last index of ********** public void testLastIndexOfIterableObject() { List list = this.buildStringList1(); Iterable iterable = list; assertEquals(1, CollectionTools.lastIndexOf(iterable, "one")); list.add(null); assertEquals(list.size() - 1, CollectionTools.lastIndexOf(iterable, null)); } public void testLastIndexOfIterableIntObject() { List list = this.buildStringList1(); Iterable iterable = list; assertEquals(1, CollectionTools.lastIndexOf(iterable, 23, "one")); list.add(null); assertEquals(list.size() - 1, CollectionTools.lastIndexOf(iterable, 42, null)); } public void testLastIndexOfIteratorObject() { List list = this.buildStringList1(); assertEquals(1, CollectionTools.lastIndexOf(list.iterator(), "one")); list.add(null); assertEquals(list.size() - 1, CollectionTools.lastIndexOf(list.iterator(), null)); } public void testLastIndexOfIteratorObject_Empty() { assertEquals(-1, CollectionTools.lastIndexOf(EmptyIterator.instance(), "foo")); } public void testLastIndexOfIteratorIntObject() { List list = this.buildStringList1(); assertEquals(1, CollectionTools.lastIndexOf(list.iterator(), 3, "one")); list.add(null); assertEquals(list.size() - 1, CollectionTools.lastIndexOf(list.iterator(), 4, null)); } public void testLastIndexOfIteratorIntObject_Empty() { assertEquals(-1, CollectionTools.lastIndexOf(EmptyIterator.instance(), 42, "foo")); } // ********** list ********** public void testListIterable() { Iterable iterable = this.buildStringList1(); assertEquals(this.buildStringList1(), CollectionTools.list(iterable)); } public void testListIterableInt() { Iterable iterable = this.buildStringList1(); assertEquals(this.buildStringList1(), CollectionTools.list(iterable, 3)); } public void testListIterator_String() { List list = CollectionTools.list(this.buildStringList1().iterator()); assertEquals(this.buildStringList1(), list); } public void testListIterator_StringObject() { List list1 = new ArrayList(); list1.add("0"); list1.add("1"); list1.add("2"); list1.add("3"); List list2 = CollectionTools.list(list1.iterator()); assertEquals(list1, list2); } public void testListIterator_Empty() { assertEquals(0, CollectionTools.list(EmptyIterator.instance()).size()); } public void testListIteratorInt() { List list = CollectionTools.list(this.buildStringList1().iterator(), 3); assertEquals(this.buildStringList1(), list); } public void testListIteratorInt_Empty() { assertEquals(0, CollectionTools.list(EmptyIterator.instance(), 5).size()); } public void testListObjectArray() { List list = CollectionTools.list(this.buildStringArray1()); assertEquals(this.buildStringList1(), list); } public void testListIteratorObjectArray() { String[] a = this.buildStringArray1(); int i = 0; for (ListIterator stream = CollectionTools.listIterator(a); stream.hasNext(); i++) { assertEquals(a[i], stream.next()); } } public void testListIteratorObjectArrayInt() { String[] a = this.buildStringArray1(); int i = 1; for (ListIterator stream = CollectionTools.listIterator(a, 1); stream.hasNext(); i++) { assertEquals(a[i], stream.next()); } } // ********** move ********** public void testMoveListIntIntRandomAccess() { List list = new ArrayList(); CollectionTools.addAll(list, new String[] { "0", "1", "2", "3", "4", "5" }); List result = CollectionTools.move(list, 4, 2); assertSame(list, result); // the array is modified in place and returned assertTrue(Arrays.equals(new String[] { "0", "1", "3", "4", "2", "5" }, result.toArray())); result = CollectionTools.move(list, 0, 5); assertSame(list, result); // the array is modified in place and returned assertTrue(Arrays.equals(new String[] { "5", "0", "1", "3", "4", "2" }, result.toArray())); result = CollectionTools.move(list, 2, 4); assertSame(list, result); // the array is modified in place and returned assertTrue(Arrays.equals(new String[] { "5", "0", "4", "1", "3", "2" }, result.toArray())); result = CollectionTools.move(list, 2, 2); assertSame(list, result); // the array is modified in place and returned assertTrue(Arrays.equals(new String[] { "5", "0", "4", "1", "3", "2" }, result.toArray())); } public void testMoveListIntIntSequentialAccess() { List list = new LinkedList(); CollectionTools.addAll(list, new String[] { "0", "1", "2", "3", "4", "5" }); List result = CollectionTools.move(list, 4, 2); assertSame(list, result); // the array is modified in place and returned assertTrue(Arrays.equals(new String[] { "0", "1", "3", "4", "2", "5" }, result.toArray())); result = CollectionTools.move(list, 0, 5); assertSame(list, result); // the array is modified in place and returned assertTrue(Arrays.equals(new String[] { "5", "0", "1", "3", "4", "2" }, result.toArray())); result = CollectionTools.move(list, 2, 4); assertSame(list, result); // the array is modified in place and returned assertTrue(Arrays.equals(new String[] { "5", "0", "4", "1", "3", "2" }, result.toArray())); result = CollectionTools.move(list, 2, 2); assertSame(list, result); // the array is modified in place and returned assertTrue(Arrays.equals(new String[] { "5", "0", "4", "1", "3", "2" }, result.toArray())); } public void testMoveListIntIntIntRandomAccess() { List list = new ArrayList(Arrays.asList(new String[] { "0", "1", "2", "3", "4", "5" })); List result = CollectionTools.move(list, 4, 2, 1); assertSame(list, result); // the array is modified in place and returned assertTrue(Arrays.equals(new String[] { "0", "1", "3", "4", "2", "5" }, result.toArray())); result = CollectionTools.move(list, 0, 5, 1); assertSame(list, result); // the array is modified in place and returned assertTrue(Arrays.equals(new String[] { "5", "0", "1", "3", "4", "2" }, result.toArray())); result = CollectionTools.move(list, 2, 4, 1); assertSame(list, result); // the array is modified in place and returned assertTrue(Arrays.equals(new String[] { "5", "0", "4", "1", "3", "2" }, result.toArray())); result = CollectionTools.move(list, 2, 4, 2); assertSame(list, result); // the array is modified in place and returned assertTrue(Arrays.equals(new String[] { "5", "0", "3", "2", "4", "1" }, result.toArray())); result = CollectionTools.move(list, 0, 1, 4); assertSame(list, result); // the array is modified in place and returned assertTrue(Arrays.equals(new String[] { "0", "3", "2", "4", "5", "1" }, result.toArray())); result = CollectionTools.move(list, 1, 0, 4); assertSame(list, result); // the array is modified in place and returned assertTrue(Arrays.equals(new String[] { "5", "0", "3", "2", "4", "1" }, result.toArray())); result = CollectionTools.move(list, 1, 1, 4); assertSame(list, result); // the array is modified in place and returned assertTrue(Arrays.equals(new String[] { "5", "0", "3", "2", "4", "1" }, result.toArray())); result = CollectionTools.move(list, 1, 0, 0); assertSame(list, result); // the array is modified in place and returned assertTrue(Arrays.equals(new String[] { "5", "0", "3", "2", "4", "1" }, result.toArray())); } public void testMoveListIntIntIntSequentialAccess() { List list = new LinkedList(Arrays.asList(new String[] { "0", "1", "2", "3", "4", "5" })); List result = CollectionTools.move(list, 4, 2, 1); assertSame(list, result); // the array is modified in place and returned assertTrue(Arrays.equals(new String[] { "0", "1", "3", "4", "2", "5" }, result.toArray())); result = CollectionTools.move(list, 0, 5, 1); assertSame(list, result); // the array is modified in place and returned assertTrue(Arrays.equals(new String[] { "5", "0", "1", "3", "4", "2" }, result.toArray())); result = CollectionTools.move(list, 2, 4, 1); assertSame(list, result); // the array is modified in place and returned assertTrue(Arrays.equals(new String[] { "5", "0", "4", "1", "3", "2" }, result.toArray())); result = CollectionTools.move(list, 2, 4, 2); assertSame(list, result); // the array is modified in place and returned assertTrue(Arrays.equals(new String[] { "5", "0", "3", "2", "4", "1" }, result.toArray())); result = CollectionTools.move(list, 0, 1, 4); assertSame(list, result); // the array is modified in place and returned assertTrue(Arrays.equals(new String[] { "0", "3", "2", "4", "5", "1" }, result.toArray())); result = CollectionTools.move(list, 1, 0, 4); assertSame(list, result); // the array is modified in place and returned assertTrue(Arrays.equals(new String[] { "5", "0", "3", "2", "4", "1" }, result.toArray())); result = CollectionTools.move(list, 1, 1, 4); assertSame(list, result); // the array is modified in place and returned assertTrue(Arrays.equals(new String[] { "5", "0", "3", "2", "4", "1" }, result.toArray())); result = CollectionTools.move(list, 1, 0, 0); assertSame(list, result); // the array is modified in place and returned assertTrue(Arrays.equals(new String[] { "5", "0", "3", "2", "4", "1" }, result.toArray())); } // ********** remove all ********** public void testRemoveAllCollectionIterable() { Collection c = this.buildStringList1(); Iterable iterable = this.buildStringList1(); assertTrue(CollectionTools.removeAll(c, iterable)); assertEquals(0, c.size()); assertFalse(c.contains("one")); assertFalse(c.contains("two")); assertFalse(c.contains("three")); c = this.buildStringList1(); iterable = this.buildStringList2(); assertFalse(CollectionTools.removeAll(c, iterable)); assertEquals(this.buildStringList1().size(), c.size()); assertEquals(this.buildStringList1(), c); } public void testRemoveAllCollectionIterableInt() { Collection c = this.buildStringList1(); Iterable iterable = this.buildStringList1(); assertTrue(CollectionTools.removeAll(c, iterable, 4)); assertEquals(0, c.size()); assertFalse(c.contains("one")); assertFalse(c.contains("two")); assertFalse(c.contains("three")); c = this.buildStringList1(); iterable = this.buildStringList2(); assertFalse(CollectionTools.removeAll(c, iterable, 55)); assertEquals(this.buildStringList1().size(), c.size()); assertEquals(this.buildStringList1(), c); } public void testRemoveAllCollectionIterator_Empty() { Collection c = this.buildStringList1(); assertTrue(CollectionTools.removeAll(c, this.buildStringList1().iterator())); assertEquals(0, c.size()); assertFalse(c.contains("one")); assertFalse(c.contains("two")); assertFalse(c.contains("three")); c = this.buildStringList1(); assertFalse(CollectionTools.removeAll(c, this.buildStringList2().iterator())); assertEquals(this.buildStringList1().size(), c.size()); assertEquals(this.buildStringList1(), c); c = this.buildStringList1(); assertFalse(CollectionTools.removeAll(c, EmptyIterator.instance())); assertEquals(this.buildStringList1().size(), c.size()); assertEquals(this.buildStringList1(), c); } public void testRemoveAllCollectionIteratorInt_Empty() { Collection c = this.buildStringList1(); assertTrue(CollectionTools.removeAll(c, this.buildStringList1().iterator(), 5)); assertEquals(0, c.size()); assertFalse(c.contains("one")); assertFalse(c.contains("two")); assertFalse(c.contains("three")); c = this.buildStringList1(); assertFalse(CollectionTools.removeAll(c, this.buildStringList2().iterator(), 5)); assertEquals(this.buildStringList1().size(), c.size()); assertEquals(this.buildStringList1(), c); c = this.buildStringList1(); assertFalse(CollectionTools.removeAll(c, EmptyIterator.instance(), 0)); assertEquals(this.buildStringList1().size(), c.size()); assertEquals(this.buildStringList1(), c); } public void testRemoveAllCollectionIterator_Duplicates() { Collection c = new ArrayList(); c.add("a"); c.add("a"); c.add("b"); c.add("c"); c.add("d"); c.add("d"); String[] a = new String[] { "a", "d" }; Iterator iterator = new ArrayIterator(a); assertTrue(CollectionTools.removeAll(c, iterator)); assertEquals(2, c.size()); assertFalse(c.contains("a")); assertTrue(c.contains("b")); assertTrue(c.contains("c")); assertFalse(c.contains("d")); iterator = new ArrayIterator(a); assertFalse(CollectionTools.removeAll(c, iterator)); } public void testRemoveAllCollectionIterator_ObjectString() { Collection c = new ArrayList(); c.add("a"); c.add("a"); c.add("b"); c.add("c"); c.add("d"); c.add("d"); String[] a = new String[] { "a", "d" }; Iterator iterator = new ArrayIterator(a); assertTrue(CollectionTools.removeAll(c, iterator)); assertEquals(2, c.size()); assertFalse(c.contains("a")); assertTrue(c.contains("b")); assertTrue(c.contains("c")); assertFalse(c.contains("d")); iterator = new ArrayIterator(a); assertFalse(CollectionTools.removeAll(c, iterator)); } public void testRemoveAllCollectionObjectArray_Empty() { Collection c = this.buildStringList1(); assertTrue(CollectionTools.removeAll(c, this.buildObjectArray1())); assertEquals(0, c.size()); assertFalse(c.contains("one")); assertFalse(c.contains("two")); assertFalse(c.contains("three")); c = this.buildStringList1(); assertFalse(CollectionTools.removeAll(c, this.buildObjectArray2())); assertEquals(this.buildStringList1().size(), c.size()); assertEquals(this.buildStringList1(), c); c = this.buildStringList1(); assertFalse(CollectionTools.removeAll(c, new Object[0])); assertEquals(this.buildStringList1().size(), c.size()); assertEquals(this.buildStringList1(), c); } public void testRemoveAllCollectionObjectArray_Duplicates() { Collection c = new ArrayList(); c.add("a"); c.add("a"); c.add("b"); c.add("c"); c.add("d"); c.add("d"); String[] a = new String[] { "a", "d" }; assertTrue(CollectionTools.removeAll(c, (Object[]) a)); assertEquals(2, c.size()); assertFalse(c.contains("a")); assertTrue(c.contains("b")); assertTrue(c.contains("c")); assertFalse(c.contains("d")); assertFalse(CollectionTools.removeAll(c,(Object[]) a)); } public void testRemoveAllCollectionObjectArray_MoreDuplicates() { Collection c = new ArrayList(); c.add("a"); c.add("b"); c.add("c"); c.add("d"); c.add("a"); c.add("d"); c.add("d"); c.add("a"); c.add("c"); String[] a = new String[] { "a", "d" }; assertTrue(CollectionTools.removeAll(c, (Object[]) a)); assertEquals(3, c.size()); assertFalse(c.contains("a")); assertTrue(c.contains("b")); assertTrue(c.contains("c")); assertFalse(c.contains("d")); assertFalse(CollectionTools.removeAll(c, (Object[]) a)); } // ********** remove all occurrences ********** public void testRemoveAllOccurrencesCollectionObject() { Collection c = this.buildStringList1(); assertEquals(3, c.size()); assertFalse(CollectionTools.removeAllOccurrences(c, "three")); assertTrue(CollectionTools.removeAllOccurrences(c, "two")); assertFalse(CollectionTools.removeAllOccurrences(c, "two")); assertEquals(2, c.size()); c.add("five"); c.add("five"); c.add("five"); assertEquals(5, c.size()); assertTrue(CollectionTools.removeAllOccurrences(c, "five")); assertFalse(CollectionTools.removeAllOccurrences(c, "five")); assertEquals(2, c.size()); c.add(null); c.add(null); c.add(null); assertEquals(5, c.size()); assertTrue(CollectionTools.removeAllOccurrences(c, null)); assertFalse(CollectionTools.removeAllOccurrences(c, null)); assertEquals(2, c.size()); } // ********** remove elements at index ********** public void testRemoveElementsAtIndexListIntInt() { List list = new ArrayList(Arrays.asList(new String[] { "A", "B", "A", "C", "A", "D" })); List removed = CollectionTools.removeElementsAtIndex(list, 3, 2); assertTrue(Arrays.equals(new String[] { "A", "B", "A", "D" }, list.toArray())); assertTrue(Arrays.equals(new String[] { "C", "A" }, removed.toArray())); list = new ArrayList(Arrays.asList(new String[] { "A", "B", "C", "D", "E", "F" })); removed = CollectionTools.removeElementsAtIndex(list, 3, 3); assertTrue(Arrays.equals(new String[] { "A", "B", "C" }, list.toArray())); assertTrue(Arrays.equals(new String[] { "D", "E", "F" }, removed.toArray())); list = new ArrayList(Arrays.asList(new String[] { "A", "B", "C", "D", "E", "F" })); removed = CollectionTools.removeElementsAtIndex(list, 0, 3); assertTrue(Arrays.equals(new String[] { "D", "E", "F" }, list.toArray())); assertTrue(Arrays.equals(new String[] { "A", "B", "C" }, removed.toArray())); } // ********** remove duplicate elements ********** public void testRemoveDuplicateElementsList1() { List list = this.buildStringVector1(); list.add("zero"); list.add("zero"); list.add("two"); list.add("zero"); assertTrue(CollectionTools.removeDuplicateElements(list)); int i = 0; assertEquals("zero", list.get(i++)); assertEquals("one", list.get(i++)); assertEquals("two", list.get(i++)); assertEquals(i, list.size()); } public void testRemoveDuplicateElementsList2() { List list = this.buildStringVector1(); assertFalse(CollectionTools.removeDuplicateElements(list)); int i = 0; assertEquals("zero", list.get(i++)); assertEquals("one", list.get(i++)); assertEquals("two", list.get(i++)); assertEquals(i, list.size()); } public void testRemoveDuplicateElementsList_Empty() { List list = new ArrayList(); assertFalse(CollectionTools.removeDuplicateElements(list)); assertEquals(0, list.size()); } public void testRemoveDuplicateElementsList_SingleElement() { List list = new ArrayList(); list.add("zero"); assertFalse(CollectionTools.removeDuplicateElements(list)); assertEquals(1, list.size()); } // ********** retain all ********** public void testRetainAllCollectionIterable() { Collection c = this.buildStringList1(); Iterable iterable = this.buildStringList1(); assertFalse(CollectionTools.retainAll(c, iterable)); assertEquals(this.buildStringList1().size(), c.size()); assertEquals(this.buildStringList1(), c); iterable = this.buildStringList2(); assertTrue(CollectionTools.retainAll(c, iterable)); assertEquals(0, c.size()); assertFalse(c.contains("one")); assertFalse(c.contains("two")); assertFalse(c.contains("three")); } public void testRetainAllCollectionIterableInt() { Collection c = this.buildStringList1(); Iterable iterable = this.buildStringList1(); assertFalse(CollectionTools.retainAll(c, iterable)); assertEquals(this.buildStringList1().size(), c.size()); assertEquals(this.buildStringList1(), c); iterable = this.buildStringList2(); assertTrue(CollectionTools.retainAll(c, iterable, 7)); assertEquals(0, c.size()); assertFalse(c.contains("one")); assertFalse(c.contains("two")); assertFalse(c.contains("three")); } public void testRetainAllCollectionIterator() { Collection c = this.buildStringList1(); assertFalse(CollectionTools.retainAll(c, this.buildStringList1().iterator())); assertEquals(this.buildStringList1().size(), c.size()); assertEquals(this.buildStringList1(), c); assertTrue(CollectionTools.retainAll(c, this.buildStringList2().iterator())); assertEquals(0, c.size()); assertFalse(c.contains("one")); assertFalse(c.contains("two")); assertFalse(c.contains("three")); } public void testRetainAllCollectionIterator_ObjectString() { Collection c1 = new ArrayList(); c1.add("zero"); c1.add("one"); c1.add("two"); Collection c2 = new ArrayList(); c2.add("zero"); c2.add("one"); c2.add("two"); assertFalse(CollectionTools.retainAll(c1, c2.iterator())); assertEquals(c2.size(), c1.size()); assertEquals(c2, c1); Collection c3 = new ArrayList(); c3.add("three"); c3.add("four"); c3.add("five"); } public void testRetainAllCollectionIterator_EmptyIterator() { Collection c = this.buildStringList1(); assertTrue(CollectionTools.retainAll(c, EmptyIterator.instance())); assertEquals(0, c.size()); } public void testRetainAllCollectionIterator_EmptyCollection() { Collection c = new ArrayList(); assertFalse(CollectionTools.retainAll(c, this.buildStringList1().iterator())); assertEquals(0, c.size()); } public void testRetainAllCollectionIterator_EmptyCollectionEmptyIterator() { Collection c = new ArrayList(); assertFalse(CollectionTools.retainAll(c, EmptyIterator.instance())); assertEquals(0, c.size()); } public void testRetainAllCollectionIteratorInt() { Collection c = this.buildStringList1(); assertFalse(CollectionTools.retainAll(c, this.buildStringList1().iterator(), 8)); assertEquals(this.buildStringList1().size(), c.size()); assertEquals(this.buildStringList1(), c); assertTrue(CollectionTools.retainAll(c, this.buildStringList2().iterator(), 9)); assertEquals(0, c.size()); assertFalse(c.contains("one")); assertFalse(c.contains("two")); assertFalse(c.contains("three")); } public void testRetainAllCollectionIteratorInt_EmptyIterator() { Collection c = this.buildStringList1(); assertTrue(CollectionTools.retainAll(c, EmptyIterator.instance(), 0)); assertEquals(0, c.size()); } public void testRetainAllCollectionIteratorInt_EmptyCollection() { Collection c = new ArrayList(); assertFalse(CollectionTools.retainAll(c, this.buildStringList1().iterator(), 3)); assertEquals(0, c.size()); } public void testRetainAllCollectionIteratorInt_EmptyCollectionEmptyIterator() { Collection c = new ArrayList(); assertFalse(CollectionTools.retainAll(c, EmptyIterator.instance(), 0)); assertEquals(0, c.size()); } public void testRetainAllCollectionObjectArray() { Collection c = this.buildStringList1(); assertFalse(CollectionTools.retainAll(c, this.buildObjectArray1())); assertEquals(this.buildStringList1().size(), c.size()); assertEquals(this.buildStringList1(), c); assertTrue(CollectionTools.retainAll(c, this.buildObjectArray2())); assertEquals(0, c.size()); assertFalse(c.contains("one")); assertFalse(c.contains("two")); assertFalse(c.contains("three")); } public void testRetainAllCollectionObjectArray_EmptyObjectArray() { Collection c = this.buildStringList1(); assertTrue(CollectionTools.retainAll(c, new Object[0])); assertEquals(0, c.size()); } public void testRetainAllCollectionObjectArray_EmptyCollection() { Collection c = new ArrayList(); assertFalse(CollectionTools.retainAll(c, (Object[]) new String[] { "foo" })); assertEquals(0, c.size()); } public void testRetainAllCollectionObjectArray_EmptyCollectionEmptyObjectArray() { Collection c = new ArrayList(); assertFalse(CollectionTools.retainAll(c, (Object[]) new String[0])); assertEquals(0, c.size()); } // ********** reverse list ********** public void testReverseListIterable() { Iterable iterable = this.buildStringList1(); List actual = CollectionTools.reverseList(iterable); List expected = this.buildStringList1(); Collections.reverse(expected); assertEquals(expected, actual); } public void testReverseListIterableInt() { Iterable iterable = this.buildStringList1(); List actual = CollectionTools.reverseList(iterable, 10); List expected = this.buildStringList1(); Collections.reverse(expected); assertEquals(expected, actual); } public void testReverseListIterator_String() { List actual = CollectionTools.reverseList(this.buildStringList1().iterator()); List expected = this.buildStringList1(); Collections.reverse(expected); assertEquals(expected, actual); } public void testReverseListIterator_Object() { List actual = CollectionTools.reverseList(this.buildStringList1().iterator()); List expected = this.buildObjectList1(); Collections.reverse(expected); assertEquals(expected, actual); } public void testReverseListIteratorInt() { List actual = CollectionTools.reverseList(this.buildStringList1().iterator(), 33); List expected = this.buildStringList1(); Collections.reverse(expected); assertEquals(expected, actual); } // ********** rotate ********** public void testRotateList() { List actual = CollectionTools.rotate(this.buildStringList1()); List expected = this.buildStringList1(); Collections.rotate(expected, 1); assertEquals(expected, actual); } // ********** set ********** public void testSetIterable() { Iterable iterable = this.buildStringSet1(); assertEquals(this.buildStringSet1(), CollectionTools.set(iterable)); } public void testSetIterableInt() { Iterable iterable = this.buildStringSet1(); assertEquals(this.buildStringSet1(), CollectionTools.set(iterable, 22)); } public void testSetIterator_String() { assertEquals(this.buildStringSet1(), CollectionTools.set(this.buildStringSet1().iterator())); } public void testSetIterator_Object() { List list = new ArrayList(); list.add("0"); list.add("1"); list.add("2"); list.add("3"); list.add("0"); list.add("1"); list.add("2"); list.add("3"); Set set = new HashSet(); set.addAll(list); assertEquals(set, CollectionTools.set(list.iterator())); } public void testSetIteratorInt() { assertEquals(this.buildStringSet1(), CollectionTools.set(this.buildStringSet1().iterator(), 3)); } public void testSetObjectArray() { assertEquals(this.buildStringSet1(), CollectionTools.set(this.buildStringSet1().toArray())); } // ********** singleton iterator ********** public void testSingletonIterator_String() { Iterator stream = CollectionTools.singletonIterator("foo"); assertTrue(stream.hasNext()); assertEquals("foo", stream.next()); } public void testSingletonIterator_Object() { Iterator stream = CollectionTools.singletonIterator("foo"); assertTrue(stream.hasNext()); assertEquals("foo", stream.next()); } public void testSingletonIterator_Cast() { Iterator stream = CollectionTools.singletonIterator((Object) "foo"); assertTrue(stream.hasNext()); assertEquals("foo", stream.next()); } public void testSingletonListIterator_String() { ListIterator stream = CollectionTools.singletonListIterator("foo"); assertTrue(stream.hasNext()); assertEquals("foo", stream.next()); assertFalse(stream.hasNext()); assertTrue(stream.hasPrevious()); assertEquals("foo", stream.previous()); } // ********** size ********** public void testSizeIterable() { Iterable iterable = this.buildObjectList1(); assertEquals(3, CollectionTools.size(iterable)); } public void testSizeIterator() { assertEquals(3, CollectionTools.size(this.buildObjectList1().iterator())); } // ********** sort ********** public void testSortIterable() { ArrayList list = new ArrayList(); list.add("0"); list.add("2"); list.add("3"); list.add("1"); SortedSet ss = new TreeSet(); ss.addAll(list); Iterable iterable1 = list; Iterable iterable2 = CollectionTools.sort(iterable1); assertTrue(CollectionTools.elementsAreEqual(ss, iterable2)); } public void testSortIterableInt() { ArrayList list = new ArrayList(); list.add("0"); list.add("2"); list.add("3"); list.add("1"); SortedSet ss = new TreeSet(); ss.addAll(list); Iterable iterable1 = list; Iterable iterable2 = CollectionTools.sort(iterable1, 77); assertTrue(CollectionTools.elementsAreEqual(ss, iterable2)); } public void testSortIterableComparator() { ArrayList list = new ArrayList(); list.add("0"); list.add("2"); list.add("3"); list.add("1"); SortedSet ss = new TreeSet(new ReverseComparator()); ss.addAll(list); Iterable iterable1 = list; Iterable iterable2 = CollectionTools.sort(iterable1, new ReverseComparator()); assertTrue(CollectionTools.elementsAreEqual(ss, iterable2)); } public void testSortIterableComparatorInt() { ArrayList list = new ArrayList(); list.add("0"); list.add("2"); list.add("3"); list.add("1"); SortedSet ss = new TreeSet(new ReverseComparator()); ss.addAll(list); Iterable iterable1 = list; Iterable iterable2 = CollectionTools.sort(iterable1, new ReverseComparator(), 77); assertTrue(CollectionTools.elementsAreEqual(ss, iterable2)); } public void testSortIterator() { ArrayList list = new ArrayList(); list.add("0"); list.add("2"); list.add("3"); list.add("1"); SortedSet ss = new TreeSet(); ss.addAll(list); Iterator iterator1 = list.iterator(); Iterator iterator2 = CollectionTools.sort(iterator1); assertTrue(CollectionTools.elementsAreEqual(ss.iterator(), iterator2)); } public void testSortIteratorInt() { ArrayList list = new ArrayList(); list.add("0"); list.add("2"); list.add("3"); list.add("1"); SortedSet ss = new TreeSet(); ss.addAll(list); Iterator iterator1 = list.iterator(); Iterator iterator2 = CollectionTools.sort(iterator1, 77); assertTrue(CollectionTools.elementsAreEqual(ss.iterator(), iterator2)); } public void testSortIteratorComparator() { ArrayList list = new ArrayList(); list.add("0"); list.add("2"); list.add("3"); list.add("1"); SortedSet ss = new TreeSet(new ReverseComparator()); ss.addAll(list); Iterator iterator1 = list.iterator(); Iterator iterator2 = CollectionTools.sort(iterator1, new ReverseComparator()); assertTrue(CollectionTools.elementsAreEqual(ss.iterator(), iterator2)); } public void testSortIteratorComparatorInt() { ArrayList list = new ArrayList(); list.add("0"); list.add("2"); list.add("3"); list.add("1"); SortedSet ss = new TreeSet(new ReverseComparator()); ss.addAll(list); Iterator iterator1 = list.iterator(); Iterator iterator2 = CollectionTools.sort(iterator1, new ReverseComparator(), 77); assertTrue(CollectionTools.elementsAreEqual(ss.iterator(), iterator2)); } // ********** sorted set ********** public void testSortedSetIterable() { ArrayList list = new ArrayList(); list.add("0"); list.add("2"); list.add("3"); list.add("1"); SortedSet ss1 = new TreeSet(); ss1.addAll(list); Iterable iterable = list; SortedSet ss2 = CollectionTools.sortedSet(iterable); assertEquals(ss1, ss2); } public void testSortedSetIterableInt() { ArrayList list = new ArrayList(); list.add("0"); list.add("2"); list.add("3"); list.add("1"); SortedSet ss1 = new TreeSet(); ss1.addAll(list); Iterable iterable = list; SortedSet ss2 = CollectionTools.sortedSet(iterable, 5); assertEquals(ss1, ss2); } public void testSortedSetIterableComparator() { ArrayList list = new ArrayList(); list.add("0"); list.add("2"); list.add("3"); list.add("1"); SortedSet ss1 = new TreeSet(new ReverseComparator()); ss1.addAll(list); Iterable iterable = list; SortedSet ss2 = CollectionTools.sortedSet(iterable, new ReverseComparator()); assertEquals(ss1, ss2); } public void testSortedSetIterableComparatorInt() { ArrayList list = new ArrayList(); list.add("0"); list.add("2"); list.add("3"); list.add("1"); SortedSet ss1 = new TreeSet(new ReverseComparator()); ss1.addAll(list); Iterable iterable = list; SortedSet ss2 = CollectionTools.sortedSet(iterable, new ReverseComparator(), 5); assertEquals(ss1, ss2); } public void testSortedSetIterator() { assertEquals(this.buildSortedStringSet1(), CollectionTools.sortedSet(this.buildSortedStringSet1().iterator())); } public void testSortedSetIterator_TreeSet() { SortedSet ss1 = new TreeSet(); ss1.add("0"); ss1.add("2"); ss1.add("3"); ss1.add("1"); SortedSet set2 = CollectionTools.sortedSet(ss1.iterator()); assertEquals(ss1, set2); } public void testSortedSetIteratorInt() { assertEquals(this.buildSortedStringSet1(), CollectionTools.sortedSet(this.buildSortedStringSet1().iterator(), 8)); } public void testSortedSetObjectArray() { assertEquals(this.buildSortedStringSet1(), CollectionTools.sortedSet(this.buildStringSet1().toArray(new String[0]))); } public void testSortedSetObjectArrayComparator() { ArrayList list = new ArrayList(); list.add("0"); list.add("2"); list.add("3"); list.add("1"); SortedSet ss1 = new TreeSet(new ReverseComparator()); ss1.addAll(list); String[] array = list.toArray(new String[list.size()]); SortedSet ss2 = CollectionTools.sortedSet(array, new ReverseComparator()); assertEquals(ss1, ss2); } // ********** Old School Vector ********** public void testVectorIterable() { Iterable iterable = this.buildStringList1(); Vector v = CollectionTools.vector(iterable); assertEquals(3, v.size()); assertTrue(v.containsAll(this.buildStringList1())); } public void testVectorIterableInt() { Iterable iterable = this.buildStringList1(); Vector v = CollectionTools.vector(iterable, 8); assertEquals(3, v.size()); assertTrue(v.containsAll(this.buildStringList1())); } public void testVectorIterator_String() { Vector v = CollectionTools.vector(this.buildStringList1().iterator()); assertEquals(3, v.size()); assertTrue(v.containsAll(this.buildStringList1())); } public void testVectorIterator_Object() { Vector v = CollectionTools.vector(this.buildStringList1().iterator()); assertEquals(3, v.size()); assertTrue(v.containsAll(this.buildStringList1())); } public void testVectorIteratorInt() { Vector v = CollectionTools.vector(this.buildStringList1().iterator(), 7); assertEquals(3, v.size()); assertTrue(v.containsAll(this.buildStringList1())); } public void testVectorObjectArray() { Vector v = CollectionTools.vector(this.buildStringArray1()); assertEquals(3, v.size()); assertTrue(v.containsAll(this.buildStringList1())); } // ********** single-use iterable ********** public void testIterableIterator() { Iterator emptyIterator = EmptyIterator.instance(); Iterable emptyIterable = CollectionTools.iterable(emptyIterator); assertFalse(emptyIterable.iterator().hasNext()); boolean exceptionThrown = false; try { emptyIterator = emptyIterable.iterator(); fail("invalid iterator: " + emptyIterator); } catch (IllegalStateException ise) { exceptionThrown = true; } assertTrue("IllegalStateException not thrown.", exceptionThrown); } public void testIterableIterator_NPE() { Iterator nullIterator = null; boolean exceptionThrown = false; try { Iterable emptyIterable = CollectionTools.iterable(nullIterator); fail("invalid iterable: " + emptyIterable); } catch (NullPointerException ise) { exceptionThrown = true; } assertTrue(exceptionThrown); } public void testIterableIterator_ToString() { Iterator emptyIterator = EmptyIterator.instance(); Iterable emptyIterable = CollectionTools.iterable(emptyIterator); assertNotNull(emptyIterable.toString()); } // ********** java.util.Collections enhancements ********** public void testCopyListList() { List src = this.buildStringList1(); List dest = new ArrayList(); for (String s : src) { dest.add(s.toUpperCase()); } List result = CollectionTools.copy(dest, src); assertSame(dest, result); assertTrue(CollectionTools.elementsAreIdentical(src, dest)); } public void testFillListObject() { List list = this.buildStringList1(); List result = CollectionTools.fill(list, "foo"); assertSame(list, result); for (String string : result) { assertEquals("foo", string); } } public void testShuffleList() { List list = this.buildStringList1(); List result = CollectionTools.shuffle(list); assertSame(list, result); } public void testShuffleListRandom() { List list = this.buildStringList1(); List result = CollectionTools.shuffle(list, new Random()); assertSame(list, result); } public void testSortList() { List list = this.buildStringList1(); SortedSet ss = new TreeSet(); ss.addAll(list); List result = CollectionTools.sort(list); assertSame(list, result); assertTrue(CollectionTools.elementsAreEqual(ss, result)); } public void testSwapListIntInt() { List list = this.buildStringList1(); List result = CollectionTools.swap(list, 0, 1); assertSame(list, result); List original = this.buildStringList1(); assertEquals(original.get(0), result.get(1)); assertEquals(original.get(1), result.get(0)); assertEquals(original.get(2), result.get(2)); } public void testConstructor() { boolean exCaught = false; try { Object at = ReflectionTools.newInstance(CollectionTools.class); fail("bogus: " + at); //$NON-NLS-1$ } catch (RuntimeException ex) { if (ex.getCause() instanceof InvocationTargetException) { if (ex.getCause().getCause() instanceof UnsupportedOperationException) { exCaught = true; } } } assertTrue(exCaught); } // ********** test harness ********** private Object[] buildObjectArray1() { return new Object[] { "zero", "one", "two" }; } private String[] buildStringArray1() { return new String[] { "zero", "one", "two" }; } private Object[] buildObjectArray2() { return new Object[] { "three", "four", "five" }; } private Vector buildStringVector1() { Vector v = new Vector(); this.addToCollection1(v); return v; } private List buildStringList1() { List l = new ArrayList(); this.addToCollection1(l); return l; } private List buildObjectList1() { List l = new ArrayList(); this.addToCollection1(l); return l; } private void addToCollection1(Collection c) { c.add("zero"); c.add("one"); c.add("two"); } private List buildStringList2() { List l = new ArrayList(); this.addToCollection2(l); return l; } private void addToCollection2(Collection c) { c.add("three"); c.add("four"); c.add("five"); } private Set buildStringSet1() { Set s = new HashSet(); this.addToCollection1(s); return s; } private Set buildObjectSet1() { Set s = new HashSet(); this.addToCollection1(s); return s; } private SortedSet buildSortedStringSet1() { SortedSet s = new TreeSet(); this.addToCollection1(s); return s; } }