/* * 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.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.HashMap; import java.util.HashSet; 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.ListEvent; import org.beanfabrics.event.ListListener; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; /** * @author Michael Karneim */ public class MapPMTest { public static junit.framework.Test suite() { return new JUnit4TestAdapter(MapPMTest.class); } private static class DummyPM extends AbstractPM { IntegerPM id = new IntegerPM(); TextPM text = new TextPM(); public DummyPM() { String str = Character.toString((char)(Math.random() * 26 + (int)'A')); text.setText(str); PMManager.setup(this); } public DummyPM(String id) { this(); this.id.setText(id); } public String getId() { return "id=" + id.getText() + ""; } public void setText(String value) { this.text.setText(value); } public String getText() { return text.getText(); } } public MapPMTest() { } @BeforeClass public static void setUpClass() throws Exception { } @AfterClass public static void tearDownClass() throws Exception { } @Test public void create() { new MapPM<Integer, DummyPM>(); } @Test public void putMany() { MapPM<Integer, TextPM> map = new MapPM<Integer, TextPM>(); TextPM[] elems = new TextPM[10]; for (int i = 0; i < elems.length; ++i) { elems[i] = new TextPM(); map.put(i, elems[i]); } assertEquals("map.size()", elems.length, map.size()); for (int i = 0; i < elems.length; ++i) { assertEquals("map.get(i)", elems[i], map.get(i)); assertEquals("map.get((Integer)i)", elems[i], map.get(i)); } assertEquals("map.getSelection().getMaxIndex()", -1, map.getSelection().getMaxIndex()); assertEquals("map.getSelection().getMinIndex()", -1, map.getSelection().getMinIndex()); } @Test public void clear() { MapPM<Integer, DummyPM> map = new MapPM<Integer, DummyPM>(); final int NUM = 10; populate(map, NUM); EventCounter counter = new EventCounter(); map.addListListener(counter); map.clear(); assertEquals("map.size()", 0, map.size()); assertEquals("counter.elementsRemoved", 1, counter.elementsRemoved); assertEquals("map.getSelection().getMaxIndex()", -1, map.getSelection().getMaxIndex()); assertEquals("map.getSelection().getMinIndex()", -1, map.getSelection().getMinIndex()); } @Test public void clearWithSelection() { MapPM<Integer, DummyPM> map = new MapPM<Integer, DummyPM>(); final int NUM = 10; populate(map, NUM); map.getSelectedKeys().addAll(map.keySet()); assertEquals("map.getSelection().size()", NUM, map.getSelectedKeys().size()); assertEquals("map.getSelection().getMaxIndex()", NUM - 1, map.getSelection().getMaxIndex()); assertEquals("map.getSelection().getMinIndex()", 0, map.getSelection().getMinIndex()); EventCounter counter = new EventCounter(); map.addListListener(counter); map.clear(); assertEquals("map.size()", 0, map.size()); assertEquals("counter.elementsRemoved", 1, counter.elementsRemoved); assertEquals("counter.elementsDeselected", 1, counter.elementsDeselected); assertEquals("map.getSelection().getMaxIndex()", -1, map.getSelection().getMaxIndex()); assertEquals("map.getSelection().getMinIndex()", -1, map.getSelection().getMinIndex()); } @Test public void clearWithSelectionIntervals() { MapPM<Integer, DummyPM> map = new MapPM<Integer, DummyPM>(); final int NUM = 10; populate(map, NUM); map.getSelectedKeys().addAll(map.keySet()); map.getSelectedKeys().remove(4); // selected keys are now: 0,1,2,3, ,5,6,7,8,9 assertEquals("map.getSelection().size()", NUM - 1, map.getSelectedKeys().size()); assertEquals("map.getSelection().getMaxIndex()", NUM - 1, map.getSelection().getMaxIndex()); assertEquals("map.getSelection().getMinIndex()", 0, map.getSelection().getMinIndex()); EventCounter counter = new EventCounter(); map.addListListener(counter); map.clear(); assertEquals("map.size()", 0, map.size()); assertEquals("counter.elementsRemoved", 1, counter.elementsRemoved); assertEquals("counter.elementsDeselected", 2, counter.elementsDeselected); assertEquals("map.getSelection().getMaxIndex()", -1, map.getSelection().getMaxIndex()); assertEquals("map.getSelection().getMinIndex()", -1, map.getSelection().getMinIndex()); } @Test public void selectedKeysAdd() { MapPM<Integer, DummyPM> map = new MapPM<Integer, DummyPM>(); final int NUM = 10; populate(map, NUM); EventCounter counter = new EventCounter(); map.addListListener(counter); map.getSelectedKeys().add(5); // Element with key 5 is selected now assertEquals("map.getSelection().size()", 1, map.getSelectedKeys().size()); assertTrue("map.getSelection().contains(5)", map.getSelectedKeys().contains(5)); assertEquals("counter.elementsSelected", 1, counter.elementsSelected); assertEquals("map.getSelection().getMaxIndex()", 5, map.getSelection().getMaxIndex()); assertEquals("map.getSelection().getMinIndex()", 5, map.getSelection().getMinIndex()); } @Test public void selectedKeysAddAll() { MapPM<Integer, DummyPM> map = new MapPM<Integer, DummyPM>(); final int NUM = 10; populate(map, NUM); EventCounter counter = new EventCounter(); map.addListListener(counter); map.getSelectedKeys().addAll(map.keySet()); assertEquals("map.getSelection().size()", NUM, map.getSelectedKeys().size()); // we expect only single event since all indices build a single interval assertEquals("counter.elementsSelected", 1, counter.elementsSelected); assertEquals("map.getSelection().getMaxIndex()", NUM - 1, map.getSelection().getMaxIndex()); assertEquals("map.getSelection().getMinIndex()", 0, map.getSelection().getMinIndex()); } @Test public void selectedKeysSetAll_1() { MapPM<Integer, DummyPM> map = new MapPM<Integer, DummyPM>(); final int NUM = 10; populate(map, NUM); EventCounter counter = new EventCounter(); map.addListListener(counter); map.getSelectedKeys().setAll(1, 2, 3); assertEquals("map.getSelection().size()", 3, map.getSelectedKeys().size()); // we expect only single event since all indices build a single interval assertEquals("counter.elementsSelected", 1, counter.elementsSelected); assertEquals("map.getSelection().getMaxIndex()", 3, map.getSelection().getMaxIndex()); assertEquals("map.getSelection().getMinIndex()", 1, map.getSelection().getMinIndex()); } @Test public void selectedKeysSetAll_2() { MapPM<Integer, DummyPM> map = new MapPM<Integer, DummyPM>(); final int NUM = 10; populate(map, NUM); EventCounter counter = new EventCounter(); map.addListListener(counter); map.getSelectedKeys().setAll(1, 2, 3, 7, 8, 9); assertEquals("map.getSelection().size()", 6, map.getSelectedKeys().size()); // we expect 2 events since the indices build two distinct interval assertEquals("counter.elementsSelected", 2, counter.elementsSelected); assertEquals("map.getSelection().getMaxIndex()", 9, map.getSelection().getMaxIndex()); assertEquals("map.getSelection().getMinIndex()", 1, map.getSelection().getMinIndex()); } @Test public void selectedKeysSetAll_3() { MapPM<Integer, DummyPM> map = new MapPM<Integer, DummyPM>(); final int NUM = 10; populate(map, NUM); map.getSelectedKeys().setAll(1, 2, 3); EventCounter counter = new EventCounter(); map.addListListener(counter); map.getSelectedKeys().setAll(3, 4, 5); assertEquals("map.getSelection().size()", 3, map.getSelectedKeys().size()); // we expect only single event since the indices build a single interval assertEquals("counter.elementsSelected", 1, counter.elementsSelected); // we expect only one single deselected event since the indices 1,2 build a single interval assertEquals("counter.elementsDeselected", 1, counter.elementsDeselected); assertEquals("map.getSelection().getMaxIndex()", 5, map.getSelection().getMaxIndex()); assertEquals("map.getSelection().getMinIndex()", 3, map.getSelection().getMinIndex()); } @Test public void selectedKeysSetAll_4() { MapPM<Integer, DummyPM> map = new MapPM<Integer, DummyPM>(); final int NUM = 10; populate(map, NUM); map.getSelectedKeys().setAll(1, 2, 3); EventCounter counter = new EventCounter(); map.addListListener(counter); map.getSelectedKeys().setAll(3, 7, 8); assertEquals("map.getSelection().size()", 3, map.getSelectedKeys().size()); // we expect only one single selected event since the indices 7,8 build a single interval assertEquals("counter.elementsSelected", 1, counter.elementsSelected); // we expect only one single deselected event since the indices 1,2 build a single interval assertEquals("counter.elementsDeselected", 1, counter.elementsDeselected); assertEquals("map.getSelection().getMaxIndex()", 8, map.getSelection().getMaxIndex()); assertEquals("map.getSelection().getMinIndex()", 3, map.getSelection().getMinIndex()); } @Test public void selectedKeysRemove() { MapPM<Integer, DummyPM> map = new MapPM<Integer, DummyPM>(); final int NUM = 10; populate(map, NUM); map.getSelectedKeys().add(5); // element with key 5 is selected now assertEquals("map.getSelection().getMaxIndex()", 5, map.getSelection().getMaxIndex()); assertEquals("map.getSelection().getMinIndex()", 5, map.getSelection().getMinIndex()); EventCounter counter = new EventCounter(); map.addListListener(counter); map.getSelectedKeys().remove(5); // deselect element with key == 5 assertEquals("map.getSelection().size()", 0, map.getSelectedKeys().size()); assertEquals("counter.elementsDeselected", 1, counter.elementsDeselected); assertEquals("map.getSelection().getMaxIndex()", -1, map.getSelection().getMaxIndex()); assertEquals("map.getSelection().getMinIndex()", -1, map.getSelection().getMinIndex()); } @Test public void selectedKeysRemoveAll() { MapPM<Integer, DummyPM> map = new MapPM<Integer, DummyPM>(); final int NUM = 10; populate(map, NUM); map.getSelectedKeys().add(1); map.getSelectedKeys().add(5); map.getSelectedKeys().add(6); map.getSelectedKeys().add(7); map.getSelectedKeys().add(8); map.getSelectedKeys().add(9); // result selection: 1,5,6,7,8,9 assertEquals("map.getSelection().getMaxIndex()", 9, map.getSelection().getMaxIndex()); assertEquals("map.getSelection().getMinIndex()", 1, map.getSelection().getMinIndex()); EventCounter counter = new EventCounter(); map.addListListener(counter); List<Integer> removeKeys = Arrays.asList(5, 6, 7, 9); map.getSelectedKeys().removeAll(removeKeys); // result selection: 1,8 assertEquals("map.getSelection().size()", 2, map.getSelectedKeys().size()); // we expect 2 events since the indices build two separate intervals assertEquals("counter.elementsDeselected", 2, counter.elementsDeselected); assertEquals("map.getSelection().getMaxIndex()", 8, map.getSelection().getMaxIndex()); assertEquals("map.getSelection().getMinIndex()", 1, map.getSelection().getMinIndex()); } @Test public void selectedKeysRetainAll() { MapPM<Integer, DummyPM> map = new MapPM<Integer, DummyPM>(); final int NUM = 10; populate(map, NUM); map.getSelectedKeys().add(1); map.getSelectedKeys().add(5); map.getSelectedKeys().add(6); map.getSelectedKeys().add(7); map.getSelectedKeys().add(8); map.getSelectedKeys().add(9); // result selection: 1,5,6,7,8,9 assertEquals("map.getSelection().getMaxIndex()", 9, map.getSelection().getMaxIndex()); assertEquals("map.getSelection().getMinIndex()", 1, map.getSelection().getMinIndex()); EventCounter counter = new EventCounter(); map.addListListener(counter); List<Integer> retainKeys = Arrays.asList(5, 6, 7, 9); map.getSelectedKeys().retainAll(retainKeys); // result selection: 5,6,7,9 // removed: 1,8 assertEquals("map.getSelection().size()", 4, map.getSelectedKeys().size()); // we expect 2 events since the indices build two separate intervals assertEquals("counter.elementsDeselected", 2, counter.elementsDeselected); assertEquals("map.getSelection().getMaxIndex()", 9, map.getSelection().getMaxIndex()); assertEquals("map.getSelection().getMinIndex()", 5, map.getSelection().getMinIndex()); } @Test public void putSingle() { MapPM<Integer, DummyPM> map = new MapPM<Integer, DummyPM>(); final int NUM = 10; populate(map, NUM); EventCounter counter = new EventCounter(); map.addListListener(counter); DummyPM newElem = new DummyPM(); map.put(10, newElem); // the key 10 doesn't exist assertEquals("map.size()", NUM + 1, map.size()); assertEquals("counter.elementsAdded", 1, counter.elementsAdded); assertEquals("map.getSelection().getMaxIndex()", -1, map.getSelection().getMaxIndex()); assertEquals("map.getSelection().getMinIndex()", -1, map.getSelection().getMinIndex()); } @Test public void putWithIndex() { MapPM<Integer, DummyPM> map = new MapPM<Integer, DummyPM>(); final int NUM = 10; populate(map, NUM); EventCounter counter = new EventCounter(); map.addListListener(counter); DummyPM newElem = new DummyPM(); map.put(10, newElem, 0); assertEquals("map.size()", NUM + 1, map.size()); assertEquals("counter.elementsRemoved", 0, counter.elementsRemoved); assertEquals("counter.elementsReplaced", 0, counter.elementsReplaced); assertEquals("counter.elementsAdded", 1, counter.elementsAdded); assertEquals("map.getAt(0)", newElem, map.getAt(0)); assertEquals("map.getSelection().getMaxIndex()", -1, map.getSelection().getMaxIndex()); assertEquals("map.getSelection().getMinIndex()", -1, map.getSelection().getMinIndex()); } @Test public void putWithIndex2() { MapPM<Integer, DummyPM> map = new MapPM<Integer, DummyPM>(); final int NUM = 10; populate(map, NUM); EventCounter counter = new EventCounter(); map.addListListener(counter); DummyPM newElem = new DummyPM(); map.put(10, newElem, 10); assertEquals("map.size()", NUM + 1, map.size()); assertEquals("counter.elementsRemoved", 0, counter.elementsRemoved); assertEquals("counter.elementsReplaced", 0, counter.elementsReplaced); assertEquals("counter.elementsAdded", 1, counter.elementsAdded); assertEquals("map.getAt(10)", newElem, map.getAt(10)); assertEquals("map.getSelection().getMaxIndex()", -1, map.getSelection().getMaxIndex()); assertEquals("map.getSelection().getMinIndex()", -1, map.getSelection().getMinIndex()); } @Test public void replaceWithIndex() { MapPM<Integer, DummyPM> map = new MapPM<Integer, DummyPM>(); final int NUM = 10; populate(map, NUM); EventCounter counter = new EventCounter(); map.addListListener(counter); DummyPM newElem = new DummyPM(); map.put(5, newElem, 0); assertEquals("map.size()", NUM, map.size()); assertEquals("counter.elementsRemoved", 1, counter.elementsRemoved); assertEquals("counter.elementsReplaced", 0, counter.elementsReplaced); assertEquals("counter.elementsAdded", 1, counter.elementsAdded); assertEquals("map.getAt(0)", newElem, map.getAt(0)); assertEquals("map.getSelection().getMaxIndex()", -1, map.getSelection().getMaxIndex()); assertEquals("map.getSelection().getMinIndex()", -1, map.getSelection().getMinIndex()); } @Test public void replaceWithIndex2() { MapPM<Integer, DummyPM> map = new MapPM<Integer, DummyPM>(); final int NUM = 10; populate(map, NUM); EventCounter counter = new EventCounter(); map.addListListener(counter); DummyPM newElem = new DummyPM(); map.put(5, newElem, 9); assertEquals("map.size()", NUM, map.size()); assertEquals("counter.elementsRemoved", 1, counter.elementsRemoved); assertEquals("counter.elementsReplaced", 0, counter.elementsReplaced); assertEquals("counter.elementsAdded", 1, counter.elementsAdded); assertEquals("map.getAt(9)", newElem, map.getAt(9)); assertEquals("map.getSelection().getMaxIndex()", -1, map.getSelection().getMaxIndex()); assertEquals("map.getSelection().getMinIndex()", -1, map.getSelection().getMinIndex()); } @Test public void replaceWithIndex3() { MapPM<Integer, DummyPM> map = new MapPM<Integer, DummyPM>(); final int NUM = 10; populate(map, NUM); EventCounter counter = new EventCounter(); map.addListListener(counter); DummyPM newElem = new DummyPM(); map.put(5, newElem, 5); // same index assertEquals("map.size()", NUM, map.size()); assertEquals("counter.elementsRemoved", 0, counter.elementsRemoved); assertEquals("counter.elementsReplaced", 1, counter.elementsReplaced); assertEquals("counter.elementsAdded", 0, counter.elementsAdded); assertEquals("map.getAt(5)", newElem, map.getAt(5)); assertEquals("map.getSelection().getMaxIndex()", -1, map.getSelection().getMaxIndex()); assertEquals("map.getSelection().getMinIndex()", -1, map.getSelection().getMinIndex()); } @Test public void swapNeighbors() { MapPM<Integer, DummyPM> map = new MapPM<Integer, DummyPM>(); final int NUM = 10; populate(map, NUM); EventCounter counter = new EventCounter(); map.addListListener(counter); map.swap(0, 1); assertEquals("map.size()", NUM, map.size()); assertEquals("map.getAt(1)", map.get(0), map.getAt(1)); assertEquals("map.getAt(0)", map.get(1), map.getAt(0)); assertEquals("counter.elementsRemoved", 2, counter.elementsRemoved); assertEquals("counter.elementsReplaced", 0, counter.elementsReplaced); assertEquals("counter.elementsAdded", 2, counter.elementsAdded); assertEquals("map.getSelection().getMaxIndex()", -1, map.getSelection().getMaxIndex()); assertEquals("map.getSelection().getMinIndex()", -1, map.getSelection().getMinIndex()); } @Test public void swapNeighbors2() { MapPM<Integer, DummyPM> map = new MapPM<Integer, DummyPM>(); final int NUM = 10; populate(map, NUM); EventCounter counter = new EventCounter(); map.addListListener(counter); map.swap(5, 6); assertEquals("map.size()", NUM, map.size()); assertEquals("map.getAt(5)", map.get(6), map.getAt(5)); assertEquals("map.getAt(6)", map.get(5), map.getAt(6)); assertEquals("counter.elementsRemoved", 2, counter.elementsRemoved); assertEquals("counter.elementsReplaced", 0, counter.elementsReplaced); assertEquals("counter.elementsAdded", 2, counter.elementsAdded); assertEquals("map.getSelection().getMaxIndex()", -1, map.getSelection().getMaxIndex()); assertEquals("map.getSelection().getMinIndex()", -1, map.getSelection().getMinIndex()); } @Test public void swap1() { MapPM<Integer, DummyPM> map = new MapPM<Integer, DummyPM>(); final int NUM = 10; populate(map, NUM); EventCounter counter = new EventCounter(); map.addListListener(counter); map.swap(4, 7); assertEquals("map.size()", NUM, map.size()); assertEquals("map.getAt(7)", map.get(4), map.getAt(7)); assertEquals("map.getAt(4)", map.get(7), map.getAt(4)); assertEquals("counter.elementsRemoved", 2, counter.elementsRemoved); assertEquals("counter.elementsReplaced", 0, counter.elementsReplaced); assertEquals("counter.elementsAdded", 2, counter.elementsAdded); assertEquals("map.getSelection().getMaxIndex()", -1, map.getSelection().getMaxIndex()); assertEquals("map.getSelection().getMinIndex()", -1, map.getSelection().getMinIndex()); } @Test public void replaceSingle() { MapPM<Integer, DummyPM> map = new MapPM<Integer, DummyPM>(); final int NUM = 10; populate(map, NUM); EventCounter counter = new EventCounter(); map.addListListener(counter); DummyPM newElem = new DummyPM(); map.put(5, newElem); // the key 5 already exists assertEquals("map.size()", NUM, map.size()); assertEquals("counter.elementReplaced", 1, counter.elementsReplaced); assertEquals("map.getSelection().getMaxIndex()", -1, map.getSelection().getMaxIndex()); assertEquals("map.getSelection().getMinIndex()", -1, map.getSelection().getMinIndex()); } @Test public void removeByIndex() { MapPM<Integer, DummyPM> map = new MapPM<Integer, DummyPM>(); final int NUM = 10; populate(map, NUM); EventCounter counter = new EventCounter(); map.addListListener(counter); // remove the first element map.removeAt(0); assertEquals("map.size()", NUM - 1, map.size()); assertEquals("counter.elementsRemoved", 1, counter.elementsRemoved); assertEquals("map.getSelection().getMaxIndex()", -1, map.getSelection().getMaxIndex()); assertEquals("map.getSelection().getMinIndex()", -1, map.getSelection().getMinIndex()); } @Test public void removeKey() { MapPM<Integer, DummyPM> map = new MapPM<Integer, DummyPM>(); final int NUM = 10; populate(map, NUM); EventCounter counter = new EventCounter(); map.addListListener(counter); // remove the element with key == 5 map.removeKey(5); assertEquals("map.size()", NUM - 1, map.size()); assertEquals("counter.elementsRemoved", 1, counter.elementsRemoved); assertEquals("map.getSelection().getMaxIndex()", -1, map.getSelection().getMaxIndex()); assertEquals("map.getSelection().getMinIndex()", -1, map.getSelection().getMinIndex()); } @Test public void removeKey_CheckSelection() { MapPM<Integer, DummyPM> map = new MapPM<Integer, DummyPM>(); final int NUM = 10; populate(map, NUM); map.getSelectedKeys().add(5); EventCounter counter = new EventCounter(); map.addListListener(counter); // remove the element with key == 5 map.removeKey(5); assertEquals("map.size()", NUM - 1, map.size()); assertEquals("map.getSelection().size()", 0, map.getSelectedKeys().size()); assertEquals("counter.elementsRemoved", 1, counter.elementsRemoved); assertEquals("counter.elementsRemoved", 1, counter.elementsDeselected); assertEquals("map.getSelection().getMaxIndex()", -1, map.getSelection().getMaxIndex()); assertEquals("map.getSelection().getMinIndex()", -1, map.getSelection().getMinIndex()); } @Test public void remove() { MapPM<Integer, DummyPM> map = new MapPM<Integer, DummyPM>(); final int NUM = 10; populate(map, NUM); EventCounter counter = new EventCounter(); map.addListListener(counter); // get the element with index == 5 DummyPM elem5 = map.getAt(5); // remove it boolean result = map.remove(elem5); assertTrue("result", result); assertEquals("map.size()", NUM - 1, map.size()); assertEquals("counter.elementsRemoved", 1, counter.elementsRemoved); assertEquals("map.getSelection().getMaxIndex()", -1, map.getSelection().getMaxIndex()); assertEquals("map.getSelection().getMinIndex()", -1, map.getSelection().getMinIndex()); } @Test public void remove2() { MapPM<Integer, DummyPM> map = new MapPM<Integer, DummyPM>(); final int NUM = 10; populate(map, NUM); EventCounter counter = new EventCounter(); map.addListListener(counter); // create a dummy pM that is not element of the map DummyPM dummy = new DummyPM(); // try to remove it boolean result = map.remove(dummy); assertFalse("result", result); assertEquals("map.size()", NUM, map.size()); assertEquals("counter.elementsRemoved", 0, counter.elementsRemoved); assertEquals("map.getSelection().getMaxIndex()", -1, map.getSelection().getMaxIndex()); assertEquals("map.getSelection().getMinIndex()", -1, map.getSelection().getMinIndex()); } @Test public void getFirst() { MapPM<String, DummyPM> map = new MapPM<String, DummyPM>(); List<DummyPM> list = new ArrayList<DummyPM>(); for (int i = 0; i < 10; ++i) { String key = "" + i; DummyPM model = new DummyPM(key); list.add(model); map.put(key, model); } assertEquals("map.size()", 10, map.size()); assertEquals("map.getSelection().size()", 0, map.getSelection().size()); for (int i = 0; i < 10; ++i) { String key = "" + i; map.getSelectedKeys().add(key); assertEquals("map.getSelection().size()", i + 1, map.getSelection().size()); assertEquals("map.getSelection().getFirst()", list.get(0), map.getSelection().getFirst()); assertEquals("map.getSelection().getMinIndex()", 0, map.getSelection().getMinIndex()); assertEquals("map.getSelection().getMaxIndex()", i, map.getSelection().getMaxIndex()); } } @Test public void getFirst2() { MapPM<String, DummyPM> map = new MapPM<String, DummyPM>(); map.put("3", new DummyPM("3")); map.put("2", new DummyPM("2")); map.put("1", new DummyPM("1")); DummyPM elem1 = map.get("1"); DummyPM elem2 = map.get("2"); DummyPM elem3 = map.get("3"); map.getSelectedKeys().add("2"); assertEquals("map.getSelection().getFirst()", elem2, map.getSelection().getFirst()); assertEquals("map.getSelection().getMaxIndex()", 1, map.getSelection().getMaxIndex()); assertEquals("map.getSelection().getMinIndex()", 1, map.getSelection().getMinIndex()); map.getSelectedKeys().add("1"); assertEquals("map.getSelection().getFirst()", elem2, map.getSelection().getFirst()); assertEquals("map.getSelection().getMaxIndex()", 2, map.getSelection().getMaxIndex()); assertEquals("map.getSelection().getMinIndex()", 1, map.getSelection().getMinIndex()); map.getSelectedKeys().add("3"); assertEquals("map.getSelection().getFirst()", elem3, map.getSelection().getFirst()); assertEquals("map.getSelection().getMaxIndex()", 2, map.getSelection().getMaxIndex()); assertEquals("map.getSelection().getMinIndex()", 0, map.getSelection().getMinIndex()); } @Test public void iterator() { MapPM<Integer, DummyPM> map = new MapPM<Integer, DummyPM>(); final int NUM = 10; populate(map, NUM); Iterator<DummyPM> it = map.iterator(); for (int i = 0; i < NUM; ++i) { assertTrue("it.hasNext()", it.hasNext()); assertEquals("it.next()", map.getAt(i), it.next()); } assertFalse("it.hasNext()", it.hasNext()); try { it.next(); fail("expected IndexOutOfBoundsException"); } catch (IndexOutOfBoundsException ex) { // ok. } } @Test public void keyiterator() { MapPM<Integer, DummyPM> map = new MapPM<Integer, DummyPM>(); final int NUM = 10; populate(map, NUM); Iterator<Integer> it = map.keyiterator(); for (int i = 0; i < NUM; ++i) { assertTrue("it.hasNext()", it.hasNext()); assertEquals("it.next()", map.getKey(i), it.next()); } assertFalse("it.hasNext()", it.hasNext()); try { it.next(); fail("expected IndexOutOfBoundsException"); } catch (IndexOutOfBoundsException ex) { // ok. } } @Test public void listIterator() { MapPM<Integer, DummyPM> map = new MapPM<Integer, DummyPM>(); final int NUM = 10; populate(map, NUM); ListIterator<DummyPM> iter = map.listIterator(0); assertNotNull("iter", iter); for (int i = 0; i < map.size(); ++i) { assertTrue("iter.hasNext()", iter.hasNext()); DummyPM model = iter.next(); assertEquals("map", map.getAt(i), model); } assertFalse("iter.hasNext()", iter.hasNext()); } @Test public void listIteratorV2() { int startIndex = 5; MapPM<Integer, DummyPM> map = new MapPM<Integer, DummyPM>(); final int NUM = 10; populate(map, NUM); ListIterator<DummyPM> iter = map.listIterator(startIndex); assertNotNull("iter", iter); for (int i = startIndex; i < map.size(); ++i) { assertTrue("iter.hasNext()", iter.hasNext()); DummyPM model = iter.next(); assertEquals("map", map.getAt(i), model); } assertFalse("iter.hasNext()", iter.hasNext()); } @Test public void listIteratorReverse() { int startIndex = 5; MapPM<Integer, DummyPM> map = new MapPM<Integer, DummyPM>(); final int NUM = 10; populate(map, NUM); ListIterator<DummyPM> iter = map.listIterator(startIndex); assertNotNull("iter", iter); for (int i = startIndex - 1; i >= 0; --i) { assertTrue("iter.hasPrevious()", iter.hasPrevious()); DummyPM model = iter.previous(); assertEquals("map", map.getAt(i), model); } assertFalse("iter.hasPrevious()", iter.hasPrevious()); } @Test public void removeAllKeys() { MapPM<Integer, DummyPM> map = new MapPM<Integer, DummyPM>(); final int NUM = 10; populate(map, NUM); HashSet<Integer> keySetToRemove = new HashSet<Integer>(); keySetToRemove.add(3); keySetToRemove.add(4); keySetToRemove.add(5); keySetToRemove.add(8); EventCounter counter = new EventCounter(); map.addListListener(counter); map.removeAllKeys(keySetToRemove); assertEquals("map.size()", NUM - keySetToRemove.size(), map.size()); assertEquals("map.getSelection().size()", 0, map.getSelectedKeys().size()); assertEquals("counter.elementsRemoved", 2, counter.elementsRemoved); assertEquals("counter.elementsDeselected", 0, counter.elementsDeselected); assertEquals("map.getSelection().getMaxIndex()", -1, map.getSelection().getMaxIndex()); assertEquals("map.getSelection().getMinIndex()", -1, map.getSelection().getMinIndex()); } @Test public void removeAllKeysWithSelection() { MapPM<Integer, DummyPM> map = new MapPM<Integer, DummyPM>(); final int NUM = 10; populate(map, NUM); map.getSelection().addAll(); HashSet<Integer> keySetToRemove = new HashSet<Integer>(); keySetToRemove.add(3); keySetToRemove.add(4); keySetToRemove.add(5); keySetToRemove.add(8); assertEquals("map.getSelection().getMaxIndex()", NUM - 1, map.getSelection().getMaxIndex()); assertEquals("map.getSelection().getMinIndex()", 0, map.getSelection().getMinIndex()); EventCounter counter = new EventCounter(); map.addListListener(counter); map.removeAllKeys(keySetToRemove); assertEquals("map.size()", NUM - keySetToRemove.size(), map.size()); assertEquals("map.getSelection().size()", NUM - keySetToRemove.size(), map.getSelectedKeys().size()); assertEquals("counter.elementsRemoved", 2, counter.elementsRemoved); assertEquals("counter.elementsDeselected", 2, counter.elementsDeselected); assertEquals("map.getSelection().getMaxIndex()", NUM - 1 - 4, map.getSelection().getMaxIndex()); assertEquals("map.getSelection().getMinIndex()", 0, map.getSelection().getMinIndex()); for (int i = 0; i < map.size(); ++i) { assertTrue("map.getSelection().contains(i)", map.getSelection().contains(i)); } List<ElementsDeselectedEvent> deselectionEvents = new LinkedList<ElementsDeselectedEvent>(); for (ListEvent evt : counter.events) { if (evt instanceof ElementsDeselectedEvent) { deselectionEvents.add((ElementsDeselectedEvent)evt); } } assertEquals("deselectionEvents.size()", 2, deselectionEvents.size()); // Note: deselection events are reverse ordered // since elements are removed from back to front assertEquals("deselectionEvents.get(1).getBeginIndex()", 8, deselectionEvents.get(0).getBeginIndex()); assertEquals("deselectionEvents.get(1).getBeginIndex()", 1, deselectionEvents.get(0).getLength()); assertEquals("deselectionEvents.get(0).getBeginIndex()", 3, deselectionEvents.get(1).getBeginIndex()); assertEquals("deselectionEvents.get(0).getBeginIndex()", 3, deselectionEvents.get(1).getLength()); } @Test public void removeAllIndices() { MapPM<Integer, DummyPM> map = new MapPM<Integer, DummyPM>(); final int NUM = 10; populate(map, NUM); int[] indexes = { 2, 3, 4, 7, 8, 9 }; EventCounter counter = new EventCounter(); map.addListListener(counter); map.removeAllIndices(indexes); assertEquals("map.size()", NUM - indexes.length, map.size()); assertEquals("map.getSelection().size()", 0, map.getSelectedKeys().size()); assertEquals("counter.elementsRemoved", 2, counter.elementsRemoved); assertEquals("counter.elementsDeselected", 0, counter.elementsDeselected); assertEquals("map.getSelection().getMaxIndex()", -1, map.getSelection().getMaxIndex()); assertEquals("map.getSelection().getMinIndex()", -1, map.getSelection().getMinIndex()); } @Test public void removeAllIndicesShuffled() { MapPM<Integer, DummyPM> map = new MapPM<Integer, DummyPM>(); final int NUM = 10; populate(map, NUM); int[] indexes = { 4, 7, 2, 8, 3, 9 }; EventCounter counter = new EventCounter(); map.addListListener(counter); map.removeAllIndices(indexes); assertEquals("map.size()", NUM - indexes.length, map.size()); assertEquals("map.getSelection().size()", 0, map.getSelectedKeys().size()); assertEquals("counter.elementsRemoved", 2, counter.elementsRemoved); assertEquals("counter.elementsDeselected", 0, counter.elementsDeselected); assertEquals("map.getSelection().getMaxIndex()", -1, map.getSelection().getMaxIndex()); assertEquals("map.getSelection().getMinIndex()", -1, map.getSelection().getMinIndex()); } @Test public void removeAllIndicesShuffledSelected() { MapPM<Integer, DummyPM> map = new MapPM<Integer, DummyPM>(); final int NUM = 10; populate(map, NUM); int[] indexes = { 4, 7, 2, 8, 3, 9 }; map.getSelection().addAll(); assertEquals("map.getSelection().getMaxIndex()", NUM - 1, map.getSelection().getMaxIndex()); assertEquals("map.getSelection().getMinIndex()", 0, map.getSelection().getMinIndex()); EventCounter counter = new EventCounter(); map.addListListener(counter); map.removeAllIndices(indexes); assertEquals("map.size()", NUM - indexes.length, map.size()); assertEquals("map.getSelection().size()", NUM - indexes.length, map.getSelectedKeys().size()); assertEquals("counter.elementsRemoved", 2, counter.elementsRemoved); assertEquals("counter.elementsDeselected", 2, counter.elementsDeselected); assertEquals("map.getSelection().getMaxIndex()", NUM - 1 - 6, map.getSelection().getMaxIndex()); assertEquals("map.getSelection().getMinIndex()", 0, map.getSelection().getMinIndex()); for (int i = 0; i < map.size(); ++i) { assertTrue("map.getSelection().contains(i)", map.getSelection().contains(i)); } } @Test public void putAll() { MapPM<Integer, DummyPM> map = new MapPM<Integer, DummyPM>(); final int NUM = 10; populate(map, NUM); int MORE = 10; HashMap<Integer, DummyPM> hashmap = new HashMap<Integer, DummyPM>(); for (int i = NUM; i < NUM + MORE; ++i) { hashmap.put(i, new DummyPM()); } EventCounter counter = new EventCounter(); map.addListListener(counter); map.putAll(hashmap); assertEquals("map.size()", NUM + MORE, map.size()); assertEquals("map.getSelection().size()", 0, map.getSelectedKeys().size()); assertEquals("map.getSelection().getMaxIndex()", -1, map.getSelection().getMaxIndex()); assertEquals("map.getSelection().getMinIndex()", -1, map.getSelection().getMinIndex()); assertEquals("counter.elementsAdded", 1, counter.elementsAdded); assertEquals("counter.elementsRemoved", 0, counter.elementsRemoved); assertEquals("counter.elementReplaced", 0, counter.elementsReplaced); assertEquals("counter.elementsDeselected", 0, counter.elementsDeselected); assertEquals("counter.elementsSelected", 0, counter.elementsSelected); for (int i = 0; i < NUM; ++i) { assertFalse("map.containsValue(pM.getAt(i))", hashmap.containsValue(map.getAt(i))); } for (int i = NUM; i < NUM + MORE; ++i) { assertTrue("map.containsValue(pM.getAt(i))", hashmap.containsValue(map.getAt(i))); } } @Test public void putAllOneReplacement() { MapPM<Integer, DummyPM> map = new MapPM<Integer, DummyPM>(); final int NUM = 10; populate(map, NUM); HashMap<Integer, DummyPM> hashmap = new HashMap<Integer, DummyPM>(); for (int i = 0; i < 1; ++i) { hashmap.put(i, new DummyPM()); } EventCounter counter = new EventCounter(); map.addListListener(counter); map.putAll(hashmap); assertEquals("map.size()", NUM, map.size()); assertTrue("contains(map.get(0)", map.contains(hashmap.get(0))); assertEquals("map.getSelection().size()", 0, map.getSelectedKeys().size()); assertEquals("map.getSelection().getMaxIndex()", -1, map.getSelection().getMaxIndex()); assertEquals("map.getSelection().getMinIndex()", -1, map.getSelection().getMinIndex()); assertEquals("counter.elementsAdded", 0, counter.elementsAdded); assertEquals("counter.elementsRemoved", 0, counter.elementsRemoved); assertEquals("counter.elementReplaced", 1, counter.elementsReplaced); assertEquals("counter.elementsDeselected", 0, counter.elementsDeselected); assertEquals("counter.elementsSelected", 0, counter.elementsSelected); for (int i = 0; i < 1; ++i) { assertTrue("map.containsValue(pM.getAt(i='" + i + "'))", hashmap.containsValue(map.getAt(i))); } for (int i = 1; i < NUM; ++i) { assertFalse("map.containsValue(pM.getAt(i='" + i + "'))", hashmap.containsValue(map.getAt(i))); } } @Test public void putAllTotalReplacement() { MapPM<Integer, DummyPM> map = new MapPM<Integer, DummyPM>(); final int NUM = 10; populate(map, NUM); HashMap<Integer, DummyPM> hashmap = new HashMap<Integer, DummyPM>(); for (int i = 0; i < NUM; ++i) { hashmap.put(i, new DummyPM()); } EventCounter counter = new EventCounter(); map.addListListener(counter); map.putAll(hashmap); assertEquals("map.size()", NUM, map.size()); assertEquals("map.getSelection().size()", 0, map.getSelectedKeys().size()); assertEquals("map.getSelection().getMaxIndex()", -1, map.getSelection().getMaxIndex()); assertEquals("map.getSelection().getMinIndex()", -1, map.getSelection().getMinIndex()); assertEquals("counter.elementsAdded", 0, counter.elementsAdded); assertEquals("counter.elementsRemoved", 0, counter.elementsRemoved); assertEquals("counter.elementReplaced", 1, counter.elementsReplaced); assertEquals("counter.elementsDeselected", 0, counter.elementsDeselected); assertEquals("counter.elementsSelected", 0, counter.elementsSelected); for (int i = 0; i < NUM; ++i) { assertTrue("map.containsValue(pM.getAt(i='" + i + "'))", hashmap.containsValue(map.getAt(i))); } } @Test public void putAllPartialReplacement() { MapPM<Integer, DummyPM> map = new MapPM<Integer, DummyPM>(); final int NUM = 10; populate(map, NUM); int MORE = 10; int START = 5; HashMap<Integer, DummyPM> hashmap = new HashMap<Integer, DummyPM>(); for (int i = START; i < START + MORE; ++i) { hashmap.put(i, new DummyPM()); } EventCounter counter = new EventCounter(); map.addListListener(counter); map.putAll(hashmap); assertEquals("map.size()", NUM + MORE - START, map.size()); assertEquals("map.getSelection().size()", 0, map.getSelectedKeys().size()); assertEquals("map.getSelection().getMaxIndex()", -1, map.getSelection().getMaxIndex()); assertEquals("map.getSelection().getMinIndex()", -1, map.getSelection().getMinIndex()); assertEquals("counter.elementsAdded", 1, counter.elementsAdded); assertEquals("counter.elementsRemoved", 0, counter.elementsRemoved); assertEquals("counter.elementReplaced", 1, counter.elementsReplaced); assertEquals("counter.elementsDeselected", 0, counter.elementsDeselected); assertEquals("counter.elementsSelected", 0, counter.elementsSelected); for (int i = 0; i < START; ++i) { assertFalse("map.containsValue(pM.getAt(i))", hashmap.containsValue(map.getAt(i))); } for (int i = START; i < START + MORE; ++i) { assertTrue("map.containsValue(pM.getAt(i='" + i + "'))", hashmap.containsValue(map.getAt(i))); } } @Test public void putAllPartialReplacementWithSelection() { MapPM<Integer, DummyPM> map = new MapPM<Integer, DummyPM>(); final int NUM = 10; populate(map, NUM); map.getSelection().addAll(); // select all assertEquals("map.getSelection().getMaxIndex()", NUM - 1, map.getSelection().getMaxIndex()); assertEquals("map.getSelection().getMinIndex()", 0, map.getSelection().getMinIndex()); int MORE = 10; int START = 5; HashMap<Integer, DummyPM> hashmap = new HashMap<Integer, DummyPM>(); for (int i = START; i < START + MORE; ++i) { hashmap.put(i, new DummyPM()); } EventCounter counter = new EventCounter(); map.addListListener(counter); map.putAll(hashmap); assertEquals("map.size()", NUM + MORE - START, map.size()); assertEquals("map.getSelection().size()", NUM, map.getSelectedKeys().size()); assertEquals("map.getSelection().getMaxIndex()", NUM - 1, map.getSelection().getMaxIndex()); assertEquals("map.getSelection().getMinIndex()", 0, map.getSelection().getMinIndex()); assertEquals("counter.elementsAdded", 1, counter.elementsAdded); assertEquals("counter.elementsRemoved", 0, counter.elementsRemoved); assertEquals("counter.elementReplaced", 1, counter.elementsReplaced); assertEquals("counter.elementsDeselected", 0, counter.elementsDeselected); assertEquals("counter.elementsSelected", 0, counter.elementsSelected); for (int i = 0; i < START; ++i) { assertFalse("map.containsValue(pM.getAt(i))", hashmap.containsValue(map.getAt(i))); assertTrue("map.getSelection().contains(i)", map.getSelection().contains(i)); } for (int i = START; i < NUM; ++i) { assertTrue("map.containsValue(pM.getAt(i='" + i + "'))", hashmap.containsValue(map.getAt(i))); assertTrue("map.getSelection().contains(i)", map.getSelection().contains(i)); } for (int i = NUM; i < MORE; ++i) { assertTrue("map.containsValue(pM.getAt(i='" + i + "'))", hashmap.containsValue(map.getAt(i))); assertFalse("map.getSelection().contains(i)", map.getSelection().contains(i)); } } @Test public void selectionSetInterval() { MapPM<Integer, DummyPM> map = new MapPM<Integer, DummyPM>(); final int NUM = 10; populate(map, NUM); EventCounter counter = new EventCounter(); map.addListListener(counter); map.getSelection().setInterval(0, 9); assertEquals("map.getSelection().size()", NUM, map.getSelection().size()); assertEquals("map.getSelection().getMaxIndex()", 9, map.getSelection().getMaxIndex()); assertEquals("map.getSelection().getMinIndex()", 0, map.getSelection().getMinIndex()); assertEquals("counter.elementsSelected", 1, counter.elementsSelected); } @Test public void selectionGetIndexes() { MapPM<Integer, DummyPM> map = new MapPM<Integer, DummyPM>(); final int NUM = 10; populate(map, NUM); map.getSelection().addAll(); int[] indexes = map.getSelection().getIndexes(); assertEquals("indexes.length", NUM, indexes.length); for (int i = 0; i < indexes.length; ++i) { assertEquals("indexes[i='" + i + "']", i, indexes[i]); } } @Test public void selectionGetIndexes_v3() { MapPM<Integer, DummyPM> map = new MapPM<Integer, DummyPM>(); final int NUM = 10; populate(map, NUM); map.getSelection().addInterval(3, 7); int[] indexes = map.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 = map.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 = map.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 = map.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 = map.getSelection().getIndexes(0, 3); assertEquals("indexes.length", 1, indexes.length); assertEquals("indexes[0]", 3, indexes[0]); indexes = map.getSelection().getIndexes(0, 2); assertEquals("indexes.length", 0, indexes.length); indexes = map.getSelection().getIndexes(8, 9); assertEquals("indexes.length", 0, indexes.length); } @Test public void selectionGetMinIndex() { MapPM<Integer, DummyPM> map = new MapPM<Integer, DummyPM>(); final int NUM = 10; populate(map, NUM); map.getSelection().addAll(); assertEquals("map.getSelection().getMinIndex()", 0, map.getSelection().getMinIndex()); } @Test public void selectionGetMaxIndex() { MapPM<Integer, DummyPM> map = new MapPM<Integer, DummyPM>(); final int NUM = 10; populate(map, NUM); map.getSelection().addAll(); assertEquals("map.getSelection().getMaxIndex()", NUM - 1, map.getSelection().getMaxIndex()); } @Test public void selectionSetInterval2() { MapPM<Integer, DummyPM> map = new MapPM<Integer, DummyPM>(); final int NUM = 10; populate(map, NUM); map.getSelection().addAll(); EventCounter counter = new EventCounter(); map.addListListener(counter); map.getSelection().setInterval(3, 5); assertEquals("map.getSelection().size()", 3, map.getSelection().size()); assertEquals("map.getSelection().getMaxIndex()", 5, map.getSelection().getMaxIndex()); assertEquals("map.getSelection().getMinIndex()", 3, map.getSelection().getMinIndex()); assertEquals("counter.elementsDeselected", 2, counter.elementsDeselected); } @Test public void selectionSetInterval3() { MapPM<Integer, DummyPM> map = new MapPM<Integer, DummyPM>(); final int NUM = 10; populate(map, NUM); map.getSelection().addInterval(0, 3); map.getSelection().addInterval(6, 9); assertEquals("map.getSelection().size()", 8, map.getSelection().size()); assertEquals("map.getSelection().getMaxIndex()", 9, map.getSelection().getMaxIndex()); assertEquals("map.getSelection().getMinIndex()", 0, map.getSelection().getMinIndex()); EventCounter counter = new EventCounter(); map.addListListener(counter); map.getSelection().setInterval(2, 7); assertEquals("map.getSelection().size()", 6, map.getSelection().size()); assertEquals("map.getSelection().getMaxIndex()", 7, map.getSelection().getMaxIndex()); assertEquals("map.getSelection().getMinIndex()", 2, map.getSelection().getMinIndex()); assertEquals("counter.elementsDeselected", 2, counter.elementsDeselected); assertEquals("counter.elementsSelected", 1, counter.elementsSelected); } @Test public void selectionGetMinIndexAndMaxIndex() { MapPM<Integer, DummyPM> map = new MapPM<Integer, DummyPM>(); final int NUM = 10; populate(map, NUM); map.getSelection().setInterval(2, 3); assertEquals("map.getSelection().getMinIndex()", 2, map.getSelection().getMinIndex()); assertEquals("map.getSelection().getMaxIndex()", 3, map.getSelection().getMaxIndex()); map.getSelection().setInterval(5, 6); assertEquals("map.getSelection().getMinIndex()", 5, map.getSelection().getMinIndex()); assertEquals("map.getSelection().getMaxIndex()", 6, map.getSelection().getMaxIndex()); map.getSelection().addInterval(2, 3); assertEquals("map.getSelection().getMinIndex()", 2, map.getSelection().getMinIndex()); assertEquals("map.getSelection().getMaxIndex()", 6, map.getSelection().getMaxIndex()); map.getSelection().addInterval(9, 9); assertEquals("map.getSelection().getMinIndex()", 2, map.getSelection().getMinIndex()); assertEquals("map.getSelection().getMaxIndex()", 9, map.getSelection().getMaxIndex()); map.getSelection().removeInterval(6, 9); assertEquals("map.getSelection().getMinIndex()", 2, map.getSelection().getMinIndex()); assertEquals("map.getSelection().getMaxIndex()", 5, map.getSelection().getMaxIndex()); } public void selectionRemoveAll() { MapPM<Integer, DummyPM> map = new MapPM<Integer, DummyPM>(); final int NUM = 10; populate(map, NUM); map.getSelection().addAll(); assertEquals("map.getSelection().size()", 10, map.getSelection().size()); Collection<DummyPM> selCopy = new ArrayList<DummyPM>(map.getSelection()); map.getSelection().removeAll(selCopy); assertEquals("map.getSelection().size()", 0, map.getSelection().size()); } public void selectionRemoveAll2() { MapPM<Integer, DummyPM> map = new MapPM<Integer, DummyPM>(); EventCounter counter = new EventCounter(); map.addListListener(counter); final int NUM = 10; populate(map, NUM); map.getSelection().addAll(); assertEquals("map.getSelection().size()", 10, map.getSelection().size()); Collection<DummyPM> col = new ArrayList<DummyPM>(); col.add(new DummyPM()); col.add(new DummyPM()); map.getSelection().removeAll(col); assertEquals("map.getSelection().size()", 10, map.getSelection().size()); assertEquals("map.getSelection().size()", 0, counter.elementsDeselected); } @Test public void removeElementRemovesSelection() { MapPM<Integer, DummyPM> map = new MapPM<Integer, DummyPM>(); final int NUM = 10; populate(map, NUM); map.getSelection().addAll(); assertEquals("map.getSelection().size()", 10, map.getSelection().size()); map.remove(map.getAt(2)); assertEquals("map.getSelection().size()", 9, map.getSelection().size()); } @Test public void removeElementRemovesSelection2() { MapPM<Integer, DummyPM> map = new MapPM<Integer, DummyPM>(); DummyPM[] elems = populate(map, 5); map.getSelection().add(elems[2]); map.getSelection().add(elems[3]); assertEquals("map.getSelection().size()", 2, map.getSelection().size()); map.remove(elems[2]); assertEquals("map.getSelection().size()", 1, map.getSelection().size()); } @Test public void removeElementRemovesSelection3() { MapPM<Integer, DummyPM> map = new MapPM<Integer, DummyPM>(); DummyPM[] elems = populate(map, 10); map.getSelection().addAll(); assertEquals("map.getSelection().size()", 10, map.getSelection().size()); for (int i = 0; i < elems.length; ++i) { if (i % 2 == 0) { map.put(i, elems[i]); } else { map.remove(elems[i]); } } assertEquals("map.getSelection().size()", 5, map.getSelection().size()); } @Test public void getSortKey() { MapPM<Integer, DummyPM> map = new MapPM<Integer, DummyPM>(); populate(map, 10); Collection<SortKey> sortKeys = map.getSortKeys(); assertNotNull("sortKeys", sortKeys); assertEquals("sortKeys.size()", 0, sortKeys.size()); map.sortBy(new SortKey(true, new Path("text")), new SortKey(true, new Path("id"))); sortKeys = map.getSortKeys(); assertNotNull("sortKeys", sortKeys); assertEquals("sortKeys.size()", 2, sortKeys.size()); SortKey[] sortKeysArray = (SortKey[])sortKeys.toArray(new SortKey[sortKeys.size()]); assertEquals("sortKeysArray[0].getSortPath()", new Path("text"), sortKeysArray[0].getSortPath()); assertEquals("sortKeysArray[1].getSortPath()", new Path("id"), sortKeysArray[1].getSortPath()); } @Test public void multiplePuts() { MapPM<Integer, DummyPM> map = new MapPM<Integer, DummyPM>(); DummyPM[] elems = populate(map, 10); EventCounter counter = new EventCounter(); map.addListListener(counter); map.put(1, elems[1]); assertEquals("counter.elementsAdded", 0, counter.elementsAdded); assertEquals("counter.elementChanged", 0, counter.elementChanged); assertEquals("counter.elementsRemoved", 0, counter.elementsRemoved); assertEquals("counter.elementsSelected", 0, counter.elementsSelected); assertEquals("counter.elementsDeselected", 0, counter.elementsDeselected); } @Test public void multiplePutsWithSelection() { MapPM<Integer, DummyPM> map = new MapPM<Integer, DummyPM>(); DummyPM[] elems = populate(map, 10); map.getSelection().addAll(); EventCounter counter = new EventCounter(); map.addListListener(counter); map.put(1, elems[1]); assertEquals("counter.elementsAdded", 0, counter.elementsAdded); assertEquals("counter.elementChanged", 0, counter.elementChanged); assertEquals("counter.elementsRemoved", 0, counter.elementsRemoved); assertEquals("counter.elementsSelected", 0, counter.elementsSelected); assertEquals("counter.elementsDeselected", 0, counter.elementsDeselected); } private DummyPM[] populate(MapPM<Integer, DummyPM> map, int number) { DummyPM[] elems = new DummyPM[number]; for (int i = 0; i < elems.length; ++i) { elems[i] = new DummyPM(); elems[i].id.setInteger(i); map.put(i, elems[i]); } assertEquals("map.size()", number, map.size()); return elems; } private static class EventCounter implements ListListener { int elementChanged; int elementsReplaced; int elementsAdded; int elementsDeselected; int elementsRemoved; int elementsSelected; List<ListEvent> events = new LinkedList<ListEvent>(); public void elementChanged(ElementChangedEvent evt) { events.add(evt); elementChanged++; } public void elementsReplaced(ElementsReplacedEvent evt) { events.add(evt); elementsReplaced++; } public void elementsAdded(ElementsAddedEvent evt) { events.add(evt); elementsAdded++; } public void elementsDeselected(ElementsDeselectedEvent evt) { events.add(evt); elementsDeselected++; } public void elementsRemoved(ElementsRemovedEvent evt) { events.add(evt); elementsRemoved++; } public void elementsSelected(ElementsSelectedEvent evt) { events.add(evt); elementsSelected++; } } }