blob: 0a3931801f109e032ce7cf3c1ad65b0bf15b63a9 [file] [log] [blame]
package org.eclipse.jface.tests.viewers;
/*
* Licensed Materials - Property of IBM,
* WebSphere Studio Workbench
* (c) Copyright IBM Corp 1999, 2000
*/
import org.eclipse.jface.*;
import org.eclipse.jface.resource.*;
import org.eclipse.jface.viewers.*;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.*;
import org.eclipse.swt.graphics.*;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;
import java.util.*;
import junit.framework.*;
public abstract class AbstractTreeViewerTest extends StructuredItemViewerTest {
AbstractTreeViewer fTreeViewer;
public AbstractTreeViewerTest(String name) {
super(name);
}
protected void assertEqualsArray(String s, Object[] a1, Object[] a2) {
int s1= a1.length;
int s2= a2.length;
assertTrue(s, s1 == s2);
for (int i= 0; i < s1; i++) {
assertEquals(s, a1[i], a2[i]);
}
}
protected abstract int getItemCount(TestElement element); //was IElement
public void testBulkExpand() {
// navigate
TestElement first = fRootElement.getFirstChild();
TestElement first2 = first.getFirstChild();
TestElement last = fRootElement.getLastChild();
// expand a few nodes
fTreeViewer.expandToLevel(first, 2);
fTreeViewer.expandToLevel(first2, 2);
fTreeViewer.expandToLevel(last, 2);
// get expand state
Object[] list1 = fTreeViewer.getExpandedElements();
// flush viewer
fViewer.setInput(fRootElement);
// restore old expand state
fTreeViewer.collapseAll();
fTreeViewer.expandToLevel(first, 2);
fTreeViewer.expandToLevel(first2, 2);
fTreeViewer.expandToLevel(last, 2);
Object[] list2 = fTreeViewer.getExpandedElements();
assertEqualsArray("old and new expand state are the same", list1, list2);
}
public void testDeleteChildExpanded() {
TestElement first= fRootElement.getFirstChild();
TestElement first2= first.getFirstChild();
fTreeViewer.expandToLevel(first2,0);
assertNotNull("first child is visible", fViewer.testFindItem(first2));
first.deleteChild(first2);
assertNull("first child is not visible", fViewer.testFindItem(first2));
}
public void testDeleteChildren() {
TestElement first= fRootElement.getFirstChild();
first.deleteChildren();
assertTrue("no children", getItemCount(first) == 0);
}
public void testDeleteChildrenExpanded() {
TestElement first= fRootElement.getFirstChild();
TestElement first2= first.getFirstChild();
fTreeViewer.expandToLevel(first2,0);
assertNotNull("first child is visible", fViewer.testFindItem(first2));
first.deleteChildren();
assertTrue("no children", getItemCount(first) == 0);
}
public void testExpand() {
TestElement first= fRootElement.getFirstChild();
TestElement first2= first.getFirstChild();
assertNull("first child is not visible", fViewer.testFindItem(first2));
fTreeViewer.expandToLevel(first2,0);
assertNotNull("first child is visible", fViewer.testFindItem(first2));
}
public void testExpandElement() {
TestElement first = fRootElement.getFirstChild();
TestElement first2 = first.getFirstChild();
TestElement first3 = first2.getFirstChild();
fTreeViewer.expandToLevel(first3, 0);
assertNotNull("first3 is visible", fViewer.testFindItem(first3));
assertNotNull("first2 is visible", fViewer.testFindItem(first2));
}
public void testExpandToLevel() {
TestElement first= fRootElement.getFirstChild();
TestElement first2= first.getFirstChild();
fTreeViewer.expandToLevel(2);
assertNotNull("first2 is visible", fViewer.testFindItem(first2));
}
public void testFilterExpanded() {
TestElement first= fRootElement.getFirstChild();
TestElement first2= first.getFirstChild();
fTreeViewer.expandToLevel(first2,0);
fTreeViewer.addFilter(new TestLabelFilter());
assertTrue("filtered count", getItemCount() == 5);
}
public void testInsertChildReveal() {
TestElement first= fRootElement.getFirstChild();
TestElement newElement= first.addChild(TestModelChange.INSERT | TestModelChange.REVEAL);
assertNotNull("new sibling is visible", fViewer.testFindItem(newElement));
}
public void testInsertChildRevealSelect() {
TestElement last= fRootElement.getLastChild();
TestElement newElement= last.addChild(TestModelChange.INSERT | TestModelChange.REVEAL | TestModelChange.SELECT);
assertNotNull("new sibling is visible", fViewer.testFindItem(newElement));
assertSelectionEquals("new element is selected", newElement);
}
public void testInsertChildRevealSelectExpanded() {
TestElement first= fRootElement.getFirstChild();
TestElement newElement= first.addChild(TestModelChange.INSERT | TestModelChange.REVEAL | TestModelChange.SELECT);
assertNotNull("new sibling is visible", fViewer.testFindItem(newElement));
assertSelectionEquals("new element is selected", newElement);
}
/**
* Regression test for 1GDN0PX: ITPUI:WIN2000 - SEVERE - AssertionFailure when expanding Navigator
* Problem was:
* - before addition, parent item had no children, and was expanded
* - after addition, during refresh(), updatePlus() added dummy node even though parent item was expanded
* - in updateChildren, it wasn't handling a dummy node
*/
public void testRefreshWithAddedChildren() {
TestElement parent = fRootElement.addChild(TestModelChange.INSERT);
TestElement child = parent.addChild(TestModelChange.INSERT);
((AbstractTreeViewer) fViewer).setExpandedState(parent, true);
parent.deleteChild(child);
child = parent.addChild(TestModelChange.STRUCTURE_CHANGE);
assertNotNull("new child is visible", fViewer.testFindItem(child));
}
/**
* Regression test for 1GBDB5A: ITPUI:WINNT - Exception in AbstractTreeViewer update.
* Problem was:
* node has child A
* node gets duplicate child A
* viewer is refreshed rather than using add for new A
* AbstractTreeViewer.updateChildren(...) was not properly handling it
*/
public void testRefreshWithDuplicateChild() {
TestElement first= fRootElement.getFirstChild();
TestElement newElement= (TestElement) first.clone();
fRootElement.addChild(newElement, new TestModelChange(TestModelChange.STRUCTURE_CHANGE, fRootElement));
assertNotNull("new sibling is visible", fViewer.testFindItem(newElement));
}
public void testRenameChildElement() {
TestElement first= fRootElement.getFirstChild();
TestElement first2= first.getFirstChild();
fTreeViewer.expandToLevel(first2,0);
assertNotNull("first child is visible", fViewer.testFindItem(first2));
String newLabel= first2.getLabel()+" changed";
first2.setLabel(newLabel);
Widget widget= fViewer.testFindItem(first2);
assertTrue(widget instanceof Item);
assertEquals("changed label", first2.getID()+" "+newLabel, ((Item)widget).getText());
}
}