blob: b02adc62f74f8afd65cfbf5478a27420a883a8c9 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2005, 2006 IBM Corporation 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jface.tests.viewers;
import java.util.Arrays;
import java.util.List;
import org.eclipse.jface.viewers.AbstractTreeViewer;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ITreeSelection;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TreePath;
import org.eclipse.jface.viewers.TreeSelection;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.widgets.TreeItem;
import org.eclipse.swt.widgets.Widget;
/**
* Tests TreeViewer's support for multiple equal elements ().
*
* @since 3.2
*/
public class MultipleEqualElementsTreeViewerTest extends TreeViewerTest {
private TestElement element_2;
private TestElement element_2_1;
private TestElement element_2_1_2;
private TestElement element_1;
private TestElement element_1_3;
private TreePath treePath_1_2_21_212;
private TreePath treePath_1_21_212;
private TreePath treePath_1_212;
private TreePath treePath_2_21_212;
private TreePath treePath_1;
private TreePath treePath_1_21;
private TreePath treePath_2_21;
private TreePath treePath_1_2_21;
private TreePath treePath_1_2;
private TreePath treePath_2;
public MultipleEqualElementsTreeViewerTest(String name) {
super(name);
}
public TreeViewer getTreeViewer() {
return (TreeViewer) fViewer;
}
protected void setUpModel() {
/*
* - fRootElement
* |+element_0
* |-element_1
* ||+element_1_0
* ||+element_1_1
* ||+element_1_2
* ||+element_1_3
* ||+element_1_4
* ||+element_1_5
* ||+element_1_6
* ||+element_1_7
* ||+element_1_8
* ||+element_1_9
* ||+element_2
* ||+element_2_1
* ||+element_2_1_2
* |-element_2
* ||+element_2_0
* ||-element_2_1
* |||+element_2_1_0
* |||+element_2_1_1
* |||+element_2_1_2
* |||+element_2_1_3
* |||+element_2_1_4
* |||+element_2_1_5
* |||+element_2_1_6
* |||+element_2_1_7
* |||+element_2_1_8
* |||+element_2_1_9
* ||+element_2_2
* ||+element_2_3
* ||+element_2_4
* ||+element_2_5
* ||+element_2_6
* ||+element_2_7
* ||+element_2_8
* ||+element_2_9
* |+element_3
* |+element_4
* |+element_5
* |+element_6
* |+element_7
* |+element_8
* |+element_9
*/
fRootElement = TestElement.createModel(3, 10);
element_2 = fRootElement.getChildAt(2);
element_2_1 = element_2.getChildAt(1);
element_2_1_2 = element_2_1.getChildAt(2);
element_1 = fRootElement.getChildAt(1);
element_1_3 = element_1.getChildAt(1);
element_1.addChild(element_2, null);
element_1.addChild(element_2_1, null);
element_1.addChild(element_2_1_2, null);
treePath_1_2_21_212 = new TreePath(new Object[] { element_1, element_2,
element_2_1, element_2_1_2 });
treePath_1_2_21 = new TreePath(new Object[] { element_1, element_2,
element_2_1 });
treePath_1 = new TreePath(new Object[] { element_1 });
treePath_2 = new TreePath(new Object[] { element_2 });
treePath_1_2 = new TreePath(new Object[] { element_1, element_2 });
treePath_1_21 = new TreePath(new Object[] { element_1, element_2_1 });
treePath_1_21_212 = new TreePath(new Object[] { element_1, element_2_1,
element_2_1_2 });
treePath_1_212 = new TreePath(new Object[] { element_1, element_2_1_2 });
treePath_2_21_212 = new TreePath(new Object[] { element_2, element_2_1,
element_2_1_2 });
treePath_2_21 = new TreePath(new Object[] { element_2, element_2_1 });
fModel = fRootElement.getModel();
}
public void testElementMap() {
getTreeViewer().expandToLevel(element_1, AbstractTreeViewer.ALL_LEVELS);
getTreeViewer().expandToLevel(element_2, AbstractTreeViewer.ALL_LEVELS);
assertEquals(1, getTreeViewer().testFindItems(element_1).length);
assertEquals(2, getTreeViewer().testFindItems(element_2).length);
assertEquals(3, getTreeViewer().testFindItems(element_2_1).length);
assertEquals(4, getTreeViewer().testFindItems(element_2_1_2).length);
}
public void testSelection() {
getTreeViewer().expandToLevel(element_1, AbstractTreeViewer.ALL_LEVELS);
getTreeViewer().expandToLevel(element_2, AbstractTreeViewer.ALL_LEVELS);
getTreeViewer().setSelection(new StructuredSelection(element_1_3));
ISelection selection = getTreeViewer().getSelection();
assertTrue(selection instanceof ITreeSelection);
ITreeSelection treeSelection = (ITreeSelection) selection;
assertEquals(new TreeSelection(new TreePath(new Object[] { element_1,
element_1_3 }), null), treeSelection);
Widget[] items = getTreeViewer().testFindItems(element_2_1_2);
TreeItem[] treeItems = new TreeItem[items.length];
System.arraycopy(items, 0, treeItems, 0, items.length);
assertEquals(4, treeItems.length);
for (int i = 0; i < treeItems.length; i++) {
assertNotNull(treeItems[i]);
}
getTreeViewer().getTree().setSelection(treeItems);
treeSelection = (ITreeSelection) getTreeViewer().getSelection();
List paths = Arrays.asList(treeSelection.getPaths());
assertEquals(4, paths.size());
assertTrue(paths.contains(treePath_1_2_21_212));
assertTrue(paths.contains(treePath_1_21_212));
assertTrue(paths.contains(treePath_1_212));
assertTrue(paths.contains(treePath_2_21_212));
getTreeViewer().setSelection(
new TreeSelection(new TreePath[] { treePath_2_21_212 }, null));
assertEquals(1, getTreeViewer().getTree().getSelectionCount());
assertMatchingPath(treePath_2_21_212, getTreeViewer().getTree()
.getSelection()[0]);
}
public void testExpansion() {
getTreeViewer().expandToLevel(treePath_1_21_212, 1);
assertEqualsArray("element expansion", new Object[] { element_1,
element_2_1 }, getTreeViewer().getExpandedElements());
assertEqualsArray("path expansion", new Object[] { treePath_1,
treePath_1_21 }, getTreeViewer().getExpandedTreePaths());
getTreeViewer().setExpandedTreePaths(
new TreePath[] { treePath_1, treePath_1_2, treePath_1_2_21, treePath_2, treePath_2_21 });
assertEqualsArray("path expansion", new Object[] { treePath_1, treePath_1_2, treePath_1_2_21, treePath_2, treePath_2_21 }, getTreeViewer().getExpandedTreePaths());
}
private void assertMatchingPath(TreePath expectedPath, TreeItem item) {
for (int i = expectedPath.getSegmentCount() - 1; i >= 0; i--) {
assertNotNull(item);
assertEquals(expectedPath.getSegment(i), item.getData());
item = item.getParentItem();
}
assertNull(item);
}
public void testUpdate() {
// materialize
getTreeViewer().setExpandedTreePaths(
new TreePath[] { treePath_1_2_21, treePath_2_21 });
Widget[] items = getTreeViewer().testFindItems(element_2_1);
for (int i = 0; i < items.length; i++) {
assertEquals("0-2-1 name-1", ((TreeItem) items[i]).getText());
}
element_2_1.setLabel("billy");
// the setLabel call fires a change event which results in a call like this:
// getTreeViewer().update(element_2_1, null);
for (int i = 0; i < items.length; i++) {
assertEquals("0-2-1 billy", ((TreeItem) items[i]).getText());
}
}
public void testAddWithoutMaterialize() {
TestElement newElement = element_2.addChild(TestModelChange.INSERT);
getTreeViewer().setExpandedTreePaths(
new TreePath[] { treePath_1_2_21, treePath_2_21 });
Widget[] items = getTreeViewer().testFindItems(newElement);
assertEquals(2, items.length);
}
public void testAddAfterMaterialize() {
// materialize before adding
getTreeViewer().setExpandedTreePaths(
new TreePath[] { treePath_1_2_21, treePath_2_21 });
TestElement newElement = element_2.addChild(TestModelChange.INSERT);
getTreeViewer().setExpandedTreePaths(
new TreePath[] { treePath_1_2_21, treePath_2_21 });
Widget[] items = getTreeViewer().testFindItems(newElement);
assertEquals(2, items.length);
}
public void testRemoveWithParentAfterMaterialize() {
// materialize
getTreeViewer().expandToLevel(element_1, AbstractTreeViewer.ALL_LEVELS);
getTreeViewer().expandToLevel(element_2, AbstractTreeViewer.ALL_LEVELS);
element_2.basicDeleteChild(element_2_1);
getTreeViewer().remove(element_2, new Object[]{element_2_1});
assertEquals(2, getTreeViewer().testFindItems(element_2).length);
assertEquals(1, getTreeViewer().testFindItems(element_2_1).length);
assertEquals(2, getTreeViewer().testFindItems(element_2_1_2).length);
}
public void testRemoveWithParentBeforeMaterialize() {
element_2.basicDeleteChild(element_2_1);
getTreeViewer().remove(element_2, new Object[]{element_2_1});
// materialize
getTreeViewer().expandToLevel(element_1, AbstractTreeViewer.ALL_LEVELS);
getTreeViewer().expandToLevel(element_2, AbstractTreeViewer.ALL_LEVELS);
assertEquals(2, getTreeViewer().testFindItems(element_2).length);
assertEquals(1, getTreeViewer().testFindItems(element_2_1).length);
assertEquals(2, getTreeViewer().testFindItems(element_2_1_2).length);
}
}