Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/ListModelAdapterTests.java')
-rw-r--r--common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/ListModelAdapterTests.java320
1 files changed, 320 insertions, 0 deletions
diff --git a/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/ListModelAdapterTests.java b/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/ListModelAdapterTests.java
new file mode 100644
index 0000000000..0be426de9f
--- /dev/null
+++ b/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/model/value/swing/ListModelAdapterTests.java
@@ -0,0 +1,320 @@
+/*******************************************************************************
+ * Copyright (c) 2007, 2010 Oracle. All rights reserved.
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0, which accompanies this distribution
+ * and is available at http://www.eclipse.org/legal/epl-v10.html.
+ *
+ * Contributors:
+ * Oracle - initial API and implementation
+ ******************************************************************************/
+package org.eclipse.jpt.common.utility.tests.internal.model.value.swing;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.List;
+import java.util.SortedSet;
+import java.util.TreeSet;
+
+import javax.swing.ListModel;
+
+import junit.framework.TestCase;
+
+import org.eclipse.jpt.common.utility.internal.Bag;
+import org.eclipse.jpt.common.utility.internal.HashBag;
+import org.eclipse.jpt.common.utility.internal.ReflectionTools;
+import org.eclipse.jpt.common.utility.internal.model.value.SimpleCollectionValueModel;
+import org.eclipse.jpt.common.utility.internal.model.value.SimpleListValueModel;
+import org.eclipse.jpt.common.utility.internal.model.value.SortedListValueModelAdapter;
+import org.eclipse.jpt.common.utility.internal.model.value.SortedListValueModelWrapper;
+import org.eclipse.jpt.common.utility.internal.model.value.swing.ListModelAdapter;
+import org.eclipse.jpt.common.utility.model.listener.ListChangeListener;
+import org.eclipse.jpt.common.utility.model.value.CollectionValueModel;
+import org.eclipse.jpt.common.utility.model.value.ListValueModel;
+import org.eclipse.jpt.common.utility.tests.internal.model.value.CoordinatedList;
+
+@SuppressWarnings("nls")
+public class ListModelAdapterTests extends TestCase {
+
+ public ListModelAdapterTests(String name) {
+ super(name);
+ }
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ // nothing yet...
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ // nothing yet...
+ super.tearDown();
+ }
+
+ private ListModelAdapter buildListModel(ListValueModel<String> listHolder) {
+ return new ListModelAdapter(listHolder) {
+ @Override
+ protected ListChangeListener buildListChangeListener() {
+ return this.buildListChangeListener_();
+ }
+ };
+ }
+
+ private ListModel buildListModel(CollectionValueModel<String> collectionHolder) {
+ return new ListModelAdapter(collectionHolder) {
+ @Override
+ protected ListChangeListener buildListChangeListener() {
+ return this.buildListChangeListener_();
+ }
+ };
+ }
+
+ public void testCollectionSynchronization() {
+ SimpleCollectionValueModel<String> collectionHolder = this.buildCollectionHolder();
+ ListModel listModel = this.buildListModel(collectionHolder);
+ CoordinatedList<String> synchList = new CoordinatedList<String>(listModel);
+ assertEquals(6, synchList.size());
+ this.compare(listModel, synchList);
+
+ collectionHolder.add("tom");
+ collectionHolder.add("dick");
+ collectionHolder.add("harry");
+ collectionHolder.add(null);
+ assertEquals(10, synchList.size());
+ this.compare(listModel, synchList);
+
+ collectionHolder.remove("foo");
+ collectionHolder.remove("jar");
+ collectionHolder.remove("harry");
+ collectionHolder.remove(null);
+ assertEquals(6, synchList.size());
+ this.compare(listModel, synchList);
+ }
+
+ public void testListSynchronization() {
+ SimpleListValueModel<String> listHolder = this.buildListHolder();
+ ListModel listModel = this.buildListModel(listHolder);
+ CoordinatedList<String> synchList = new CoordinatedList<String>(listModel);
+ assertEquals(6, synchList.size());
+ this.compare(listModel, synchList);
+
+ listHolder.add(6, "tom");
+ listHolder.add(7, "dick");
+ listHolder.add(8, "harry");
+ listHolder.add(9, null);
+ assertEquals(10, synchList.size());
+ this.compare(listModel, synchList);
+
+ listHolder.remove(9);
+ listHolder.remove(8);
+ listHolder.remove(4);
+ listHolder.remove(0);
+ assertEquals(6, synchList.size());
+ this.compare(listModel, synchList);
+ }
+
+ public void testSetModel() {
+ SimpleListValueModel<String> listHolder1 = this.buildListHolder();
+ ListModelAdapter listModel = this.buildListModel(listHolder1);
+ CoordinatedList<String> synchList = new CoordinatedList<String>(listModel);
+ assertTrue(listHolder1.hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
+ assertEquals(6, synchList.size());
+ this.compare(listModel, synchList);
+
+ SimpleListValueModel<String> listHolder2 = this.buildListHolder2();
+ listModel.setModel(listHolder2);
+ assertEquals(3, synchList.size());
+ this.compare(listModel, synchList);
+ assertTrue(listHolder1.hasNoListChangeListeners(ListValueModel.LIST_VALUES));
+ assertTrue(listHolder2.hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
+
+ listModel.setModel(new SimpleListValueModel<String>());
+ assertEquals(0, synchList.size());
+ this.compare(listModel, synchList);
+ assertTrue(listHolder1.hasNoListChangeListeners(ListValueModel.LIST_VALUES));
+ assertTrue(listHolder2.hasNoListChangeListeners(ListValueModel.LIST_VALUES));
+ }
+
+ private void compare(ListModel listModel, List<String> list) {
+ assertEquals(listModel.getSize(), list.size());
+ for (int i = 0; i < listModel.getSize(); i++) {
+ assertEquals(listModel.getElementAt(i), list.get(i));
+ }
+ }
+
+ public void testCollectionSort() {
+ this.verifyCollectionSort(null);
+ }
+
+ public void testListSort() {
+ this.verifyListSort(null);
+ }
+
+ public void testCustomCollectionSort() {
+ this.verifyCollectionSort(this.buildCustomComparator());
+ }
+
+ public void testCustomListSort() {
+ this.verifyListSort(this.buildCustomComparator());
+ }
+
+ private Comparator<String> buildCustomComparator() {
+ // sort with reverse order
+ return new Comparator<String>() {
+ public int compare(String s1, String s2) {
+ return s2.compareTo(s1);
+ }
+ };
+ }
+
+ private void verifyCollectionSort(Comparator<String> comparator) {
+ SimpleCollectionValueModel<String> collectionHolder = this.buildCollectionHolder();
+ ListModel listModel = this.buildListModel(new SortedListValueModelAdapter<String>(collectionHolder, comparator));
+ CoordinatedList<String> synchList = new CoordinatedList<String>(listModel);
+ assertEquals(6, synchList.size());
+ this.compareSort(listModel, synchList, comparator);
+
+ collectionHolder.add("tom");
+ collectionHolder.add("dick");
+ collectionHolder.add("harry");
+ assertEquals(9, synchList.size());
+ this.compareSort(listModel, synchList, comparator);
+
+ collectionHolder.remove("foo");
+ collectionHolder.remove("jar");
+ collectionHolder.remove("harry");
+ assertEquals(6, synchList.size());
+ this.compareSort(listModel, synchList, comparator);
+ }
+
+ private void verifyListSort(Comparator<String> comparator) {
+ SimpleListValueModel<String> listHolder = this.buildListHolder();
+ ListModel listModel = this.buildListModel(new SortedListValueModelWrapper<String>(listHolder, comparator));
+ CoordinatedList<String> synchList = new CoordinatedList<String>(listModel);
+ assertEquals(6, synchList.size());
+ this.compareSort(listModel, synchList, comparator);
+
+ listHolder.add(0, "tom");
+ listHolder.add(0, "dick");
+ listHolder.add(0, "harry");
+ assertEquals(9, synchList.size());
+ this.compareSort(listModel, synchList, comparator);
+
+ listHolder.remove(8);
+ listHolder.remove(4);
+ listHolder.remove(0);
+ listHolder.remove(5);
+ assertEquals(5, synchList.size());
+ this.compareSort(listModel, synchList, comparator);
+ }
+
+ private void compareSort(ListModel listModel, List<String> list, Comparator<String> comparator) {
+ SortedSet<String> ss = new TreeSet<String>(comparator);
+ for (int i = 0; i < listModel.getSize(); i++) {
+ ss.add((String) listModel.getElementAt(i));
+ }
+ assertEquals(ss.size(), list.size());
+ for (Iterator<String> stream1 = ss.iterator(), stream2 = list.iterator(); stream1.hasNext(); ) {
+ assertEquals(stream1.next(), stream2.next());
+ }
+ }
+
+ public void testHasListeners() throws Exception {
+ SimpleListValueModel<String> listHolder = this.buildListHolder();
+ assertFalse(listHolder.hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
+
+ ListModel listModel = this.buildListModel(listHolder);
+ assertFalse(listHolder.hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
+ this.verifyHasNoListeners(listModel);
+
+ CoordinatedList<String> synchList = new CoordinatedList<String>(listModel);
+ assertTrue(listHolder.hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
+ this.verifyHasListeners(listModel);
+
+ listModel.removeListDataListener(synchList);
+ assertFalse(listHolder.hasAnyListChangeListeners(ListValueModel.LIST_VALUES));
+ this.verifyHasNoListeners(listModel);
+ }
+
+ public void testGetSize() throws Exception {
+ SimpleListValueModel<String> listHolder = this.buildListHolder();
+ ListModel listModel = this.buildListModel(listHolder);
+ this.verifyHasNoListeners(listModel);
+ assertEquals(6, listModel.getSize());
+
+ CoordinatedList<String> synchList = new CoordinatedList<String>(listModel);
+ this.verifyHasListeners(listModel);
+ assertEquals(6, listModel.getSize());
+
+ listModel.removeListDataListener(synchList);
+ this.verifyHasNoListeners(listModel);
+ assertEquals(6, listModel.getSize());
+ }
+
+ public void testGetElementAt() throws Exception {
+ SimpleListValueModel<String> listHolder = this.buildListHolder();
+ ListModel listModel = this.buildListModel(new SortedListValueModelWrapper<String>(listHolder));
+ CoordinatedList<String> synchList = new CoordinatedList<String>(listModel);
+ this.verifyHasListeners(listModel);
+ assertEquals("bar", listModel.getElementAt(0));
+ assertEquals("bar", synchList.get(0));
+ }
+
+ private void verifyHasNoListeners(ListModel listModel) throws Exception {
+ boolean hasNoListeners = ((Boolean) ReflectionTools.executeMethod(listModel, "hasNoListDataListeners")).booleanValue();
+ assertTrue(hasNoListeners);
+ }
+
+ private void verifyHasListeners(ListModel listModel) throws Exception {
+ boolean hasListeners = ((Boolean) ReflectionTools.executeMethod(listModel, "hasListDataListeners")).booleanValue();
+ assertTrue(hasListeners);
+ }
+
+ private SimpleCollectionValueModel<String> buildCollectionHolder() {
+ return new SimpleCollectionValueModel<String>(this.buildCollection());
+ }
+
+ private Collection<String> buildCollection() {
+ Bag<String> bag = new HashBag<String>();
+ this.populateCollection(bag);
+ return bag;
+ }
+
+ private SimpleListValueModel<String> buildListHolder() {
+ return new SimpleListValueModel<String>(this.buildList());
+ }
+
+ private List<String> buildList() {
+ List<String> list = new ArrayList<String>();
+ this.populateCollection(list);
+ return list;
+ }
+
+ private void populateCollection(Collection<String> c) {
+ c.add("foo");
+ c.add("bar");
+ c.add("baz");
+ c.add("joo");
+ c.add("jar");
+ c.add("jaz");
+ }
+
+ private SimpleListValueModel<String> buildListHolder2() {
+ return new SimpleListValueModel<String>(this.buildList2());
+ }
+
+ private List<String> buildList2() {
+ List<String> list = new ArrayList<String>();
+ this.populateCollection2(list);
+ return list;
+ }
+
+ private void populateCollection2(Collection<String> c) {
+ c.add("tom");
+ c.add("dick");
+ c.add("harry");
+ }
+
+}

Back to the top