blob: 2d67f2bba372e8882d1c2289918e843c20d58cb2 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 1998, 2013 Oracle and/or its affiliates. All rights reserved.
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
* which accompanies this distribution.
* The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
* and the Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* Contributors:
* Oracle - initial API and implementation from Oracle TopLink
******************************************************************************/
package org.eclipse.persistence.tools.workbench.test.uitools.swing;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.swing.DefaultListModel;
import javax.swing.ListModel;
import javax.swing.event.ListDataEvent;
import javax.swing.event.ListDataListener;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
import org.eclipse.persistence.tools.workbench.test.utility.TestTools;
import org.eclipse.persistence.tools.workbench.uitools.swing.ExtendedListModel;
public class ExtendedListModelTests
extends TestCase
{
private DefaultListModel listModel;
private ListModel extendedListModel;
ListDataEvent event;
String eventType;
private static final String ADD = "add";
private static final String REMOVE = "remove";
private static final String CHANGE = "change";
public static Test suite() {
return new TestSuite(ExtendedListModelTests.class);
}
public ExtendedListModelTests(String name) {
super(name);
}
protected void setUp() throws Exception {
super.setUp();
this.listModel = this.buildListModel();
this.extendedListModel = this.buildExtendedListModel();
}
private List buildList() {
List list = new ArrayList();
list.add("A");
list.add("B");
list.add("C");
list.add("D");
return list;
}
private List buildPrefix() {
List prefix = new ArrayList();
prefix.add("1");
prefix.add("2");
prefix.add("3");
return prefix;
}
private List buildSuffix() {
List suffix = new ArrayList();
suffix.add("X");
suffix.add("Y");
suffix.add("Z");
return suffix;
}
private List buildExtendedList() {
List list = new ArrayList();
list.addAll(this.buildPrefix());
list.addAll(this.buildList());
list.addAll(this.buildSuffix());
return list;
}
private DefaultListModel buildListModel() {
DefaultListModel lm = new DefaultListModel();
for (Iterator stream = this.buildList().iterator(); stream.hasNext(); ) {
lm.addElement(stream.next());
}
return lm;
}
private ListModel buildExtendedListModel() {
return new ExtendedListModel(this.buildPrefix(), this.listModel, this.buildSuffix());
}
/** Return a list of the data in the listModel */
private List buildListModelList() {
List modelList = new ArrayList();
for (int i = 0; i < this.listModel.getSize(); i ++) {
modelList.add(this.listModel.getElementAt(i));
}
return modelList;
}
/** Return a list of the data in the extendedListModel */
private List buildExtendedListModelList() {
List modelList = new ArrayList();
for (int i = 0; i < this.extendedListModel.getSize(); i ++) {
modelList.add(this.extendedListModel.getElementAt(i));
}
return modelList;
}
private boolean listModelContains(Object item) {
return this.buildListModelList().contains(item);
}
private boolean extendedListModelContains(Object item) {
return this.buildExtendedListModelList().contains(item);
}
private void internalTestEquivalence(ListModel lm, List list) {
assertEquals(lm.getSize(), list.size());
for (int i = 0; i < lm.getSize(); i ++) {
assertEquals(lm.getElementAt(i), list.get(i));
}
}
protected void tearDown() throws Exception {
TestTools.clear(this);
super.tearDown();
}
public void testEquivalence() {
this.internalTestEquivalence(this.extendedListModel, this.buildExtendedList());
}
public void testAddItem_Part1() {
assertFalse(this.extendedListModelContains("E"));
this.listModel.addElement("E");
assertTrue(this.listModelContains("E"));
assertTrue(this.extendedListModelContains("E"));
List extendedList = this.buildExtendedList();
extendedList.add(7, "E");
this.internalTestEquivalence(this.extendedListModel, extendedList);
}
public void testAddItem_Part2() {
assertFalse(this.extendedListModelContains(null));
this.listModel.add(0, null);
assertTrue(this.listModelContains(null));
assertTrue(this.extendedListModelContains(null));
List extendedList = this.buildExtendedList();
extendedList.add(3, null);
this.internalTestEquivalence(this.extendedListModel, extendedList);
}
public void testAddItem_Part3() {
assertFalse(this.extendedListModelContains("AtoB"));
this.listModel.add(1, "AtoB");
assertTrue(this.listModelContains("AtoB"));
assertTrue(this.extendedListModelContains("AtoB"));
List extendedList = this.buildExtendedList();
extendedList.add(4, "AtoB");
this.internalTestEquivalence(this.extendedListModel, extendedList);
}
public void testRemoveItem_Part1() {
assertTrue(this.extendedListModelContains("B"));
this.listModel.removeElement("B");
assertFalse(this.listModelContains("B"));
assertFalse(this.extendedListModelContains("B"));
List extendedList = this.buildExtendedList();
extendedList.remove("B");
this.internalTestEquivalence(this.extendedListModel, extendedList);
}
public void testRemoveItem_Part2() {
this.listModel.add(0, null);
assertTrue(this.extendedListModelContains(null));
this.listModel.remove(0);
assertFalse(this.listModelContains(null));
assertFalse(this.extendedListModelContains(null));
this.internalTestEquivalence(this.extendedListModel, this.buildExtendedList());
}
private ListDataListener buildListener() {
return new ListDataListener() {
public void intervalAdded(ListDataEvent e) {
ExtendedListModelTests.this.eventType = ADD;
ExtendedListModelTests.this.event = e;
}
public void intervalRemoved(ListDataEvent e) {
ExtendedListModelTests.this.eventType = REMOVE;
ExtendedListModelTests.this.event = e;
}
public void contentsChanged(ListDataEvent e) {
ExtendedListModelTests.this.eventType = CHANGE;
ExtendedListModelTests.this.event = e;
}
};
}
public void testListChangeGeneric() {
this.extendedListModel.addListDataListener(this.buildListener());
this.verifyListChange();
}
private void verifyListChange() {
this.event = null;
this.eventType = null;
this.listModel.add(4, "E");
this.verifyEvent(ADD, 7);
this.event = null;
this.eventType = null;
this.listModel.add(5, null);
this.verifyEvent(ADD, 8);
this.event = null;
this.eventType = null;
this.listModel.remove(5);
this.verifyEvent(REMOVE, 8);
this.event = null;
this.eventType = null;
this.listModel.remove(4);
this.verifyEvent(REMOVE, 7);
}
private void verifyEvent(String type, int index0) {
this.verifyEvent(type);
assertEquals(index0, this.event.getIndex0());
assertEquals(index0, this.event.getIndex1());
}
private void verifyEvent(String type) {
assertEquals(type, this.eventType);
assertEquals(this.extendedListModel, this.event.getSource());
}
}