blob: a9f30d140a0c77e0fb7d21f5cd63bfe194511c47 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2005, 2015 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.common.utility.tests.internal.collection;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.SortedSet;
import java.util.TreeSet;
import java.util.Vector;
import org.eclipse.jpt.common.utility.collection.Bag;
import org.eclipse.jpt.common.utility.internal.ClassTools;
import org.eclipse.jpt.common.utility.internal.collection.CollectionTools;
import org.eclipse.jpt.common.utility.internal.collection.IdentityHashBag;
import org.eclipse.jpt.common.utility.internal.collection.SynchronizedBag;
import org.eclipse.jpt.common.utility.internal.comparator.ComparatorTools;
import org.eclipse.jpt.common.utility.internal.iterable.EmptyIterable;
import org.eclipse.jpt.common.utility.internal.iterator.EmptyIterator;
import org.eclipse.jpt.common.utility.internal.iterator.IteratorTools;
import org.eclipse.jpt.common.utility.internal.predicate.PredicateTools;
import org.eclipse.jpt.common.utility.tests.internal.ArrayToolsTests;
import junit.framework.TestCase;
@SuppressWarnings("nls")
public class CollectionToolsTests
extends TestCase
{
public CollectionToolsTests(String name) {
super(name);
}
// ********** add all **********
public void testAddAllCollectionIterable_StringModified() {
List<String> list1 = this.buildStringList1();
Iterable<String> iterable2 = this.buildStringList2();
assertTrue(CollectionTools.addAll(list1, iterable2.iterator()));
assertEquals(6, list1.size());
assertTrue(list1.containsAll(this.buildStringList2()));
}
public void testAddAllCollectionIterable_StringUnmodified() {
Set<String> set1 = this.buildStringSet1();
Iterable<String> 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<Object> list1 = this.buildObjectList1();
Iterable<String> iterable2 = this.buildStringList2();
assertTrue(CollectionTools.addAll(list1, iterable2));
assertEquals(6, list1.size());
assertTrue(list1.containsAll((List<String>) iterable2));
}
public void testAddAllCollectionIterable_ObjectUnmodified() {
Set<Object> set1 = this.buildObjectSet1();
Iterable<String> iterable3 = this.buildStringList1(); // same elements as set1
assertFalse(CollectionTools.addAll(set1, iterable3));
assertEquals(3, set1.size());
assertTrue(set1.containsAll((List<String>) iterable3));
}
public void testAddAllCollectionIterable_EmptyIterable() {
Set<Object> set1 = this.buildObjectSet1();
assertFalse(CollectionTools.addAll(set1, EmptyIterable.instance()));
assertEquals(3, set1.size());
}
public void testAddAllCollectionIterableInt_Modified() {
List<String> list1 = this.buildStringList1();
List<String> list2 = this.buildStringList2();
Iterable<String> iterable2 = list2;
assertTrue(CollectionTools.addAll(list1, iterable2, list2.size()));
assertEquals(6, list1.size());
assertTrue(list1.containsAll(this.buildStringList2()));
}
public void testAddAllCollectionIterableInt_Unmodified() {
Set<String> set1 = this.buildStringSet1();
List<String> list1 = this.buildStringList1(); // same elements as set1
Iterable<String> iterable3 = list1;
assertFalse(CollectionTools.addAll(set1, iterable3, list1.size()));
assertEquals(3, set1.size());
assertTrue(set1.containsAll(this.buildStringList1()));
}
public void testAddAllCollectionIterator_StringModified() {
List<String> list1 = this.buildStringList1();
List<String> list2 = this.buildStringList2();
assertTrue(CollectionTools.addAll(list1, list2.iterator()));
assertEquals(6, list1.size());
assertTrue(list1.containsAll(list2));
}
public void testAddAllCollectionIterator_StringUnmodified() {
Set<String> set1 = this.buildStringSet1();
List<String> 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<Object> list1 = this.buildObjectList1();
List<String> list2 = this.buildStringList2();
assertTrue(CollectionTools.addAll(list1, list2.iterator()));
assertEquals(6, list1.size());
assertTrue(list1.containsAll(list2));
}
public void testAddAllCollectionIterator_ObjectUnmodified() {
Set<Object> set1 = this.buildObjectSet1();
List<String> 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<String> list1 = this.buildStringList1();
assertFalse(CollectionTools.addAll(list1, EmptyIterator.<String>instance()));
assertEquals(3, list1.size());
}
public void testAddAllCollectionIteratorInt_Modified() {
List<String> list1 = this.buildStringList1();
List<String> list2 = this.buildStringList2();
assertTrue(CollectionTools.addAll(list1, list2.iterator(), 3));
assertEquals(6, list1.size());
assertTrue(list1.containsAll(list2));
}
public void testAddAllCollectionIteratorInt_Unmodified() {
Set<String> set1 = this.buildStringSet1();
List<String> 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<String> list1 = this.buildStringList1();
assertFalse(CollectionTools.addAll(list1, EmptyIterator.<String>instance(), 0));
assertEquals(3, list1.size());
}
public void testAddAllCollectionObjectArray_StringModified() {
List<String> list = this.buildStringList1();
String[] a = this.buildStringArray1();
assertTrue(CollectionTools.addAll(list, a));
assertEquals(6, list.size());
assertTrue(list.containsAll(CollectionTools.hashBag(a)));
}
public void testAddAllCollectionObjectArray_StringListEmptyArray() {
List<String> list = this.buildStringList1();
assertFalse(CollectionTools.addAll(list, new String[0]));
}
public void testAddAllCollectionObjectArray_StringUnmodified() {
Set<String> set = this.buildStringSet1();
String[] a = this.buildStringArray1();
assertFalse(CollectionTools.addAll(set, a));
assertEquals(3, set.size());
assertTrue(set.containsAll(CollectionTools.hashBag(a)));
assertFalse(CollectionTools.addAll(set, new String[0]));
}
public void testAddAllCollectionObjectArray_StringSetEmptyArray() {
Set<String> set = this.buildStringSet1();
assertFalse(CollectionTools.addAll(set, new String[0]));
}
public void testAddAllCollectionObjectArray_ObjectModified() {
List<Object> list = this.buildObjectList1();
String[] a = this.buildStringArray1();
assertTrue(CollectionTools.addAll(list, a));
assertEquals(6, list.size());
assertTrue(list.containsAll(CollectionTools.hashBag(a)));
}
public void testAddAllCollectionObjectArray_ObjectUnmodified() {
String[] a = this.buildStringArray1();
Set<Object> set = this.buildObjectSet1();
assertFalse(CollectionTools.addAll(set, a));
assertEquals(3, set.size());
assertTrue(set.containsAll(CollectionTools.hashBag(a)));
}
// ********** hash bag **********
public void testHashBagIntFloat() {
Collection<String> c = CollectionTools.hashBag(42, 0.88f);
assertEquals(0, c.size());
assertTrue(c.isEmpty());
}
public void testHashBagIterable() {
Iterable<String> iterable = this.buildStringList1();
Collection<String> c = CollectionTools.hashBag(iterable);
assertEquals(3, c.size());
assertTrue(c.containsAll(this.buildStringList1()));
}
public void testHashBagIterableInt() {
Iterable<String> iterable = this.buildStringList1();
Collection<String> c = CollectionTools.hashBag(iterable, 3);
assertEquals(3, c.size());
assertTrue(c.containsAll(this.buildStringList1()));
}
public void testHashBagIterator() {
Collection<String> c = CollectionTools.hashBag(this.buildStringList1().iterator());
assertEquals(3, c.size());
assertTrue(c.containsAll(this.buildStringList1()));
}
public void testHashBagIterator_ObjectString() {
Collection<Object> c = CollectionTools.<Object>hashBag(this.buildStringList1().iterator());
assertEquals(3, c.size());
assertTrue(c.containsAll(this.buildStringList1()));
}
public void testHashBagIteratorInt() {
Collection<String> c = CollectionTools.hashBag(this.buildStringList1().iterator(), 3);
assertEquals(3, c.size());
assertTrue(c.containsAll(this.buildStringList1()));
}
public void testHashBagObjectArray() {
Collection<String> c = CollectionTools.hashBag(this.buildStringArray1());
assertEquals(3, c.size());
assertTrue(CollectionTools.containsAll(c, (Object[]) this.buildStringArray1()));
}
// ********** synchronized bag **********
public void testSynchronizedBagObject() {
Object mutex = "foo";
SynchronizedBag<String> sBag = CollectionTools.synchronizedBag(mutex);
assertEquals(mutex, sBag.getMutex());
}
public void testSynchronizedBagBagObject() {
Bag<String> bag = CollectionTools.hashBag();
Object mutex = "foo";
SynchronizedBag<String> sBag = CollectionTools.synchronizedBag(bag, mutex);
assertEquals(mutex, sBag.getMutex());
}
// ********** identity hash bag **********
public void testIdentityHashBagIntFloat() {
IdentityHashBag<String> bag = CollectionTools.identityHashBag(42, 0.88f);
assertTrue(bag.isEmpty());
}
// ********** contains all **********
public void testContainsAllCollectionIterable() {
Iterable<String> 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<Object> c1 = new ArrayList<Object>();
c1.add("zero");
c1.add("one");
c1.add("two");
Collection<String> c2 = new ArrayList<String>();
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));
}
// ********** filter **********
public void testFilterCollectionFilter() {
Collection<String> c = CollectionTools.hashBag(new String[] { "zero", "one", "two", "three", "four" });
Collection<String> actual = CollectionTools.filter(c, new ArrayToolsTests.StringLengthEquals(3));
Collection<String> expected = CollectionTools.hashBag(new String[] { "one", "two" });
assertEquals(expected, actual);
}
public void testFilterCollectionFilterTransparent() {
Collection<String> c = CollectionTools.hashBag(new String[] { "zero", "one", "two", "three", "four" });
Collection<String> actual = CollectionTools.filter(c, PredicateTools.<String>true_());
Collection<String> expected = CollectionTools.hashBag(new String[] { "zero", "one", "two", "three", "four" });
assertEquals(expected, actual);
assertNotSame(expected, actual);
}
// ********** identity bag **********
// tested in IdentityHashBagTests
// ********** partition **********
public void testPartitionCollectionInt_negative() {
this.verifyPartitionCollectionException(-3);
}
public void testPartitionCollectionInt_0() {
this.verifyPartitionCollectionException(0);
}
public void testPartitionCollectionInt_tooMany() {
this.verifyPartitionCollectionException(6);
}
public void verifyPartitionCollectionException(int count) {
Collection<String> c = Arrays.asList(new String[] { "zero", "one", "two", "three", "four" });
boolean exCaught = false;
try {
ArrayList<ArrayList<String>> actual = CollectionTools.partition(c, count);
fail("bogus partition: " + actual);
} catch (IllegalArgumentException ex) {
exCaught = true;
}
assertTrue(exCaught);
}
public void testPartitionCollectionInt_1() {
Collection<String> c = Arrays.asList(new String[] { "zero", "one", "two", "three", "four" });
ArrayList<ArrayList<String>> actual = CollectionTools.partition(c, 1);
List<String> p0 = Arrays.asList(new String[] { "zero", "one", "two", "three", "four" });
assertEquals(1, actual.size());
assertEquals(p0, actual.get(0));
}
public void testPartitionCollectionInt_2() {
Collection<String> c = Arrays.asList(new String[] { "zero", "one", "two", "three", "four" });
ArrayList<ArrayList<String>> actual = CollectionTools.partition(c, 2);
List<String> p0 = Arrays.asList(new String[] { "zero", "one", "two" });
List<String> p1 = Arrays.asList(new String[] { "three", "four" });
assertEquals(2, actual.size());
assertEquals(p0, actual.get(0));
assertEquals(p1, actual.get(1));
}
public void testPartitionCollectionInt_3() {
Collection<String> c = Arrays.asList(new String[] { "zero", "one", "two", "three", "four" });
ArrayList<ArrayList<String>> actual = CollectionTools.partition(c, 3);
List<String> p0 = Arrays.asList(new String[] { "zero", "one" });
List<String> p1 = Arrays.asList(new String[] { "two", "three" });
List<String> p2 = Arrays.asList(new String[] { "four" });
assertEquals(3, actual.size());
assertEquals(p0, actual.get(0));
assertEquals(p1, actual.get(1));
assertEquals(p2, actual.get(2));
}
public void testPartitionCollectionInt_4() {
Collection<String> c = Arrays.asList(new String[] { "zero", "one", "two", "three", "four" });
ArrayList<ArrayList<String>> actual = CollectionTools.partition(c, 4);
List<String> p0 = Arrays.asList(new String[] { "zero", "one" });
List<String> p1 = Arrays.asList(new String[] { "two" });
List<String> p2 = Arrays.asList(new String[] { "three" });
List<String> p3 = Arrays.asList(new String[] { "four" });
assertEquals(4, actual.size());
assertEquals(p0, actual.get(0));
assertEquals(p1, actual.get(1));
assertEquals(p2, actual.get(2));
assertEquals(p3, actual.get(3));
}
public void testPartitionCollectionInt_5() {
Collection<String> c = Arrays.asList(new String[] { "zero", "one", "two", "three", "four" });
ArrayList<ArrayList<String>> actual = CollectionTools.partition(c, 5);
List<String> p0 = Arrays.asList(new String[] { "zero" });
List<String> p1 = Arrays.asList(new String[] { "one" });
List<String> p2 = Arrays.asList(new String[] { "two" });
List<String> p3 = Arrays.asList(new String[] { "three" });
List<String> p4 = Arrays.asList(new String[] { "four" });
assertEquals(5, actual.size());
assertEquals(p0, actual.get(0));
assertEquals(p1, actual.get(1));
assertEquals(p2, actual.get(2));
assertEquals(p3, actual.get(3));
assertEquals(p4, actual.get(4));
}
public void testPartitionCollectionInt_6() {
Collection<String> c = Arrays.asList(new String[] { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" });
ArrayList<ArrayList<String>> actual = CollectionTools.partition(c, 6);
List<String> p0 = Arrays.asList(new String[] { "zero", "one" });
List<String> p1 = Arrays.asList(new String[] { "two", "three" });
List<String> p2 = Arrays.asList(new String[] { "four", "five" });
List<String> p3 = Arrays.asList(new String[] { "six", "seven" });
List<String> p4 = Arrays.asList(new String[] { "eight" });
List<String> p5 = Arrays.asList(new String[] { "nine" });
assertEquals(6, actual.size());
assertEquals(p0, actual.get(0));
assertEquals(p1, actual.get(1));
assertEquals(p2, actual.get(2));
assertEquals(p3, actual.get(3));
assertEquals(p4, actual.get(4));
assertEquals(p5, actual.get(5));
}
// ********** remove all **********
public void testRemoveAllCollectionIterable() {
Collection<String> c = this.buildStringList1();
Iterable<String> 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<String> c = this.buildStringList1();
Iterable<String> 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<String> 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<String> 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<String> c = new ArrayList<String>();
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<String> iterator = IteratorTools.iterator(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 = IteratorTools.iterator(a);
assertFalse(CollectionTools.removeAll(c, iterator));
}
public void testRemoveAllCollectionIterator_ObjectString() {
Collection<Object> c = new ArrayList<Object>();
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<String> iterator = IteratorTools.iterator(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 = IteratorTools.iterator(a);
assertFalse(CollectionTools.removeAll(c, iterator));
}
public void testRemoveAllCollectionObjectArray_Empty() {
Collection<String> 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<String> c = new ArrayList<String>();
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<String> c = new ArrayList<String>();
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<String> 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());
}
// ********** retain all **********
public void testRetainAllCollectionIterable() {
Collection<String> c = this.buildStringList1();
Iterable<String> 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<String> c = this.buildStringList1();
Iterable<String> 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<String> 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<Object> c1 = new ArrayList<Object>();
c1.add("zero");
c1.add("one");
c1.add("two");
Collection<String> c2 = new ArrayList<String>();
c2.add("zero");
c2.add("one");
c2.add("two");
assertFalse(CollectionTools.retainAll(c1, c2.iterator()));
assertEquals(c2.size(), c1.size());
assertEquals(c2, c1);
Collection<String> c3 = new ArrayList<String>();
c3.add("three");
c3.add("four");
c3.add("five");
}
public void testRetainAllCollectionIterator_EmptyIterator() {
Collection<String> c = this.buildStringList1();
assertTrue(CollectionTools.retainAll(c, EmptyIterator.instance()));
assertEquals(0, c.size());
}
public void testRetainAllCollectionIterator_EmptyCollection() {
Collection<String> c = new ArrayList<String>();
assertFalse(CollectionTools.retainAll(c, this.buildStringList1().iterator()));
assertEquals(0, c.size());
}
public void testRetainAllCollectionIterator_EmptyCollectionEmptyIterator() {
Collection<String> c = new ArrayList<String>();
assertFalse(CollectionTools.retainAll(c, EmptyIterator.instance()));
assertEquals(0, c.size());
}
public void testRetainAllCollectionIteratorInt() {
Collection<String> 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<String> c = this.buildStringList1();
assertTrue(CollectionTools.retainAll(c, EmptyIterator.instance(), 0));
assertEquals(0, c.size());
}
public void testRetainAllCollectionIteratorInt_EmptyCollection() {
Collection<String> c = new ArrayList<String>();
assertFalse(CollectionTools.retainAll(c, this.buildStringList1().iterator(), 3));
assertEquals(0, c.size());
}
public void testRetainAllCollectionIteratorInt_EmptyCollectionEmptyIterator() {
Collection<String> c = new ArrayList<String>();
assertFalse(CollectionTools.retainAll(c, EmptyIterator.instance(), 0));
assertEquals(0, c.size());
}
public void testRetainAllCollectionObjectArray() {
Collection<String> 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<String> c = this.buildStringList1();
assertTrue(CollectionTools.retainAll(c, new Object[0]));
assertEquals(0, c.size());
}
public void testRetainAllCollectionObjectArray_EmptyCollection() {
Collection<String> c = new ArrayList<String>();
assertFalse(CollectionTools.retainAll(c, (Object[]) new String[] { "foo" }));
assertEquals(0, c.size());
}
public void testRetainAllCollectionObjectArray_EmptyCollectionEmptyObjectArray() {
Collection<String> c = new ArrayList<String>();
assertFalse(CollectionTools.retainAll(c, (Object[]) new String[0]));
assertEquals(0, c.size());
}
// ********** to array fix **********
public void testToArrayCollectionClass() {
List<String> list = Arrays.asList(new String[] { "zero", "one", "two" });
String[] actual = CollectionTools.toArray(list, String.class);
assertEquals(3, actual.length);
assertEquals("zero", actual[0]);
assertEquals("one", actual[1]);
assertEquals("two", actual[2]);
}
// ********** transform **********
public void testTransformCollectionTransformer() {
List<String> list = Arrays.asList(new String[] { "zero", "one", "two" });
Collection<String> actual = CollectionTools.transform(list, ArrayToolsTests.UPPER_CASE_TRANSFORMER);
assertEquals(3, actual.size());
assertTrue(actual.contains("ZERO"));
assertTrue(actual.contains("ONE"));
assertTrue(actual.contains("TWO"));
}
// ********** hash set **********
public void testHashSetIterable() {
Iterable<String> iterable = this.buildStringSet1();
assertEquals(this.buildStringSet1(), CollectionTools.hashSet(iterable));
}
public void testHashSetIterableInt() {
Iterable<String> iterable = this.buildStringSet1();
assertEquals(this.buildStringSet1(), CollectionTools.hashSet(iterable, 22));
}
public void testHashSetIterator_String() {
assertEquals(this.buildStringSet1(), CollectionTools.hashSet(this.buildStringSet1().iterator()));
}
public void testHashSetIterator_Object() {
List<String> list = new ArrayList<String>();
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<String> set = new HashSet<String>();
set.addAll(list);
assertEquals(set, CollectionTools.<Object>hashSet(list.iterator()));
}
public void testHashSetIteratorInt() {
assertEquals(this.buildStringSet1(), CollectionTools.hashSet(this.buildStringSet1().iterator(), 3));
}
public void testHashSetObjectArray() {
assertEquals(this.buildStringSet1(), CollectionTools.hashSet(this.buildStringSet1().toArray()));
}
// ********** tree set **********
public void testTreeSetIterable() {
ArrayList<String> list = new ArrayList<String>();
list.add("0");
list.add("2");
list.add("3");
list.add("1");
SortedSet<String> ss1 = new TreeSet<String>();
ss1.addAll(list);
Iterable<String> iterable = list;
SortedSet<String> ss2 = CollectionTools.<String>treeSet(iterable);
assertEquals(ss1, ss2);
}
public void testTreeSetIterableInt() {
ArrayList<String> list = new ArrayList<String>();
list.add("0");
list.add("2");
list.add("3");
list.add("1");
SortedSet<String> ss1 = new TreeSet<String>();
ss1.addAll(list);
Iterable<String> iterable = list;
SortedSet<String> ss2 = CollectionTools.<String>treeSet(iterable, 5);
assertEquals(ss1, ss2);
}
public void testTreeSetIterableComparator() {
ArrayList<String> list = new ArrayList<String>();
list.add("0");
list.add("2");
list.add("3");
list.add("1");
SortedSet<String> ss1 = new TreeSet<String>(ComparatorTools.<String>reverseComparator());
ss1.addAll(list);
Iterable<String> iterable = list;
SortedSet<String> ss2 = CollectionTools.<String>treeSet(iterable, ComparatorTools.<String>reverseComparator());
assertEquals(ss1, ss2);
}
public void testTreeSetIterableComparatorInt() {
ArrayList<String> list = new ArrayList<String>();
list.add("0");
list.add("2");
list.add("3");
list.add("1");
SortedSet<String> ss1 = new TreeSet<String>(ComparatorTools.<String>reverseComparator());
ss1.addAll(list);
Iterable<String> iterable = list;
SortedSet<String> ss2 = CollectionTools.<String>treeSet(iterable, ComparatorTools.<String>reverseComparator(), 5);
assertEquals(ss1, ss2);
}
public void testTreeSetIterator() {
assertEquals(this.buildSortedStringSet1(), CollectionTools.treeSet(this.buildSortedStringSet1().iterator()));
}
public void testTreeSetIterator_TreeSet() {
SortedSet<String> ss1 = new TreeSet<String>();
ss1.add("0");
ss1.add("2");
ss1.add("3");
ss1.add("1");
SortedSet<String> set2 = CollectionTools.<String>treeSet(ss1.iterator());
assertEquals(ss1, set2);
}
public void testTreeSetIteratorInt() {
assertEquals(this.buildSortedStringSet1(), CollectionTools.treeSet(this.buildSortedStringSet1().iterator(), 8));
}
public void testTreeSetObjectArray() {
assertEquals(this.buildSortedStringSet1(), CollectionTools.treeSet(this.buildStringSet1().toArray(new String[0])));
}
public void testTreeSetObjectArrayComparator() {
ArrayList<String> list = new ArrayList<String>();
list.add("0");
list.add("2");
list.add("3");
list.add("1");
SortedSet<String> ss1 = new TreeSet<String>(ComparatorTools.<String>reverseComparator());
ss1.addAll(list);
String[] array = list.toArray(new String[list.size()]);
SortedSet<String> ss2 = CollectionTools.<String>treeSet(array, ComparatorTools.<String>reverseComparator());
assertEquals(ss1, ss2);
}
// ********** Old School Vector **********
public void testVectorIterable() {
Iterable<String> iterable = this.buildStringList1();
Vector<String> v = CollectionTools.vector(iterable);
assertEquals(3, v.size());
assertTrue(v.containsAll(this.buildStringList1()));
}
public void testVectorIterableInt() {
Iterable<String> iterable = this.buildStringList1();
Vector<String> v = CollectionTools.vector(iterable, 8);
assertEquals(3, v.size());
assertTrue(v.containsAll(this.buildStringList1()));
}
public void testVectorIterator_String() {
Vector<String> v = CollectionTools.vector(this.buildStringList1().iterator());
assertEquals(3, v.size());
assertTrue(v.containsAll(this.buildStringList1()));
}
public void testVectorIterator_Object() {
Vector<Object> v = CollectionTools.<Object>vector(this.buildStringList1().iterator());
assertEquals(3, v.size());
assertTrue(v.containsAll(this.buildStringList1()));
}
public void testVectorIteratorInt() {
Vector<String> v = CollectionTools.vector(this.buildStringList1().iterator(), 7);
assertEquals(3, v.size());
assertTrue(v.containsAll(this.buildStringList1()));
}
public void testVectorObjectArray() {
Vector<String> v = CollectionTools.vector(this.buildStringArray1());
assertEquals(3, v.size());
assertTrue(v.containsAll(this.buildStringList1()));
}
// ********** constructor **********
public void testConstructor() {
boolean exCaught = false;
try {
Object at = ClassTools.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 List<String> buildStringList1() {
List<String> l = new ArrayList<String>();
this.addToCollection1(l);
return l;
}
private List<Object> buildObjectList1() {
List<Object> l = new ArrayList<Object>();
this.addToCollection1(l);
return l;
}
private void addToCollection1(Collection<? super String> c) {
c.add("zero");
c.add("one");
c.add("two");
}
private List<String> buildStringList2() {
List<String> l = new ArrayList<String>();
this.addToCollection2(l);
return l;
}
private void addToCollection2(Collection<? super String> c) {
c.add("three");
c.add("four");
c.add("five");
}
private Set<String> buildStringSet1() {
Set<String> s = new HashSet<String>();
this.addToCollection1(s);
return s;
}
private Set<Object> buildObjectSet1() {
Set<Object> s = new HashSet<Object>();
this.addToCollection1(s);
return s;
}
private SortedSet<String> buildSortedStringSet1() {
SortedSet<String> s = new TreeSet<String>();
this.addToCollection1(s);
return s;
}
}