| /******************************************************************************* |
| * Copyright (c) 2000, 2007 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 |
| * Tom Schindl - bug 151205, 170381 |
| *******************************************************************************/ |
| package org.eclipse.jface.tests.viewers; |
| |
| import java.util.Arrays; |
| import java.util.HashSet; |
| import java.util.Set; |
| |
| import org.eclipse.swt.SWT; |
| import org.eclipse.swt.widgets.Composite; |
| import org.eclipse.swt.widgets.Event; |
| import org.eclipse.swt.widgets.Listener; |
| import org.eclipse.swt.widgets.Table; |
| import org.eclipse.swt.widgets.TableItem; |
| |
| import org.eclipse.jface.viewers.IStructuredSelection; |
| import org.eclipse.jface.viewers.StructuredSelection; |
| import org.eclipse.jface.viewers.TableViewer; |
| import org.eclipse.jface.viewers.ViewerFilter; |
| |
| /** |
| * The TableViewerTest is a test of the SWT#VIRTUAL support in TableViewers, |
| */ |
| public class VirtualTableViewerTest extends TableViewerTest { |
| |
| Set visibleItems = new HashSet(); |
| |
| /** |
| * Create a new instance of the receiver. |
| * |
| * @param name |
| */ |
| public VirtualTableViewerTest(String name) { |
| super(name); |
| } |
| |
| protected int getShellStyle() { |
| return super.getShellStyle() | SWT.ON_TOP; |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.jface.tests.viewers.TableViewerTest#createTableViewer(org.eclipse.swt.widgets.Composite) |
| */ |
| protected TableViewer createTableViewer(Composite parent) { |
| visibleItems = new HashSet(); |
| TableViewer viewer = new TableViewer(parent, SWT.VIRTUAL | SWT.MULTI); |
| viewer.setUseHashlookup(true); |
| final Table table = viewer.getTable(); |
| table.addListener(SWT.SetData, new Listener() { |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.swt.widgets.Listener#handleEvent(org.eclipse.swt.widgets.Event) |
| */ |
| public void handleEvent(Event event) { |
| TableItem item = (TableItem) event.item; |
| visibleItems.add(item); |
| } |
| }); |
| return viewer; |
| } |
| |
| /** |
| * Get the collection of currently visible table items. |
| * |
| * @return TableItem[] |
| */ |
| private TableItem[] getVisibleItems() { |
| return (TableItem[]) visibleItems.toArray(new TableItem[visibleItems.size()]); |
| } |
| |
| public void testElementsCreated() { |
| |
| TableItem[] items = getVisibleItems(); |
| |
| for (int i = 0; i < items.length; i++) { |
| TableItem item = items[i]; |
| assertTrue("Missing data in item " + String.valueOf(i) + " of " + items.length, item |
| .getData() instanceof TestElement); |
| } |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.jface.tests.viewers.TableViewerTest#getItemCount() |
| */ |
| protected int getItemCount() { |
| return getVisibleItems().length; |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.jface.tests.viewers.StructuredViewerTest#testFilter() |
| */ |
| public void testFilter() { |
| ViewerFilter filter = new TestLabelFilter(); |
| |
| visibleItems = new HashSet(); |
| fViewer.addFilter(filter); |
| ((TableViewer) fViewer).getControl().update(); |
| assertEquals("filtered count", 5, getItemCount()); |
| |
| visibleItems = new HashSet(); |
| fViewer.removeFilter(filter); |
| ((TableViewer) fViewer).getControl().update(); |
| assertEquals("unfiltered count", 10, getItemCount()); |
| } |
| |
| public void testSetFilters() { |
| ViewerFilter filter = new TestLabelFilter(); |
| |
| visibleItems = new HashSet(); |
| fViewer.setFilters(new ViewerFilter[] { filter, new TestLabelFilter2() }); |
| ((TableViewer) fViewer).getControl().update(); |
| assertEquals("2 filters count",1, getItemCount()); |
| |
| visibleItems = new HashSet(); |
| fViewer.setFilters(new ViewerFilter[] { filter }); |
| ((TableViewer) fViewer).getControl().update(); |
| assertEquals("1 filtered count",5, getItemCount()); |
| |
| visibleItems = new HashSet(); |
| fViewer.setFilters(new ViewerFilter[0]); |
| ((TableViewer) fViewer).getControl().update(); |
| assertEquals("unfiltered count",10, getItemCount()); |
| } |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.jface.tests.viewers.StructuredViewerTest#testInsertSibling() |
| */ |
| public void testInsertSibling() { |
| // This test is no use here as it is |
| // based on the assumption that all items |
| // are created. |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.jface.tests.viewers.StructuredViewerTest#testInsertSiblingReveal() |
| */ |
| public void testInsertSiblingReveal() { |
| // This test is no use here as it is |
| // based on the assumption that all items |
| // are created. |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.jface.tests.viewers.StructuredViewerTest#testInsertSiblings() |
| */ |
| public void testInsertSiblings() { |
| // This test is no use here as it is |
| // based on the assumption that all items |
| // are created. |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.jface.tests.viewers.StructuredViewerTest#testInsertSiblingWithFilterFiltered() |
| */ |
| public void testInsertSiblingWithFilterFiltered() { |
| // This test is no use here as it is |
| // based on the assumption that all items |
| // are created. |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.jface.tests.viewers.StructuredViewerTest#testInsertSiblingWithFilterNotFiltered() |
| */ |
| public void testInsertSiblingWithFilterNotFiltered() { |
| // This test is no use here as it is |
| // based on the assumption that all items |
| // are created. |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.jface.tests.viewers.StructuredViewerTest#testInsertSiblingWithSorter() |
| */ |
| public void testInsertSiblingWithSorter() { |
| // This test is no use here as it is |
| // based on the assumption that all items |
| // are created. |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.jface.tests.viewers.StructuredViewerTest#testRenameWithFilter() |
| */ |
| public void testRenameWithFilter() { |
| fViewer.addFilter(new TestLabelFilter()); |
| ((TableViewer) fViewer).getControl().update(); |
| TestElement first = fRootElement.getFirstChild(); |
| first.setLabel("name-1111"); // should disappear |
| ((TableViewer) fViewer).getControl().update(); |
| assertNull("changed sibling is not visible", fViewer |
| .testFindItem(first)); |
| first.setLabel("name-2222"); // should reappear |
| fViewer.refresh(); |
| ((TableViewer) fViewer).getControl().update(); |
| assertNotNull("changed sibling is not visible", fViewer |
| .testFindItem(first)); |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.jface.tests.viewers.StructuredViewerTest#testSetInput() |
| */ |
| public void testSetInput() { |
| // This test us based on findItem assuming all items |
| // are created so it is not valid. |
| } |
| |
| public void testRenameWithSorter() { |
| // Call update to make sure the viewer is in a correct state |
| // At least on MacOSX I get failures without this call |
| ((TableViewer) fViewer).getControl().update(); |
| fViewer.setSorter(new TestLabelSorter()); |
| TestElement first = fRootElement.getFirstChild(); |
| first.setLabel("name-9999"); |
| String newElementLabel = first.toString(); |
| ((TableViewer) fViewer).getControl().update(); |
| assertEquals("sorted first", newElementLabel, getItemText(0)); |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.jface.tests.viewers.StructuredViewerTest#testSorter() |
| */ |
| public void testSorter() { |
| TestElement first = fRootElement.getFirstChild(); |
| TestElement last = fRootElement.getLastChild(); |
| |
| String firstLabel = first.toString(); |
| String lastLabel = last.toString(); |
| |
| ((TableViewer) fViewer).getControl().update(); |
| assertEquals("unsorted", firstLabel, getItemText(0)); |
| fViewer.setSorter(new TestLabelSorter()); |
| |
| ((TableViewer) fViewer).getControl().update(); |
| assertEquals("reverse sorted", lastLabel, getItemText(0)); |
| |
| fViewer.setSorter(null); |
| ((TableViewer) fViewer).getControl().update(); |
| assertEquals("unsorted", firstLabel, getItemText(0)); |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.jface.tests.viewers.StructuredViewerTest#testInsertSiblingSelectExpanded() |
| */ |
| public void testInsertSiblingSelectExpanded() { |
| // This test is no use here as it is |
| // based on the assumption that all items |
| // are created. |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.jface.tests.viewers.StructuredViewerTest#testSomeChildrenChanged() |
| */ |
| public void testSomeChildrenChanged() { |
| // This test is no use here as it is |
| // based on the assumption that all items |
| // are created. |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.jface.tests.viewers.StructuredViewerTest#testWorldChanged() |
| */ |
| public void testWorldChanged() { |
| // This test is no use here as it is |
| // based on the assumption that all items |
| // are created. |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.jface.tests.viewers.StructuredViewerTest#testDeleteSibling() |
| */ |
| public void testDeleteSibling() { |
| //Force creation of the item first |
| ((TableViewer) fViewer).getTable().getItem(0).getText(); |
| super.testDeleteSibling(); |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.jface.tests.viewers.StructuredViewerTest#testSetSelection() |
| */ |
| public void testSetSelection() { |
| //Force creation of the item first |
| ((TableViewer) fViewer).getTable().getItem(0).getText(); |
| super.testSetSelection(); |
| } |
| |
| /** |
| * Test selecting all elements. |
| */ |
| public void testSetAllSelection() { |
| TestElement[] children = fRootElement.getChildren(); |
| StructuredSelection selection = new StructuredSelection(children); |
| fViewer.setSelection(selection); |
| IStructuredSelection result = (IStructuredSelection) fViewer |
| .getSelection(); |
| assertTrue("Size was " + String.valueOf(result.size()) + " expected " |
| + String.valueOf(children.length), |
| (result.size() == children.length)); |
| Set childrenSet = new HashSet(Arrays.asList(children)); |
| Set selectedSet = new HashSet(result.toList()); |
| assertTrue("Elements do not match ", childrenSet.equals(selectedSet)); |
| } |
| } |