blob: bfcdd8d6601def6c4c7fb3777a4fa499df65fce4 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007 Lasse Knudsen and others.
* 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:
* Lasse Knudsen - initial API and implementation, bug 205700
* Boris Bokowski, IBM - additional test cases
*******************************************************************************/
package org.eclipse.jface.tests.viewers;
import java.util.ArrayList;
import java.util.List;
import junit.framework.TestCase;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerSorter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Shell;
public class Bug205700TreeViewerTest extends TestCase {
private Shell shell;
private TreeViewer viewer;
private TreeNode rootNode;
private final TreeNode child1 = new TreeNode("Child1");
private final TreeNode child5 = new TreeNode("Child5");
private final TreeNode child10 = new TreeNode("Child10");
/*
* (non-Javadoc)
*
* @see junit.framework.TestCase#setUp()
*/
protected void setUp() throws Exception {
shell = new Shell();
viewer = new TreeViewer(shell, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
viewer.setContentProvider(new InternalContentProvider());
viewer.setLabelProvider(new InternalLabelProvider());
viewer.setInput(createInput());
shell.open();
}
/*
* (non-Javadoc)
*
* @see junit.framework.TestCase#tearDown()
*/
protected void tearDown() throws Exception {
shell.close();
}
public void testAddWithoutSorter() throws Exception {
assertItemNames(new String[] { "Child1", "Child5", "Child10" });
rootNode.add(new TreeNode("Child2"));
rootNode.add(new TreeNode("Child3"));
rootNode.add(new TreeNode("Child4"));
rootNode.add(new TreeNode("Child6"));
rootNode.add(new TreeNode("Child7"));
rootNode.add(new TreeNode("Child8"));
rootNode.add(new TreeNode("Child9"));
viewer.add(rootNode, rootNode.getChildren().toArray());
assertItemNames(new String[] { "Child1", "Child5", "Child10", "Child2",
"Child3", "Child4", "Child6", "Child7", "Child8", "Child9" });
}
/**
* @param names
*/
private void assertItemNames(String[] names) {
for (int i = 0; i < names.length; i++) {
assertItemName(i, names[i]);
}
}
/**
* @param index
* @param name
*/
private void assertItemName(int index, String name) {
assertEquals("at " + index, name, viewer.getTree().getItem(index)
.getText());
}
public void testAddWithSorter() throws Exception {
assertItemNames(new String[] { "Child1", "Child5", "Child10" });
viewer.setSorter(new ViewerSorter());
assertItemNames(new String[] { "Child1", "Child10", "Child5" });
rootNode.add(new TreeNode("Child2"));
rootNode.add(new TreeNode("Child3"));
rootNode.add(new TreeNode("Child4"));
rootNode.add(new TreeNode("Child6"));
rootNode.add(new TreeNode("Child7"));
rootNode.add(new TreeNode("Child8"));
rootNode.add(new TreeNode("Child9"));
viewer.add(rootNode, rootNode.getChildren().toArray());
assertItemNames(new String[] { "Child1", "Child10", "Child2", "Child3",
"Child4", "Child5", "Child6", "Child7", "Child8", "Child9" });
}
public void testAddEquallySortedElements() throws Exception {
assertItemNames(new String[] { "Child1", "Child5", "Child10" });
viewer.setSorter(new ViewerSorter());
assertItemNames(new String[] { "Child1", "Child10", "Child5" });
// add before the existing "Child1" node
rootNode.getChildren().add(0, new TreeNode("Child1"));
viewer.add(rootNode, rootNode.getChildren().toArray());
assertItemNames(new String[] { "Child1", "Child1", "Child10",
"Child5" });
}
private Object createInput() {
rootNode = new TreeNode("Root");
rootNode.add(child1);
rootNode.add(child5);
rootNode.add(child10);
return rootNode;
}
private class TreeNode {
private final String name;
private TreeNode parent = null;
private final List children = new ArrayList();
public TreeNode(String name) {
this.name = name;
}
public void add(TreeNode newChild) {
if (newChild != null) {
children.add(newChild);
}
}
public List getChildren() {
return children;
}
public TreeNode getParent() {
return parent;
}
public String getName() {
return name;
}
public String toString() {
return getName();
}
}
private class InternalLabelProvider extends LabelProvider {
public String getText(Object element) {
if (element instanceof TreeNode) {
return ((TreeNode) element).getName();
}
return null;
}
}
private class InternalContentProvider implements ITreeContentProvider {
public Object[] getChildren(Object parentElement) {
if (parentElement instanceof TreeNode) {
return ((TreeNode) parentElement).getChildren().toArray();
}
return new Object[0];
}
public Object getParent(Object element) {
if (element instanceof TreeNode) {
return ((TreeNode) element).getParent();
}
return null;
}
public boolean hasChildren(Object element) {
if (element instanceof TreeNode) {
return !((TreeNode) element).getChildren().isEmpty();
}
return false;
}
public Object[] getElements(Object inputElement) {
return getChildren(inputElement);
}
public void dispose() {
// nothing
}
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
// nothing
}
}
}