/* * Copyright 2010 The Rabbit Eclipse Plug-in Project * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package rabbit.ui.internal.viewers; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.nullValue; import static org.hamcrest.CoreMatchers.sameInstance; import static org.junit.Assert.assertThat; import org.eclipse.jface.viewers.TreePath; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Tree; import org.eclipse.swt.widgets.TreeColumn; import org.eclipse.ui.PlatformUI; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; /** * @see TreeViewerColumnSorter */ public class TreeViewerColumnSorterTest { /** * Shell for creating additional viewers for testing, must not reassign this * variable. */ protected static Shell shell; @BeforeClass public static void beforeClass() { shell = new Shell(PlatformUI.getWorkbench().getDisplay()); } @AfterClass public static void afterClass() { shell.dispose(); } @Test(expected = NullPointerException.class) public void testConstructor_null() throws Exception { create(null); } @Test public void getViewerShouldReturnTheSameViewer() throws Exception { TreeViewer viewer = new TreeViewer(shell); assertThat(create(viewer).getViewer(), sameInstance(viewer)); } @Test public void getSelectedColumnShouldReturnTheRightColumn() { TreeViewerColumnSorter sorter = create(new TreeViewer(shell)); assertThat(sorter.getSelectedColumn(), nullValue()); TreeColumn column = new TreeColumn(sorter.getViewer().getTree(), SWT.NONE); Event event = new Event(); event.widget = column; SelectionEvent selectionEvent = new SelectionEvent(event); sorter.widgetSelected(selectionEvent); assertThat(sorter.getSelectedColumn(), sameInstance(column)); } /** * Test that when a column is clicked, the sort indicator is updated on the * column. */ @Test public void shouldUpdateTheSortIndicationOnTheColumnHeader() { TreeViewerColumnSorter sorter = create(new TreeViewer(shell)); assertThat(sorter.getSelectedColumn(), nullValue()); TreeColumn column = new TreeColumn(sorter.getViewer().getTree(), SWT.NONE); Event event = new Event(); event.widget = column; SelectionEvent selectionEvent = new SelectionEvent(event); sorter.widgetSelected(selectionEvent); Tree tree = sorter.getViewer().getTree(); assertThat(tree.getSortColumn(), is(column)); assertThat(tree.getSortDirection(), is(SWT.UP)); sorter.widgetSelected(selectionEvent); assertThat(tree.getSortColumn(), is(column)); assertThat(tree.getSortDirection(), is(SWT.DOWN)); } /** * Creates a viewer sorter for testing. Subclass should create a sorter using * the argument directly <strong>without</strong> checking for null. * * @param viewer The viewer. * @return A viewer sorter for testing. */ protected TreeViewerColumnSorter create(TreeViewer viewer) { return new TreeViewerColumnSorter(viewer) { @Override protected int doCompare(Viewer v, TreePath path, Object e1, Object e2) { return 0; } }; } }