/*
* Beanfabrics Framework Copyright (C) by Michael Karneim, beanfabrics.org
* Use is subject to license terms. See license.txt.
*/
package org.beanfabrics.model;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertSame;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.ListIterator;
import junit.framework.JUnit4TestAdapter;
import org.beanfabrics.Path;
import org.beanfabrics.event.ElementChangedEvent;
import org.beanfabrics.event.ElementsAddedEvent;
import org.beanfabrics.event.ElementsDeselectedEvent;
import org.beanfabrics.event.ElementsRemovedEvent;
import org.beanfabrics.event.ElementsReplacedEvent;
import org.beanfabrics.event.ElementsSelectedEvent;
import org.beanfabrics.event.ListListener;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.Test;
/**
* @author Michael Karneim
*/
public class ListPMTest {
public static junit.framework.Test suite() {
return new JUnit4TestAdapter(ListPMTest.class);
}
private static class DummyPM extends AbstractPM {
public final IntegerPM id = new IntegerPM();
public final TextPM text = new TextPM();
public final SubDummyPM subDummy = new SubDummyPM();
public DummyPM() {
PMManager.setup(this);
}
public DummyPM(int id, String text, String subText) {
this();
this.id.setInteger(id);
this.text.setText(text);
this.subDummy.text.setText(subText);
}
public String getId() {
return id.getText();
}
}
private static class SubDummyPM extends AbstractPM {
public final TextPM text = new TextPM();
public SubDummyPM() {
PMManager.setup(this);
}
}
ListPM<DummyPM> list;
int size;
EventCounter counter;
int elementIndex;
DummyPM element;
public ListPMTest() {
}
@Before
public void setUp()
throws Exception {
list = new ListPM<DummyPM>();
size = 10;
elementIndex = 5;
for (int i = 0; i < size; ++i) {
DummyPM dummy = new DummyPM();
if (i == elementIndex) {
element = dummy;
}
dummy.id.setInteger(i);
list.add(dummy);
}
counter = new EventCounter();
list.addListListener(counter);
}
@AfterClass
public static void tearDownClass()
throws Exception {
}
@Test
public void add() {
DummyPM dummy = new DummyPM();
dummy.id.setInteger(9999);
int index = list.size();
list.add(dummy);
assertEquals("list.getAt(index)", dummy, list.getAt(index));
assertEquals("counter.elementsAdded", 1, counter.elementsAdded);
assertEquals("list.getSelection().getMaxIndex()", -1, list.getSelection().getMaxIndex());
assertEquals("list.getSelection().getMinIndex()", -1, list.getSelection().getMinIndex());
}
@Test
public void addAtIndex() {
DummyPM dummy = new DummyPM();
dummy.id.setInteger(9999);
int index = elementIndex;
list.add(index, dummy);
assertEquals("list.getAt(index)", dummy, list.getAt(index));
assertEquals("list.getAt(index)", element, list.getAt(index + 1));
assertEquals("counter.elementsAdded", 1, counter.elementsAdded);
assertEquals("list.getSelection().getMaxIndex()", -1, list.getSelection().getMaxIndex());
assertEquals("list.getSelection().getMinIndex()", -1, list.getSelection().getMinIndex());
}
@Test
public void addAtIndexWithSelection() {
DummyPM dummy = new DummyPM();
dummy.id.setInteger(9999);
int index = elementIndex;
list.getSelection().setInterval(index, index);
assertEquals("counter.elementsSelected", 1, counter.elementsSelected);
assertEquals("list.getSelection().getMaxIndex()", index, list.getSelection().getMaxIndex());
assertEquals("list.getSelection().getMinIndex()", index, list.getSelection().getMinIndex());
list.add(index, dummy);
assertEquals("list.getAt(index)", dummy, list.getAt(index));
assertEquals("list.getAt(index)", element, list.getAt(index + 1));
assertEquals("list.getSelection().contains(index)", false, list.getSelection().contains(index));
assertEquals("list.getSelection().contains(index+1)", true, list.getSelection().contains(index + 1));
assertEquals("list.getSelection().getMaxIndex()", index + 1, list.getSelection().getMaxIndex());
assertEquals("list.getSelection().getMinIndex()", index + 1, list.getSelection().getMinIndex());
assertEquals("counter.elementsAdded", 1, counter.elementsAdded);
assertEquals("counter.elementsSelected", 1, counter.elementsSelected);
assertEquals("counter.elementsDeselected", 0, counter.elementsDeselected);
}
@Test
public void addAll() {
// just add one row
Collection<DummyPM> newCol = new LinkedList<DummyPM>();
DummyPM pModel = new DummyPM();
int newId = size;
pModel.id.setInteger(newId);
newCol.add(pModel);
list.addAll(newCol);
assertEquals("list.size()", size + 1, list.size());
assertEquals("counter.elementsAdded", 1, counter.elementsAdded);
assertEquals("counter.elementsRemoved", 0, counter.elementsRemoved);
assertEquals("counter.elementsSelected", 0, counter.elementsSelected);
assertEquals("counter.elementsDeselected", 0, counter.elementsDeselected);
assertEquals("list.contains(pModel)", true, list.contains(pModel));
assertEquals("list.getSelection().getMaxIndex()", -1, list.getSelection().getMaxIndex());
assertEquals("list.getSelection().getMinIndex()", -1, list.getSelection().getMinIndex());
assertEquals("newCol.size()", 1, newCol.size());
assertEquals("list.containsAll( newCol)", true, list.containsAll(newCol));
}
@Test
public void addAll2() {
Collection<DummyPM> newCol = new LinkedList<DummyPM>();
final int addNum = 20;
int startIndex = this.size;
for (int i = 0; i < addNum; ++i) {
DummyPM dummy = new DummyPM();
dummy.id.setInteger(i + startIndex);
newCol.add(dummy);
}
list.addAll(newCol);
assertEquals("list.size()", size + addNum, list.size());
assertEquals("counter.elementsAdded", 1, counter.elementsAdded);
assertEquals("counter.elementsRemoved", 0, counter.elementsRemoved);
assertEquals("counter.elementsSelected", 0, counter.elementsSelected);
assertEquals("counter.elementsDeselected", 0, counter.elementsDeselected);
assertEquals("list.containsAll( newCol)", true, list.containsAll(newCol));
assertEquals("list.getSelection().getMaxIndex()", -1, list.getSelection().getMaxIndex());
assertEquals("list.getSelection().getMinIndex()", -1, list.getSelection().getMinIndex());
}
@Test
public void sort() {
Object[] initialOrder = list.toArray();
list.sortBy(true, new Path("id"));
Object[] order1 = list.toArray();
for (int i = 0; i < initialOrder.length; ++i) {
assertSame("order1[i='" + i + "']", initialOrder[i], order1[i]);
}
assertEquals("list.getSelection().getMaxIndex()", -1, list.getSelection().getMaxIndex());
assertEquals("list.getSelection().getMaxIndex()", -1, list.getSelection().getMinIndex());
list.sortBy(false, new Path("id"));
Object[] order2 = list.toArray();
for (int i = 0; i < initialOrder.length; ++i) {
assertSame("order2[i='" + i + "']", initialOrder[initialOrder.length - i - 1], order2[i]);
}
assertEquals("list.getSelection().getMaxIndex()", -1, list.getSelection().getMaxIndex());
assertEquals("list.getSelection().getMinIndex()", -1, list.getSelection().getMinIndex());
}
@Test
public void sort2() {
ListPM<DummyPM> myList = new ListPM<DummyPM>();
List<DummyPM> dummyList = new ArrayList<DummyPM>();
int nextId = 0;
dummyList.add(new DummyPM(nextId++, "pineapple", ""));
dummyList.add(new DummyPM(nextId++, "lemon", ""));
dummyList.add(new DummyPM(nextId++, "apple", ""));
dummyList.add(new DummyPM(nextId++, "orange", ""));
myList.addAll(dummyList);
Object[] initialOrder = myList.toArray();
for (int i = 0; i < initialOrder.length; ++i) {
assertSame("initialOrder[i='" + i + "']", initialOrder[i], dummyList.get(i));
}
myList.sortBy(true, new Path("this.text"));
assertEquals("myList.getAt(0).text.getText()", "apple", myList.getAt(0).text.getText());
assertEquals("myList.getAt(1).text.getText()", "lemon", myList.getAt(1).text.getText());
assertEquals("myList.getAt(2).text.getText()", "orange", myList.getAt(2).text.getText());
assertEquals("myList.getAt(3).text.getText()", "pineapple", myList.getAt(3).text.getText());
assertEquals("myList.getSelection().getMaxIndex()", -1, myList.getSelection().getMaxIndex());
assertEquals("myList.getSelection().getMinIndex()", -1, myList.getSelection().getMinIndex());
}
@Test
public void sort3() {
ListPM<DummyPM> myList = new ListPM<DummyPM>();
List<DummyPM> dummyList = new ArrayList<DummyPM>();
int nextId = 0;
dummyList.add(new DummyPM(nextId++, "", "pineapple"));
dummyList.add(new DummyPM(nextId++, "", "lemon"));
dummyList.add(new DummyPM(nextId++, "", "apple"));
dummyList.add(new DummyPM(nextId++, "", "orange"));
myList.addAll(dummyList);
Object[] initialOrder = myList.toArray();
for (int i = 0; i < initialOrder.length; ++i) {
assertSame("initialOrder[i='" + i + "']", initialOrder[i], dummyList.get(i));
}
myList.sortBy(true, new Path("this.subDummy.text"));
assertEquals("myList.getAt(0).subDummy.text.getText()", "apple", myList.getAt(0).subDummy.text.getText());
assertEquals("myList.getAt(1).subDummy.text.getText()", "lemon", myList.getAt(1).subDummy.text.getText());
assertEquals("myList.getAt(2).subDummy.text.getText()", "orange", myList.getAt(2).subDummy.text.getText());
assertEquals("myList.getAt(3).subDummy.text.getText()", "pineapple", myList.getAt(3).subDummy.text.getText());
assertEquals("myList.getSelection().getMaxIndex()", -1, myList.getSelection().getMaxIndex());
assertEquals("myList.getSelection().getMinIndex()", -1, myList.getSelection().getMinIndex());
}
@Test
public void swapNeighborsAscending() {
int indexA = 3;
DummyPM dummy1 = list.getAt(indexA);
int indexB = 4;
DummyPM dummy2 = list.getAt(indexB);
list.swap(indexA, indexB);
assertEquals("list.getAt(indexA)", dummy2, list.getAt(indexA));
assertEquals("list.getAt(indexB)", dummy1, list.getAt(indexB));
assertEquals("list.getSelection().getMaxIndex()", -1, list.getSelection().getMaxIndex());
assertEquals("list.getSelection().getMinIndex()", -1, list.getSelection().getMinIndex());
}
@Test
public void swapNeighborsDescendig() {
int indexA = 4;
DummyPM dummy1 = list.getAt(indexA);
int indexB = 3;
DummyPM dummy2 = list.getAt(indexB);
list.swap(indexA, indexB);
assertEquals("list.getAt(indexA)", dummy2, list.getAt(indexA));
assertEquals("list.getAt(indexB)", dummy1, list.getAt(indexB));
assertEquals("list.getSelection().getMaxIndex()", -1, list.getSelection().getMaxIndex());
assertEquals("list.getSelection().getMinIndex()", -1, list.getSelection().getMinIndex());
}
@Test
public void swapNeighborsAscendingWithSelection() {
int indexA = 3;
DummyPM dummy1 = list.getAt(indexA);
int indexB = 4; // must be greater than indexA (for correct assertions below)
DummyPM dummy2 = list.getAt(indexB);
list.getSelection().add(dummy1);
assertEquals("counter.elementsSelected", 1, counter.elementsSelected);
assertEquals("list.getSelection().getMaxIndex()", indexA, list.getSelection().getMaxIndex());
assertEquals("list.getSelection().getMinIndex()", indexA, list.getSelection().getMinIndex());
list.swap(indexA, indexB);
assertEquals("list.getAt(indexA)", dummy2, list.getAt(indexA));
assertEquals("list.getAt(indexB)", dummy1, list.getAt(indexB));
assertEquals("list.getSelection().contains(edA)", true, list.getSelection().contains(dummy1));
assertEquals("list.getSelection().contains(edB)", false, list.getSelection().contains(dummy2));
assertEquals("list.getSelection().getMaxIndex()", indexB, list.getSelection().getMaxIndex());
assertEquals("list.getSelection().getMinIndex()", indexB, list.getSelection().getMinIndex());
assertEquals("counter.elementsSelected", 1, counter.elementsDeselected);
assertEquals("counter.elementsSelected", 2, counter.elementsSelected);
}
@Test
public void swapNeighborsDescendingWithSelection() {
int indexA = 4;
DummyPM dummy1 = list.getAt(indexA);
int indexB = 3; // must be less than indexA for correct selection assertions below
DummyPM dummy2 = list.getAt(indexB);
list.getSelection().add(dummy1);
assertEquals("counter.elementsSelected", 1, counter.elementsSelected);
assertEquals("list.getSelection().getMaxIndex()", indexA, list.getSelection().getMaxIndex());
assertEquals("list.getSelection().getMinIndex()", indexA, list.getSelection().getMinIndex());
list.swap(indexA, indexB);
assertEquals("list.getAt(indexA)", dummy2, list.getAt(indexA));
assertEquals("list.getAt(indexB)", dummy1, list.getAt(indexB));
assertEquals("list.getSelection().contains(edA)", true, list.getSelection().contains(dummy1));
assertEquals("list.getSelection().contains(edB)", false, list.getSelection().contains(dummy2));
assertEquals("list.getSelection().getMaxIndex()", indexB, list.getSelection().getMaxIndex());
assertEquals("list.getSelection().getMinIndex()", indexB, list.getSelection().getMinIndex());
assertEquals("counter.elementsSelected", 1, counter.elementsDeselected);
assertEquals("counter.elementsSelected", 2, counter.elementsSelected);
}
@Test
public void swapAscending() {
int indexA = 1;
DummyPM dummy1 = list.getAt(indexA);
int indexB = 6;
DummyPM dummy2 = list.getAt(indexB);
list.swap(indexA, indexB);
assertEquals("list.getAt(indexA)", dummy2, list.getAt(indexA));
assertEquals("list.getAt(indexB)", dummy1, list.getAt(indexB));
assertEquals("list.getSelection().getMaxIndex()", -1, list.getSelection().getMaxIndex());
assertEquals("list.getSelection().getMinIndex()", -1, list.getSelection().getMinIndex());
}
@Test
public void swapAscending2() {
int indexA = 4;
DummyPM dummy1 = list.getAt(indexA);
int indexB = 7;
DummyPM dummy2 = list.getAt(indexB);
list.swap(indexA, indexB);
assertEquals("list.getAt(indexA)", dummy2, list.getAt(indexA));
assertEquals("list.getAt(indexB)", dummy1, list.getAt(indexB));
assertEquals("list.getSelection().getMaxIndex()", -1, list.getSelection().getMaxIndex());
assertEquals("list.getSelection().getMinIndex()", -1, list.getSelection().getMinIndex());
}
@Test
public void swapDescendig() {
int indexA = 6;
DummyPM dummy1 = list.getAt(indexA);
int indexB = 1;
DummyPM dummy2 = list.getAt(indexB);
list.swap(indexA, indexB);
assertEquals("list.getAt(indexA)", dummy2, list.getAt(indexA));
assertEquals("list.getAt(indexB)", dummy1, list.getAt(indexB));
assertEquals("list.getSelection().getMaxIndex()", -1, list.getSelection().getMaxIndex());
assertEquals("list.getSelection().getMinIndex()", -1, list.getSelection().getMinIndex());
}
@Test
public void swapAscendingWithSelection() {
int indexA = 1;
DummyPM dummy1 = list.getAt(indexA);
int indexB = 6; // must be greater than indexA
DummyPM dummy2 = list.getAt(indexB);
list.getSelection().add(dummy1);
assertEquals("list.getSelection().getMaxIndex()", indexA, list.getSelection().getMaxIndex());
assertEquals("list.getSelection().getMinIndex()", indexA, list.getSelection().getMinIndex());
list.swap(indexA, indexB);
assertEquals("list.getAt(indexA)", dummy2, list.getAt(indexA));
assertEquals("list.getAt(indexB)", dummy1, list.getAt(indexB));
assertEquals("list.getSelection().contains(edA)", true, list.getSelection().contains(dummy1));
assertEquals("list.getSelection().contains(edB)", false, list.getSelection().contains(dummy2));
assertEquals("list.getSelection().getMaxIndex()", indexB, list.getSelection().getMaxIndex());
assertEquals("list.getSelection().getMinIndex()", indexB, list.getSelection().getMinIndex());
}
@Test
public void swapDescendingWithSelection() {
int indexA = 6;
DummyPM dummy1 = list.getAt(indexA);
int indexB = 1; // must be less than indexA
DummyPM dummy2 = list.getAt(indexB);
list.getSelection().add(dummy1);
assertEquals("list.getSelection().getMaxIndex()", indexA, list.getSelection().getMaxIndex());
assertEquals("list.getSelection().getMinIndex()", indexA, list.getSelection().getMinIndex());
list.swap(indexA, indexB);
assertEquals("list.getAt(indexA)", dummy2, list.getAt(indexA));
assertEquals("list.getAt(indexB)", dummy1, list.getAt(indexB));
assertEquals("list.getSelection().contains(edA)", true, list.getSelection().contains(dummy1));
assertEquals("list.getSelection().contains(edB)", false, list.getSelection().contains(dummy2));
assertEquals("list.getSelection().getMaxIndex()", indexB, list.getSelection().getMaxIndex());
assertEquals("list.getSelection().getMinIndex()", indexB, list.getSelection().getMinIndex());
}
@Test
public void remove() {
int sizeBefore = list.size();
DummyPM pModel = list.getAt(0);
assertEquals("list.contains(pModel)", true, list.contains(pModel));
list.remove(pModel);
assertEquals("list.size()", sizeBefore - 1, list.size());
assertEquals("counter.elementsRemoved", 1, counter.elementsRemoved);
assertEquals("list.contains(pModel)", false, list.contains(pModel));
assertEquals("list.getSelection().getMaxIndex()", -1, list.getSelection().getMaxIndex());
assertEquals("list.getSelection().getMinIndex()", -1, list.getSelection().getMinIndex());
}
@Test
public void removeAt() {
int sizeBefore = list.size();
DummyPM pModel = list.getAt(4);
assertEquals("list.contains(pModel)", true, list.contains(pModel));
list.getSelection().add(pModel);
assertEquals("counter.elementsSelected", 1, counter.elementsSelected);
assertEquals("counter.elementsDeselected", 0, counter.elementsDeselected);
list.removeAt(4);
assertEquals("list.size()", sizeBefore - 1, list.size());
assertEquals("counter.elementsRemoved", 1, counter.elementsRemoved);
assertEquals("counter.elementsSelected", 1, counter.elementsSelected);
assertEquals("counter.elementsDeselected", 1, counter.elementsDeselected);
assertEquals("list.contains(pModel)", false, list.contains(pModel));
assertEquals("list.getSelection().getMaxIndex()", -1, list.getSelection().getMaxIndex());
assertEquals("list.getSelection().getMinIndex()", -1, list.getSelection().getMinIndex());
}
@Test
public void removeAll() {
Collection<DummyPM> copy = list.toCollection();
list.removeAll(copy);
assertEquals("list.size()", 0, list.size());
// just a single event is expected since this is a continuous interval
assertEquals("counter.elementsRemoved", 1, counter.elementsRemoved);
}
@Test
public void removeAll0() {
int sizeBefore = list.size();
list.getSelection().addInterval(3, 8);
Collection<DummyPM> selected = list.getSelection();
Collection<DummyPM> copy = new LinkedList<DummyPM>(selected);
list.removeAll(selected);
assertEquals("list.size()", sizeBefore - 6, list.size());
assertEquals("counter.elementsDeselected", 1, counter.elementsDeselected);
assertEquals("list.getSelection().size()", 0, list.getSelection().size());
assertEquals("selected.size()", 0, selected.size());
for (DummyPM elem : copy) {
assertEquals("list.contains(pModel)", false, list.contains(elem));
}
assertEquals("list.getSelection().getMaxIndex()", -1, list.getSelection().getMaxIndex());
assertEquals("list.getSelection().getMinIndex()", -1, list.getSelection().getMinIndex());
}
@Test
public void removeAll2() {
int sizeBefore = list.size();
list.getSelection().addInterval(1, 3);
list.getSelection().addInterval(8, 9);
assertEquals("list.getSelection().getMaxIndex()", 9, list.getSelection().getMaxIndex());
assertEquals("list.getSelection().getMinIndex()", 1, list.getSelection().getMinIndex());
Collection<DummyPM> copy = new LinkedList<DummyPM>(list.getSelection());
list.removeAll(list.getSelection());
assertEquals("list.size()", sizeBefore - 5, list.size());
assertEquals("counter.elementsDeselected", 2, counter.elementsDeselected);
assertEquals("list.getSelection().size()", 0, list.getSelection().size());
for (DummyPM elem : copy) {
assertEquals("list.contains(pModel)", false, list.contains(elem));
}
assertEquals("list.getSelection().getMaxIndex()", -1, list.getSelection().getMaxIndex());
assertEquals("list.getSelection().getMinIndex()", -1, list.getSelection().getMinIndex());
}
public void removeAll3() {
int sizeBefore = list.size();
Collection<DummyPM> col = new ArrayList<DummyPM>();
col.add(new DummyPM());
col.add(new DummyPM());
list.removeAll(col);
assertEquals("list.size()", sizeBefore, list.size());
assertEquals("counter.elementsDeselected", 0, counter.elementsRemoved);
}
@Test
public void contains() {
assertEquals("list.contains(element)", true, list.contains(element));
assertEquals("list.contains( new DummyPM())", false, list.contains(new DummyPM()));
}
@Test
public void containsAll() {
Collection<DummyPM> col = list.toCollection();
assertEquals("list.containsAll(col)", true, list.containsAll(col));
}
@Test
public void containsAll2() {
Collection<DummyPM> col = list.toCollection();
col.remove(element);
assertEquals("list.containsAll(col)", true, list.containsAll(col));
}
@Test
public void containsAll3() {
Collection<DummyPM> col = list.toCollection();
col.add(new DummyPM());
assertEquals("list.containsAll(col)", false, list.containsAll(col));
}
@Test
public void getAt() {
assertEquals("list.getAt(elementIndex)", element, list.getAt(elementIndex));
}
@Test
public void toCollection() {
Collection<DummyPM> col = list.toCollection();
assertEquals("col.size()", size, col.size());
}
@Test
public void listIterator() {
ListIterator<DummyPM> iter = list.listIterator(0);
assertNotNull("iter", iter);
for (int i = 0; i < this.size; ++i) {
assertEquals("iter.hasNext()", true, iter.hasNext());
DummyPM elem = iter.next();
assertEquals("elem", list.getAt(i), elem);
}
assertEquals("iter.hasNext()", false, iter.hasNext());
}
@Test
public void listIteratorV2() {
int startIndex = 5;
ListIterator<DummyPM> iter = list.listIterator(startIndex);
assertNotNull("iter", iter);
for (int i = startIndex; i < this.size; ++i) {
assertEquals("iter.hasNext()", true, iter.hasNext());
DummyPM elem = iter.next();
assertEquals("elem", list.getAt(i), elem);
}
assertEquals("iter.hasNext()", false, iter.hasNext());
}
@Test
public void listIteratorReverse() {
int startIndex = 5;
ListIterator<DummyPM> iter = list.listIterator(startIndex);
assertNotNull("iter", iter);
for (int i = startIndex - 1; i >= 0; --i) {
assertEquals("iter.hasPrevious()", true, iter.hasPrevious());
DummyPM elem = iter.previous();
assertEquals("elem", list.getAt(i), elem);
}
assertEquals("iter.hasPrevious()", false, iter.hasPrevious());
}
@Test
public void getSelection() {
Selection<DummyPM> sel = list.getSelection();
assertNotNull("sel", sel);
assertEquals("sel.size()", 0, sel.size());
list.getSelection().add(element);
assertEquals("sel.size()", 1, sel.size());
}
@Test
public void indexOf() {
assertEquals("list.indexOf(element)", elementIndex, list.indexOf(element));
}
@Test
public void indicesOf() {
Collection<DummyPM> col = new LinkedList<DummyPM>();
col.add(element);
int[] indices = list.indicesOf(col);
assertEquals("indices.length", 1, indices.length);
assertEquals("indices[0]", elementIndex, indices[0]);
}
@Test
public void indicesOf2() {
int sizeBefore = list.size();
Collection<DummyPM> copy = list.toCollection();
int[] indices = list.indicesOf(copy);
assertEquals("indices.length", sizeBefore, indices.length);
}
@Test
public void isEmpty() {
assertEquals("list.isEmpty()", false, list.isEmpty());
list.clear();
assertEquals("list.isEmpty()", true, list.isEmpty());
assertEquals("list.getSelection().getMaxIndex()", -1, list.getSelection().getMaxIndex());
assertEquals("list.getSelection().getMinIndex()", -1, list.getSelection().getMinIndex());
}
@Test
public void size() {
assertEquals("list.size()", size, list.size());
}
@Test
public void addAndRemoveSome() {
for (int i = size; i < size + 15; ++i) {
DummyPM elem = new DummyPM();
elem.id.setInteger(i);
list.add(elem);
}
assertEquals("list.size()", size + 15, list.size());
assertEquals("counter.elementsAdded", 15, counter.elementsAdded);
for (int i = size + 15 - 1; i >= size; --i) {
list.removeAt(i);
}
assertEquals("list.size()", size, list.size());
assertEquals("counter.elementsRemoved", 15, counter.elementsRemoved);
assertEquals("list.getSelection().getMaxIndex()", -1, list.getSelection().getMaxIndex());
assertEquals("list.getSelection().getMinIndex()", -1, list.getSelection().getMinIndex());
}
@Test
public void selectionAddAll() {
list.getSelection().addAll();
assertEquals("list.getSelection().size()", size, list.getSelection().size());
assertEquals("counter.elementsSelected", 1, counter.elementsSelected);
assertEquals("list.getSelection().getMaxIndex()", size - 1, list.getSelection().getMaxIndex());
assertEquals("list.getSelection().getMinIndex()", 0, list.getSelection().getMinIndex());
}
@Test
public void selectionClear() {
list.getSelection().addAll();
assertEquals("counter.elementsSelected", 1, counter.elementsSelected);
list.getSelection().clear();
assertEquals("counter.elementsDeselected", 1, counter.elementsDeselected);
assertEquals("list.getSelection().size()", 0, list.getSelection().size());
assertEquals("list.getSelection().getMaxIndex()", -1, list.getSelection().getMaxIndex());
assertEquals("list.getSelection().getMinIndex()", -1, list.getSelection().getMinIndex());
}
@Test
public void selectionAddInterval() {
list.getSelection().addInterval(5, 9);
assertEquals("list.getSelection().size()", 5, list.getSelection().size());
assertEquals("counter.elementsSelected", 1, counter.elementsSelected);
for (int i = 5; i <= 9; ++i) {
assertEquals("list.getSelection().contains(i)", true, list.getSelection().contains(i));
}
assertEquals("list.getSelection().getMaxIndex()", 9, list.getSelection().getMaxIndex());
assertEquals("list.getSelection().getMinIndex()", 5, list.getSelection().getMinIndex());
}
@Test
public void selectionContansIndex() {
list.getSelection().add(element);
assertEquals("list.getSelection().contains(elementIndex)", true, list.getSelection().contains(elementIndex));
}
@Test
public void selectionContansObject() {
list.getSelection().add(element);
assertEquals("list.getSelection().contains(element)", true, list.getSelection().contains(element));
}
@Test
public void selectionContansAll() {
list.getSelection().addAll();
assertEquals("list.getSelection().containsAll(list.getElements())", true, list.getSelection().containsAll(list.toCollection()));
Collection<DummyPM> col = new LinkedList<DummyPM>();
col.add(new DummyPM());
assertEquals("list.getSelection().containsAll(col)", false, list.getSelection().containsAll(col));
}
@Test
public void selectionGetIndexes() {
list.getSelection().addAll();
int[] indexes = list.getSelection().getIndexes();
assertEquals("indexes.length", size, indexes.length);
for (int i = 0; i < indexes.length; ++i) {
assertEquals("indexes[i='" + i + "']", i, indexes[i]);
}
}
@Test
public void selectionGetIndexes_v2() {
list.getSelection().addAll();
list.getSelection().removeInterval(elementIndex, elementIndex);
int[] indexes = list.getSelection().getIndexes();
assertEquals("indexes.length", size - 1, indexes.length);
for (int i = 0; i < elementIndex; ++i) {
assertEquals("indexes[i='" + i + "']", i, indexes[i]);
}
for (int i = elementIndex; i < indexes.length; ++i) {
assertEquals("indexes[i='" + i + "']", i + 1, indexes[i]);
}
}
@Test
public void selectionGetIndexes_v3() {
list.getSelection().addInterval(3, 7);
int[] indexes = list.getSelection().getIndexes();
assertEquals("indexes.length", 5, indexes.length);
assertEquals("indexes[0]", 3, indexes[0]);
assertEquals("indexes[1]", 4, indexes[1]);
assertEquals("indexes[2]", 5, indexes[2]);
assertEquals("indexes[3]", 6, indexes[3]);
assertEquals("indexes[4]", 7, indexes[4]);
indexes = list.getSelection().getIndexes(0, 9);
assertEquals("indexes.length", 5, indexes.length);
assertEquals("indexes[0]", 3, indexes[0]);
assertEquals("indexes[1]", 4, indexes[1]);
assertEquals("indexes[2]", 5, indexes[2]);
assertEquals("indexes[3]", 6, indexes[3]);
assertEquals("indexes[4]", 7, indexes[4]);
indexes = list.getSelection().getIndexes(3, 7);
assertEquals("indexes.length", 5, indexes.length);
assertEquals("indexes[0]", 3, indexes[0]);
assertEquals("indexes[1]", 4, indexes[1]);
assertEquals("indexes[2]", 5, indexes[2]);
assertEquals("indexes[3]", 6, indexes[3]);
assertEquals("indexes[4]", 7, indexes[4]);
indexes = list.getSelection().getIndexes(4, 6);
assertEquals("indexes.length", 3, indexes.length);
assertEquals("indexes[0]", 4, indexes[0]);
assertEquals("indexes[1]", 5, indexes[1]);
assertEquals("indexes[2]", 6, indexes[2]);
indexes = list.getSelection().getIndexes(0, 3);
assertEquals("indexes.length", 1, indexes.length);
assertEquals("indexes[0]", 3, indexes[0]);
indexes = list.getSelection().getIndexes(0, 2);
assertEquals("indexes.length", 0, indexes.length);
indexes = list.getSelection().getIndexes(8, 9);
assertEquals("indexes.length", 0, indexes.length);
}
@Test
public void selectionGetFirst() {
list.getSelection().add(element);
assertEquals("list.getSelection().getFirst()", element, list.getSelection().getFirst());
list.getSelection().addInterval(1, 1);
assertEquals("list.getSelection().getFirst()", list.getAt(1), list.getSelection().getFirst());
list.getSelection().addInterval(9, 9);
assertEquals("list.getSelection().getFirst()", list.getAt(1), list.getSelection().getFirst());
}
@Test
public void selectionGetMinIndex() {
list.getSelection().add(element);
assertEquals("list.getSelection().getMinIndex()", elementIndex, list.getSelection().getMinIndex());
list.getSelection().clear();
list.getSelection().addInterval(1, 1);
assertEquals("list.getSelection().getMinIndex()", 1, list.getSelection().getMinIndex());
list.getSelection().addInterval(9, 9);
assertEquals("list.getSelection().getMinIndex()", 1, list.getSelection().getMinIndex());
}
@Test
public void selectionGetMinIndexAndMaxIndex() {
list.getSelection().setInterval(2, 3);
assertEquals("list.getSelection().getMinIndex()", 2, list.getSelection().getMinIndex());
assertEquals("list.getSelection().getMaxIndex()", 3, list.getSelection().getMaxIndex());
list.getSelection().setInterval(5, 6);
assertEquals("list.getSelection().getMinIndex()", 5, list.getSelection().getMinIndex());
assertEquals("list.getSelection().getMaxIndex()", 6, list.getSelection().getMaxIndex());
list.getSelection().addInterval(2, 3);
assertEquals("list.getSelection().getMinIndex()", 2, list.getSelection().getMinIndex());
assertEquals("list.getSelection().getMaxIndex()", 6, list.getSelection().getMaxIndex());
list.getSelection().addInterval(9, 9);
assertEquals("list.getSelection().getMinIndex()", 2, list.getSelection().getMinIndex());
assertEquals("list.getSelection().getMaxIndex()", 9, list.getSelection().getMaxIndex());
list.getSelection().removeInterval(6, 9);
assertEquals("list.getSelection().getMinIndex()", 2, list.getSelection().getMinIndex());
assertEquals("list.getSelection().getMaxIndex()", 5, list.getSelection().getMaxIndex());
}
@Test
public void selectionGetMaxIndex() {
list.getSelection().add(element);
assertEquals("list.getSelection().getMaxIndex()", elementIndex, list.getSelection().getMaxIndex());
list.getSelection().clear();
list.getSelection().addInterval(1, 1);
assertEquals("list.getSelection().getMaxIndex()", 1, list.getSelection().getMaxIndex());
list.getSelection().addInterval(9, 9);
assertEquals("list.getSelection().getMaxIndex()", 9, list.getSelection().getMaxIndex());
}
@Test
public void selectionIsEmpty() {
assertEquals("list.getSelection().isEmpty()", true, list.getSelection().isEmpty());
list.getSelection().addInterval(1, 1);
assertEquals("list.getSelection().isEmpty()", false, list.getSelection().isEmpty());
}
@Test
public void selectionIterator() {
list.getSelection().addInterval(1, 1);
Iterator<DummyPM> it = list.getSelection().iterator();
DummyPM firstElem = it.next();
assertEquals("it.next()", list.getAt(1), firstElem);
}
@Test
public void selectionIterator2() {
list.getSelection().addInterval(1, 4);
for (int i = 1; i <= 4; ++i) {
assertEquals("list.getSelection().contains(i)", true, list.getSelection().contains(i));
}
Iterator<DummyPM> it = list.getSelection().iterator();
int i = 1;
while (it.hasNext()) {
assertEquals("list.getSelection().contains(i='" + i + "')", true, list.getSelection().contains(i));
assertEquals("i='" + i + "', it.next()", list.getAt(i), it.next());
i++;
}
}
@Test
public void selectionIteratorRemove() {
list.getSelection().addInterval(1, 4);
Iterator<DummyPM> it = list.getSelection().iterator();
int i = 1;
while (it.hasNext()) {
assertEquals("list.getSelection().contains(i)", true, list.getSelection().contains(i));
assertEquals("list.getSelection().getMaxIndex()", 4, list.getSelection().getMaxIndex());
assertEquals("list.getSelection().getMinIndex()", i, list.getSelection().getMinIndex());
assertEquals("i='" + i + "', it.next()", list.getAt(i), it.next());
it.remove();
assertEquals("list.getSelection().contains(i)", false, list.getSelection().contains(i));
i++;
}
assertEquals("list.getSelection().getMaxIndex()", -1, list.getSelection().getMaxIndex());
assertEquals("list.getSelection().getMinIndex()", -1, list.getSelection().getMinIndex());
}
@Test
public void selectionRemove() {
list.getSelection().addAll();
list.getSelection().remove(element);
assertEquals("list.getSelection().contains(elementIndex)", false, list.getSelection().contains(elementIndex));
assertEquals("list.getSelection().size()", size - 1, list.getSelection().size());
assertEquals("counter.elementsDeselected", 1, counter.elementsDeselected);
assertEquals("list.getSelection().getMaxIndex()", size - 1, list.getSelection().getMaxIndex());
assertEquals("list.getSelection().getMinIndex()", 0, list.getSelection().getMinIndex());
}
@Test
public void selectionRemoveAll() {
list.getSelection().addAll();
list.getSelection().removeAll(list.toCollection());
assertEquals("list.getSelection().size()", 0, list.getSelection().size());
assertEquals("counter.elementsDeselected", 1, counter.elementsDeselected);
assertEquals("list.getSelection().getMaxIndex()", -1, list.getSelection().getMaxIndex());
assertEquals("list.getSelection().getMinIndex()", -1, list.getSelection().getMinIndex());
list.getSelection().addAll();
list.getSelection().remove(list.getAt(5));
assertEquals("list.getSelection().getMaxIndex()", size - 1, list.getSelection().getMaxIndex());
assertEquals("list.getSelection().getMinIndex()", 0, list.getSelection().getMinIndex());
}
@Test
public void selectionRemoveAll2() {
list.getSelection().addAll();
list.getSelection().remove(list.getAt(5));
assertEquals("list.getSelection().size()", size - 1, list.getSelection().size());
assertEquals("counter.elementsDeselected", 1, counter.elementsDeselected);
assertEquals("list.getSelection().getMaxIndex()", size - 1, list.getSelection().getMaxIndex());
assertEquals("list.getSelection().getMinIndex()", 0, list.getSelection().getMinIndex());
list.getSelection().removeAll(list.toCollection());
assertEquals("list.getSelection().size()", 0, list.getSelection().size());
assertEquals("counter.elementsDeselected", 3, counter.elementsDeselected);
assertEquals("list.getSelection().getMaxIndex()", -1, list.getSelection().getMaxIndex());
assertEquals("list.getSelection().getMinIndex()", -1, list.getSelection().getMinIndex());
}
@Test
public void selectionRemoveAll3() {
list.getSelection().addAll();
int selSize = list.getSelection().size();
List<DummyPM> col = new ArrayList<DummyPM>();
col.add(new DummyPM());
col.add(new DummyPM());
col.add(new DummyPM());
list.getSelection().removeAll(col);
assertEquals("list.getSelection().size()", selSize, list.getSelection().size());
assertEquals("counter.elementsDeselected", 0, counter.elementsDeselected);
}
@Test
public void selectionRemoveInterval() {
list.getSelection().addAll();
list.getSelection().remove(list.getAt(5));
assertEquals("list.getSelection().size()", size - 1, list.getSelection().size());
assertEquals("counter.elementsDeselected", 1, counter.elementsDeselected);
assertEquals("list.getSelection().getMaxIndex()", size - 1, list.getSelection().getMaxIndex());
assertEquals("list.getSelection().getMinIndex()", 0, list.getSelection().getMinIndex());
list.getSelection().removeInterval(3, 6);
assertEquals("list.getSelection().size()", 6, list.getSelection().size());
assertEquals("counter.elementsDeselected", 3, counter.elementsDeselected);
assertEquals("list.getSelection().getMaxIndex()", size - 1, list.getSelection().getMaxIndex());
assertEquals("list.getSelection().getMinIndex()", 0, list.getSelection().getMinIndex());
}
@Test
public void selectionRetainAll() {
list.getSelection().addAll();
Collection<DummyPM> col = list.toCollection();
col.remove(list.getAt(elementIndex));
list.getSelection().retainAll(col);
assertEquals("list.getSelection().size()", 9, list.getSelection().size());
assertEquals("counter.elementsDeselected", 1, counter.elementsDeselected);
assertEquals("list.getSelection().contains(element)", false, list.getSelection().contains(element));
assertEquals("list.getSelection().getMaxIndex()", size - 1, list.getSelection().getMaxIndex());
assertEquals("list.getSelection().getMinIndex()", 0, list.getSelection().getMinIndex());
}
@Test
public void selectionRetainAll2() {
list.getSelection().addAll();
Collection<DummyPM> col = list.toCollection();
col.remove(list.getAt(2));
col.remove(list.getAt(6));
list.getSelection().retainAll(col);
assertEquals("list.getSelection().size()", 8, list.getSelection().size());
assertEquals("counter.elementsDeselected", 2, counter.elementsDeselected);
assertEquals("list.getSelection().getMaxIndex()", size - 1, list.getSelection().getMaxIndex());
assertEquals("list.getSelection().getMinIndex()", 0, list.getSelection().getMinIndex());
}
@Test
public void selectionSize() {
assertEquals("list.getSelection().size()", 0, list.getSelection().size());
}
@Test
public void selectionToArray() {
Object[] array = list.getSelection().toArray();
assertEquals("array.length", 0, array.length);
}
@Test
public void selectionToArray2() {
list.getSelection().addInterval(2, 4);
Object[] array = list.getSelection().toArray();
assertEquals("array.length", 3, array.length);
int arrayIndex = 0;
for (int i = 2; i <= 4; ++i) {
assertEquals("array[arrayIndex]", list.getAt(i), array[arrayIndex]);
arrayIndex++;
}
}
@Test
public void selectionToGenericArray() {
DummyPM[] array = list.getSelection().toArray(new DummyPM[0]);
assertEquals("array.length", 0, array.length);
}
@Test
public void selectionToGenericArray2() {
list.getSelection().addInterval(2, 4);
DummyPM[] array = list.getSelection().toArray(new DummyPM[0]);
assertEquals("array.length", 3, array.length);
int arrayIndex = 0;
for (int i = 2; i <= 4; ++i) {
assertEquals("array[arrayIndex]", list.getAt(i), array[arrayIndex]);
arrayIndex++;
}
}
@Test
public void selectionSetInterval() {
list.getSelection().setInterval(0, 9);
assertEquals("pM.getSelection().size()", 10, list.getSelection().size());
assertEquals("list.getSelection().getMaxIndex()", 9, list.getSelection().getMaxIndex());
assertEquals("list.getSelection().getMinIndex()", 0, list.getSelection().getMinIndex());
assertEquals("counter.elementsSelected", 1, counter.elementsSelected);
}
@Test
public void selectionSetInterval2() {
list.getSelection().addAll();
counter.reset();
list.getSelection().setInterval(3, 5);
assertEquals("pM.getSelection().size()", 3, list.getSelection().size());
assertEquals("list.getSelection().getMaxIndex()", 5, list.getSelection().getMaxIndex());
assertEquals("list.getSelection().getMinIndex()", 3, list.getSelection().getMinIndex());
assertEquals("counter.elementsDeselected", 2, counter.elementsDeselected);
}
@Test
public void selectionSetInterval3() {
list.getSelection().addInterval(0, 3);
list.getSelection().addInterval(6, 9);
assertEquals("pM.getSelection().size()", 8, list.getSelection().size());
assertEquals("list.getSelection().getMaxIndex()", 9, list.getSelection().getMaxIndex());
assertEquals("list.getSelection().getMinIndex()", 0, list.getSelection().getMinIndex());
counter.reset();
list.getSelection().setInterval(2, 7);
assertEquals("pM.getSelection().size()", 6, list.getSelection().size());
assertEquals("list.getSelection().getMaxIndex()", 7, list.getSelection().getMaxIndex());
assertEquals("list.getSelection().getMinIndex()", 2, list.getSelection().getMinIndex());
assertEquals("counter.elementsDeselected", 2, counter.elementsDeselected);
assertEquals("counter.elementsSelected", 1, counter.elementsSelected);
}
@Test
public void getMaxIndex1() {
list.getSelection().addInterval(5, 6);
assertEquals("list.getSelection().getMaxIndex()", 6, list.getSelection().getMaxIndex());
assertEquals("list.getSelection().getMinIndex()", 5, list.getSelection().getMinIndex());
list.swap(4, 5);
assertEquals("list.getSelection().getMaxIndex()", 6, list.getSelection().getMaxIndex());
assertEquals("list.getSelection().getMinIndex()", 4, list.getSelection().getMinIndex());
}
@Test
public void getMaxIndex2() {
list.getSelection().addInterval(5, 6);
assertEquals("list.getSelection().getMaxIndex()", 6, list.getSelection().getMaxIndex());
assertEquals("list.getSelection().getMinIndex()", 5, list.getSelection().getMinIndex());
list.swap(6, 7);
assertEquals("list.getSelection().getMaxIndex()", 7, list.getSelection().getMaxIndex());
assertEquals("list.getSelection().getMinIndex()", 5, list.getSelection().getMinIndex());
}
private static class EventCounter implements ListListener {
int elementChanged;
int elementReplaced;
int elementsAdded;
int elementsDeselected;
int elementsRemoved;
int elementsSelected;
public void elementChanged(ElementChangedEvent evt) {
elementChanged++;
}
public void elementsReplaced(ElementsReplacedEvent evt) {
elementReplaced++;
}
public void elementsAdded(ElementsAddedEvent evt) {
elementsAdded++;
}
public void elementsDeselected(ElementsDeselectedEvent evt) {
elementsDeselected++;
}
public void elementsRemoved(ElementsRemovedEvent evt) {
elementsRemoved++;
}
public void elementsSelected(ElementsSelectedEvent evt) {
elementsSelected++;
}
public void reset() {
elementChanged = 0;
elementReplaced = 0;
elementsAdded = 0;
elementsDeselected = 0;
elementsRemoved = 0;
elementsSelected = 0;
}
}
}