/**
* Copyright (c) 2005-2007 IBM Corporation and others.
* 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:
* IBM - Initial API and implementation
*/
package org.eclipse.emf.test.core.common.util;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedList;
import java.util.List;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
import org.eclipse.emf.common.util.BasicEList;
import org.eclipse.emf.common.util.ECollections;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.common.util.UniqueEList;
import org.eclipse.emf.test.common.TestUtil;
public class ECollectionsTest extends TestCase
{
public ECollectionsTest(String name)
{
super(name);
}
public static Test suite()
{
TestSuite ts = new TestSuite("ECollectionsTest");
ts.addTest(new ECollectionsTest("testSortEList"));
ts.addTest(new ECollectionsTest("testIndexOf1"));
ts.addTest(new ECollectionsTest("testIndexOf2"));
ts.addTest(new ECollectionsTest("testSetEList"));
ts.addTest(new ECollectionsTest("testMoveIntInt"));
ts.addTest(new ECollectionsTest("testMoveIntObject"));
return ts;
}
public void testSortEList()
{
Comparator<String> comparator = new Comparator<String>()
{
public int compare(String c1, String c2)
{
return -1 * c1.compareTo(c2);
}
@Override
public boolean equals(Object obj)
{
return obj == this;
}
};
List<String> initialList = new ArrayList<String>();
initialList.add("k");
initialList.add("a");
initialList.add("f");
initialList.add("b");
initialList.add("z");
initialList.add("a");
initialList.add("b");
List<String> sortedList = new ArrayList<String>(initialList);
Collections.sort(sortedList);
EList<String> eList = new BasicEList<String>(initialList);
assertTrue(TestUtil.areEqual(initialList, eList));
ECollections.sort(eList);
assertTrue(TestUtil.areEqual(sortedList, eList));
sortedList = new ArrayList<String>(initialList);
Collections.sort(sortedList, comparator);
eList = new BasicEList<String>(initialList);
assertTrue(TestUtil.areEqual(initialList, eList));
ECollections.sort(eList, comparator);
assertTrue(TestUtil.areEqual(sortedList, eList));
initialList = new ArrayList<String>();
initialList.add("k");
initialList.add("f");
initialList.add("b");
initialList.add("z");
initialList.add("a");
sortedList = new ArrayList<String>(initialList);
Collections.sort(sortedList);
eList = new UniqueEList<String>(initialList);
assertTrue(TestUtil.areEqual(initialList, eList));
ECollections.sort(eList);
assertTrue(TestUtil.areEqual(sortedList, eList));
sortedList = new ArrayList<String>(initialList);
Collections.sort(sortedList, comparator);
eList = new BasicEList<String>(initialList);
assertTrue(TestUtil.areEqual(initialList, eList));
ECollections.sort(eList, comparator);
assertTrue(TestUtil.areEqual(sortedList, eList));
}
public void testIndexOf1()
{
EList<String> eList = new BasicEList<String>();
eList.add("k");
eList.add("a");
eList.add("f");
eList.add("k");
eList.add("b");
eList.add("z");
eList.add("a");
eList.add("b");
assertEquals(0, ECollections.indexOf(eList, "k", -1));
assertEquals(-1, ECollections.indexOf(eList, "k", 10));
assertEquals(0, ECollections.indexOf(eList, "k", 0));
assertEquals(1, ECollections.indexOf(eList, "a", 0));
assertEquals(2, ECollections.indexOf(eList, "f", 0));
assertEquals(3, ECollections.indexOf(eList, "k", 1));
assertEquals(3, ECollections.indexOf(eList, "k", 3));
assertEquals(4, ECollections.indexOf(eList, "b", 0));
assertEquals(5, ECollections.indexOf(eList, "z", 0));
assertEquals(6, ECollections.indexOf(eList, "a", 3));
assertEquals(7, ECollections.indexOf(eList, "b", 5));
eList = new UniqueEList<String>();
eList.add("k");
eList.add("a");
eList.add("f");
eList.add("k");
eList.add("b");
eList.add("z");
eList.add("a");
eList.add("b");
assertEquals(0, ECollections.indexOf(eList, "k", -1));
assertEquals(-1, ECollections.indexOf(eList, "k", 10));
assertEquals(0, ECollections.indexOf(eList, "k", 0));
assertEquals(1, ECollections.indexOf(eList, "a", 0));
assertEquals(2, ECollections.indexOf(eList, "f", 0));
assertEquals(-1, ECollections.indexOf(eList, "k", 1));
assertEquals(-1, ECollections.indexOf(eList, "k", 3));
assertEquals(3, ECollections.indexOf(eList, "b", 0));
assertEquals(4, ECollections.indexOf(eList, "z", 0));
assertEquals(-1, ECollections.indexOf(eList, "a", 3));
assertEquals(-1, ECollections.indexOf(eList, "b", 5));
}
public void testIndexOf2()
{
assertIndexOf(populateList(new ArrayList<Object>()));
assertIndexOf(populateList(new LinkedList<Object>()));
assertIndexOf(populateList(new BasicEList<Object>()));
}
public void testSetEList()
{
assertSetEList(populateList(new ArrayList<Object>()));
assertSetEList(populateList(new LinkedList<Object>()));
assertSetEList(populateList(new UniqueEList<Object>()));
}
protected List<Object> populateList(List<Object> list)
{
list.add(null); //0
list.add(Boolean.FALSE); //1
list.add(1); //2
list.add(2); //3
list.add(null); //4
list.add("String"); //5
list.add(1); //6
list.add("String"); //7
list.add(Boolean.FALSE); //8
return list;
}
protected void assertIndexOf(List<?> list)
{
assertEquals(0, ECollections.indexOf(list, null, 0));
assertEquals(4, ECollections.indexOf(list, null, 1));
assertEquals(4, ECollections.indexOf(list, null, 4));
assertEquals(1, ECollections.indexOf(list, Boolean.FALSE, 1));
assertEquals(8, ECollections.indexOf(list, Boolean.FALSE, 2));
assertEquals(-1, ECollections.indexOf(list, Boolean.FALSE, 9));
assertEquals(1, ECollections.indexOf(list, Boolean.FALSE, -2));
assertEquals(2, ECollections.indexOf(list, 1, 0));
assertEquals(2, ECollections.indexOf(list, 1, 2));
assertEquals(6, ECollections.indexOf(list, 1, 3));
assertEquals(5, ECollections.indexOf(list, "String", 3));
assertEquals(-1, ECollections.indexOf(list, null, 1000));
assertEquals(-1, ECollections.indexOf(list, "String", 1000));
}
protected void assertSetEList(List<?> prototypeList)
{
EList<Object> eList = new BasicEList<Object>();
ECollections.setEList(eList, prototypeList);
assertTrue("Empty list test", TestUtil.areEqual(prototypeList, eList));
eList = new BasicEList<Object>();
eList.add(0, "String");
eList.add(Boolean.FALSE);
ECollections.setEList(eList, prototypeList);
assertTrue("Smaller list test", TestUtil.areEqual(prototypeList, eList));
eList = (EList<Object>)populateList(new BasicEList<Object>());
ECollections.setEList(eList, prototypeList);
assertTrue("Same list test", TestUtil.areEqual(prototypeList, eList));
eList.remove(2);
eList.add(3, this);
ECollections.setEList(eList, prototypeList);
assertTrue("Equal size list test", TestUtil.areEqual(prototypeList, eList));
eList.add(0, "String");
eList.add(2, Boolean.FALSE);
eList.add(Boolean.FALSE);
eList.add(this);
ECollections.setEList(eList, prototypeList);
assertTrue("Bigger list test", TestUtil.areEqual(prototypeList, eList));
}
/*
* Bugzilla: 133907
*/
public void testMoveIntInt() throws Exception
{
EList<Object> originalList = new BasicEList<Object>();
originalList.add("pos0");
originalList.add("pos1");
originalList.add(2);
originalList.add("pos3");
EList<Object> eList = new BasicEList<Object>(originalList);
List<Object> list = new ArrayList<Object>(originalList);
int target = 2, source = 3;
originalList.move(target, source);
ECollections.move(eList, target, source);
assertTrue(TestUtil.areEqual(originalList, eList));
ECollections.move(list, target, source);
assertTrue(TestUtil.areEqual(originalList, list));
target = 2; source = 0;
originalList.move(target, source);
ECollections.move(eList, target, source);
assertTrue(TestUtil.areEqual(originalList, eList));
ECollections.move(list, target, source);
assertTrue(TestUtil.areEqual(originalList, list));
target = 1; source = 1;
originalList.move(target, source);
ECollections.move(eList, target, source);
assertTrue(TestUtil.areEqual(originalList, eList));
ECollections.move(list, target, source);
assertTrue(TestUtil.areEqual(originalList, list));
target = 0; source = 3;
originalList.move(target, source);
ECollections.move(eList, target, source);
assertTrue(TestUtil.areEqual(originalList, eList));
ECollections.move(list, target, source);
assertTrue(TestUtil.areEqual(originalList, list));
}
/*
* Bugzilla: 133907
*/
public void testMoveIntObject() throws Exception
{
EList<Object> originalList = new BasicEList<Object>();
originalList.add("pos0");
originalList.add("pos1");
originalList.add(2);
originalList.add("pos3");
EList<Object> eList = new BasicEList<Object>(originalList);
List<Object> list = new ArrayList<Object>(originalList);
int target = 2; Object object = originalList.get(3);
originalList.move(target, object);
ECollections.move(eList, target, object);
assertTrue(TestUtil.areEqual(originalList, eList));
ECollections.move(list, target, object);
assertTrue(TestUtil.areEqual(originalList, list));
target = 2; object = originalList.get(0);
originalList.move(target, object);
ECollections.move(eList, target, object);
assertTrue(TestUtil.areEqual(originalList, eList));
ECollections.move(list, target, object);
assertTrue(TestUtil.areEqual(originalList, list));
target = 1; object = originalList.get(1);
originalList.move(target, object);
ECollections.move(eList, target, object);
assertTrue(TestUtil.areEqual(originalList, eList));
ECollections.move(list, target, object);
assertTrue(TestUtil.areEqual(originalList, list));
target = 0; object = originalList.get(3);
originalList.move(target, object);
ECollections.move(eList, target, object);
assertTrue(TestUtil.areEqual(originalList, eList));
ECollections.move(list, target, object);
assertTrue(TestUtil.areEqual(originalList, list));
}
}