blob: 4afe1fe8bbb523b206fbc504ed464e0fa74db5e4 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2005, 2013 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.iterable;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.NoSuchElementException;
import java.util.SortedSet;
import java.util.TreeSet;
import junit.framework.TestCase;
import org.eclipse.jpt.common.utility.internal.ClassTools;
import org.eclipse.jpt.common.utility.internal.collection.HashBag;
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.iterable.IterableTools;
import org.eclipse.jpt.common.utility.tests.internal.ArrayToolsTests;
import org.eclipse.jpt.common.utility.tests.internal.collection.MapToolsTests;
@SuppressWarnings("nls")
public class IterableToolsTests
extends TestCase
{
public IterableToolsTests(String name) {
super(name);
}
public void testContainsIterableObject() {
Collection<String> c = this.buildStringList1();
Iterable<String> iterable = c;
assertTrue(IterableTools.contains(iterable, "one"));
assertFalse(IterableTools.contains(iterable, null));
c.add(null);
assertTrue(IterableTools.contains(iterable, null));
}
public void testCountIterableObject() {
Collection<Object> c = new HashBag<Object>();
c.add("zero");
c.add("one");
c.add("two");
c.add("three");
String one = "one";
assertEquals(1, IterableTools.count(c, one));
c.add("one");
assertEquals(2, IterableTools.count(c, one));
assertEquals(0, IterableTools.count(c, null));
c.add(null);
assertEquals(1, IterableTools.count(c, null));
c.add(null);
assertEquals(2, IterableTools.count(c, null));
}
public void testCountFalseIteratorPredicate() {
Collection<String> c = new HashBag<String>();
c.add("zero");
c.add("one");
c.add("two");
c.add("three");
assertEquals(4, IterableTools.countFalse(c, new MapToolsTests.StringLengthPredicate(0)));
assertEquals(2, IterableTools.countFalse(c, new MapToolsTests.StringLengthPredicate(3)));
c.add("foo");
assertEquals(2, IterableTools.countFalse(c, new MapToolsTests.StringLengthPredicate(3)));
}
public void testCountTrueIteratorPredicate() {
Collection<String> c = new HashBag<String>();
c.add("zero");
c.add("one");
c.add("two");
c.add("three");
assertEquals(0, IterableTools.countTrue(c, new MapToolsTests.StringLengthPredicate(0)));
assertEquals(2, IterableTools.countTrue(c, new MapToolsTests.StringLengthPredicate(3)));
c.add("foo");
assertEquals(3, IterableTools.countTrue(c, new MapToolsTests.StringLengthPredicate(3)));
}
public void testContainsAllIterableCollection() {
Iterable<String> iterable = this.buildStringList1();
assertTrue(IterableTools.containsAll(iterable, this.buildStringList1()));
}
public void testContainsAllIterableIntCollection() {
Iterable<String> iterable = this.buildStringList1();
assertTrue(IterableTools.containsAll(iterable, 3, this.buildStringList1()));
}
public void testContainsAllIterableIterable() {
Iterable<String> iterable1 = this.buildStringList1();
Iterable<String> iterable2 = this.buildStringList1();
assertTrue(IterableTools.containsAll(iterable1, iterable2));
}
public void testContainsAllIterableIntIterable() {
Iterable<String> iterable1 = this.buildStringList1();
Iterable<String> iterable2 = this.buildStringList1();
assertTrue(IterableTools.containsAll(iterable1, 3, iterable2));
}
public void testContainsAllIterableIterator() {
Iterable<String> iterable = this.buildStringList1();
assertTrue(IterableTools.containsAll(iterable, this.buildStringList1().iterator()));
}
public void testContainsAllIterableIntIterator() {
Iterable<String> iterable = this.buildStringList1();
assertTrue(IterableTools.containsAll(iterable, 3, this.buildStringList1().iterator()));
}
public void testContainsAllIterableObjectArray() {
Iterable<String> iterable = this.buildStringList1();
assertTrue(IterableTools.containsAll(iterable, this.buildObjectArray1()));
iterable = this.buildStringList2();
assertFalse(IterableTools.containsAll(iterable, this.buildObjectArray1()));
}
public void testContainsAllIterableIntObjectArray() {
Iterable<String> iterable = this.buildStringList1();
assertTrue(IterableTools.containsAll(iterable, 3, this.buildObjectArray1()));
iterable = this.buildStringList2();
assertFalse(IterableTools.containsAll(iterable, 3, this.buildObjectArray1()));
}
public void testElementsAreDifferentIterableIterable() {
List<String> list1 = new ArrayList<String>();
list1.add("1000");
list1.add("2000");
list1.add("3000");
list1.add("4000");
List<String> list2 = new ArrayList<String>();
assertTrue(IterableTools.elementsAreDifferent(list1, list2));
assertFalse(IterableTools.elementsAreEqual(list1, list2));
}
public void testElementsAreEqualIterableIterable() {
List<String> list1 = new ArrayList<String>();
list1.add("1000");
list1.add("2000");
list1.add("3000");
list1.add("4000");
List<String> list2 = new ArrayList<String>();
for (int i = 0; i < list1.size(); i++) {
list2.add(String.valueOf((i + 1) * 1000));
}
assertFalse(IterableTools.elementsAreIdentical(list1, list2));
assertFalse(IterableTools.elementsAreDifferent(list1, list2));
assertTrue(IterableTools.elementsAreEqual(list1, list2));
}
public void testElementsAreIdenticalIterableIterable() {
List<String> list1 = new ArrayList<String>();
list1.add("0");
list1.add("1");
list1.add("2");
list1.add("3");
Iterable<String> iterable1 = list1;
List<String> list2 = new ArrayList<String>();
for (String s : list1) {
list2.add(s);
}
Iterable<String> iterable2 = list2;
assertTrue(IterableTools.elementsAreIdentical(iterable1, iterable2));
assertTrue(IterableTools.elementsAreEqual(iterable1, iterable2));
}
public void testElementsAreNotIdenticalIterableIterable() {
List<String> list1 = new ArrayList<String>();
list1.add("0");
list1.add("1");
list1.add("2");
list1.add("3");
Iterable<String> iterable1 = list1;
List<String> list2 = new ArrayList<String>();
for (String s : list1) {
list2.add(s);
}
Iterable<String> iterable2 = list2;
assertFalse(IterableTools.elementsAreNotIdentical(iterable1, iterable2));
assertTrue(IterableTools.elementsAreEqual(iterable1, iterable2));
}
public void testExecuteParmCommand() {
List<String> list = this.buildStringList1();
ArrayToolsTests.ConcatenateClosure closure = new ArrayToolsTests.ConcatenateClosure();
IterableTools.execute(list, closure);
assertEquals("zeroonetwo", closure.string);
}
public void testExecuteInterruptibleParmCommand() throws Exception {
List<String> list = this.buildStringList1();
ArrayToolsTests.InterruptibleConcatenateClosure closure = new ArrayToolsTests.InterruptibleConcatenateClosure();
IterableTools.execute(list, closure);
assertEquals("zeroonetwo", closure.string);
}
public void testGetIterableInt() {
List<String> list = this.buildStringList1();
Iterable<String> iterable = list;
String o = IterableTools.get(iterable, 1);
assertEquals("one", o);
list.add(null);
o = IterableTools.get(iterable, 3);
assertNull(o);
}
public void testHashCodeIterable1() {
Iterable<String> iterable = null;
assertEquals(0, IterableTools.hashCode(iterable));
}
public void testHashCodeIterable2() {
List<String> list = this.buildStringList1();
Iterable<String> iterable = list;
int hashCode = IterableTools.hashCode(iterable);
assertEquals(list.hashCode(), hashCode);
list.add(null);
hashCode = IterableTools.hashCode(iterable);
assertEquals(list.hashCode(), hashCode);
}
public void testIndexOfIterableObject_String() {
Iterable<String> iterable = this.buildStringList1();
assertEquals(1, IterableTools.indexOf(iterable, "one"));
}
public void testIndexOfIterableObjectInt() {
Iterable<String> iterable = this.buildStringList1();
assertEquals(1, IterableTools.indexOf(iterable, "one", -11));
assertEquals(1, IterableTools.indexOf(iterable, "one", 1));
assertEquals(-1, IterableTools.indexOf(iterable, "one", 2));
assertEquals(-1, IterableTools.indexOf(iterable, "one", 22));
}
public void testIsEmptyIterable() {
assertFalse(IterableTools.isEmpty(buildObjectList1()));
assertTrue(IterableTools.isEmpty(EmptyIterable.instance()));
}
public void testIterableObjectArray() {
String[] strings = this.buildStringArray1();
int i = 0;
for (String string : IterableTools.iterable(strings)) {
assertEquals(strings[i++], string);
}
}
public void testLastIterable1() {
List<String> list = this.buildStringList1();
Iterable<String> iterable = list;
assertEquals("two", IterableTools.last(iterable));
list.add(null);
assertEquals(null, IterableTools.last(iterable));
}
public void testLastIterable2() {
Iterable<String> iterable = new ArrayList<String>();
boolean exCaught = false;
try {
IterableTools.last(iterable);
fail();
} catch (NoSuchElementException ex) {
exCaught = true;
}
assertTrue(exCaught);
}
public void testLastIndexOfIterableObject() {
List<String> list = this.buildStringList1();
Iterable<String> iterable = list;
assertEquals(1, IterableTools.lastIndexOf(iterable, "one"));
list.add(null);
assertEquals(list.size() - 1, IterableTools.lastIndexOf(iterable, null));
}
public void testLastIndexOfIterableObjectInt() {
Iterable<String> iterable = this.buildStringList1();
assertEquals(-1, IterableTools.lastIndexOf(iterable, "one", -11));
assertEquals(1, IterableTools.lastIndexOf(iterable, "one", 1));
assertEquals(1, IterableTools.lastIndexOf(iterable, "one", 2));
assertEquals(1, IterableTools.lastIndexOf(iterable, "one", 22));
}
public void testSizeIterable() {
Iterable<Object> iterable = this.buildObjectList1();
assertEquals(3, IterableTools.size(iterable));
}
public void testSortIterable() {
ArrayList<String> list = new ArrayList<String>();
list.add("0");
list.add("2");
list.add("3");
list.add("1");
SortedSet<String> ss = new TreeSet<String>();
ss.addAll(list);
Iterable<String> iterable1 = list;
Iterable<String> iterable2 = IterableTools.<String>sort(iterable1);
assertTrue(IterableTools.elementsAreEqual(ss, iterable2));
}
public void testSortIterableInt() {
ArrayList<String> list = new ArrayList<String>();
list.add("0");
list.add("2");
list.add("3");
list.add("1");
SortedSet<String> ss = new TreeSet<String>();
ss.addAll(list);
Iterable<String> iterable1 = list;
Iterable<String> iterable2 = IterableTools.<String>sort(iterable1, 77);
assertTrue(IterableTools.elementsAreEqual(ss, iterable2));
}
public void testSortIterableComparator() {
ArrayList<String> list = new ArrayList<String>();
list.add("0");
list.add("2");
list.add("3");
list.add("1");
SortedSet<String> ss = new TreeSet<String>(ComparatorTools.<String>reverseComparator());
ss.addAll(list);
Iterable<String> iterable1 = list;
Iterable<String> iterable2 = IterableTools.<String>sort(iterable1, ComparatorTools.<String>reverseComparator());
assertTrue(IterableTools.elementsAreEqual(ss, iterable2));
}
public void testSortIterableComparatorInt() {
ArrayList<String> list = new ArrayList<String>();
list.add("0");
list.add("2");
list.add("3");
list.add("1");
SortedSet<String> ss = new TreeSet<String>(ComparatorTools.<String>reverseComparator());
ss.addAll(list);
Iterable<String> iterable1 = list;
Iterable<String> iterable2 = IterableTools.<String>sort(iterable1, ComparatorTools.<String>reverseComparator(), 77);
assertTrue(IterableTools.elementsAreEqual(ss, iterable2));
}
public void testTransformIterableTransformer() {
List<String> list = Arrays.asList(new String[] { "zero", "one", "two" });
Iterable<String> actual = IterableTools.transform(list, ArrayToolsTests.UPPER_CASE_TRANSFORMER);
List<Object> expected = Arrays.asList(new Object[] { "ZERO", "ONE", "TWO" });
assertTrue(IterableTools.elementsAreEqual(expected, actual));
}
public void testConstructor() {
boolean exCaught = false;
try {
Object at = ClassTools.newInstance(IterableTools.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);
}
private Object[] buildObjectArray1() {
return new Object[] { "zero", "one", "two" };
}
private String[] buildStringArray1() {
return new String[] { "zero", "one", "two" };
}
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 List<String> buildStringList2() {
List<String> l = new ArrayList<String>();
this.addToCollection2(l);
return l;
}
private void addToCollection1(Collection<? super String> c) {
c.add("zero");
c.add("one");
c.add("two");
}
private void addToCollection2(Collection<? super String> c) {
c.add("three");
c.add("four");
c.add("five");
}
}