/* * 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.junit.Assert.assertThat; import static org.mockito.BDDMockito.given; import static org.mockito.Matchers.any; import static org.mockito.Mockito.mock; import org.eclipse.jface.viewers.ILabelProvider; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Tree; import org.eclipse.swt.widgets.TreeColumn; import org.junit.Test; /** * @see TreeViewerColumnLabelSorter */ public final class TreeViewerColumnLabelSorterTest extends TreeViewerColumnSorterTest { /** * Test when a column is clicked, the items in the viewer are sorted. */ @Test public void shouldSortItemsAccordingToTheirLabelsWhenTheColumnIsSelected() { Object bigger = "b"; Object smaller = "a"; ITreeContentProvider contentProvider = mock(ITreeContentProvider.class); given(contentProvider.getElements(any())) .willReturn(new Object[]{bigger, smaller}); ILabelProvider labelProvider = new LabelProvider(); TreeViewer viewer = new TreeViewer(shell); viewer.setContentProvider(contentProvider); viewer.setLabelProvider(labelProvider); TreeViewerColumnLabelSorter sorter = create(viewer, labelProvider); assertThat(sorter.getSelectedColumn(), nullValue()); Tree tree = sorter.getViewer().getTree(); TreeColumn column = new TreeColumn(tree, SWT.NONE); viewer.setInput(""); Event event = new Event(); event.widget = column; SelectionEvent selectionEvent = new SelectionEvent(event); sorter.widgetSelected(selectionEvent); assertThat(tree.getSortColumn(), is(column)); assertThat(tree.getSortDirection(), is(SWT.UP)); assertThat(tree.getItem(0).getData(), is(smaller)); assertThat(tree.getItem(1).getData(), is(bigger)); sorter.widgetSelected(selectionEvent); assertThat(tree.getSortColumn(), is(column)); assertThat(tree.getSortDirection(), is(SWT.DOWN)); assertThat(tree.getItem(0).getData(), is(bigger)); assertThat(tree.getItem(1).getData(), is(smaller)); } /** * Test when a column is clicked, the items in the viewer are sorted, if an * item's label is null, it's considered the smallest value. */ @Test public void shouldSortEmptyLabelsAsSmallest() throws Exception { Object bigger = "b"; Object smaller = ""; ITreeContentProvider contentProvider = mock(ITreeContentProvider.class); given(contentProvider.getElements(any())) .willReturn(new Object[]{bigger, smaller}); ILabelProvider labelProvider = new LabelProvider(); TreeViewer viewer = new TreeViewer(shell); viewer.setContentProvider(contentProvider); viewer.setLabelProvider(labelProvider); TreeViewerColumnLabelSorter sorter = create(viewer, labelProvider); assertThat(sorter.getSelectedColumn(), nullValue()); Tree tree = sorter.getViewer().getTree(); TreeColumn column = new TreeColumn(tree, SWT.NONE); viewer.setInput(""); Event event = new Event(); event.widget = column; SelectionEvent selectionEvent = new SelectionEvent(event); sorter.widgetSelected(selectionEvent); assertThat(tree.getSortColumn(), is(column)); assertThat(tree.getSortDirection(), is(SWT.UP)); assertThat(tree.getItem(0).getData(), is(smaller)); assertThat(tree.getItem(1).getData(), is(bigger)); sorter.widgetSelected(selectionEvent); assertThat(tree.getSortColumn(), is(column)); assertThat(tree.getSortDirection(), is(SWT.DOWN)); assertThat(tree.getItem(0).getData(), is(bigger)); assertThat(tree.getItem(1).getData(), is(smaller)); } @Override protected TreeViewerColumnLabelSorter create(TreeViewer viewer) { return new TreeViewerColumnLabelSorter(viewer, mock(ILabelProvider.class)); } protected TreeViewerColumnLabelSorter create( TreeViewer viewer, ILabelProvider provider) { return new TreeViewerColumnLabelSorter(viewer, provider); } }