blob: 8fb9b5d7ddb8b0d58e3665108de4fc1a1da82197 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2012, 2020 Original authors 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:
* Original authors and others - initial API and implementation
* Roman Flueckiger <rflueckiger@inventage.com> - Bug 459582
******************************************************************************/
package org.eclipse.nebula.widgets.nattable.columnChooser.gui;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.eclipse.nebula.widgets.nattable.columnChooser.ColumnEntry;
import org.eclipse.nebula.widgets.nattable.columnChooser.ColumnGroupEntry;
import org.eclipse.nebula.widgets.nattable.columnChooser.ISelectionTreeListener;
import org.eclipse.nebula.widgets.nattable.group.ColumnGroupModel;
import org.eclipse.nebula.widgets.nattable.selection.SelectionLayer.MoveDirectionEnum;
import org.eclipse.nebula.widgets.nattable.test.fixture.group.ColumnGroupModelFixture;
import org.eclipse.nebula.widgets.nattable.util.ArrayUtil;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.TreeItem;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
public class ColumnChooserDialogTest {
ColumnEntry entry1 = new ColumnEntry("one", 1, 1);
ColumnEntry entry2 = new ColumnEntry("Two", 2, 2);
ColumnEntry entry3 = new ColumnEntry("Three", 3, 3);
ColumnEntry entry4 = new ColumnEntry("Four", 4, 4);
ColumnEntry entry5 = new ColumnEntry("Five", 5, 5);
ColumnEntry entry6 = new ColumnEntry("Six", 6, 6);
ColumnEntry entry7 = new ColumnEntry("Seven", 7, 7);
ColumnEntry entry8 = new ColumnEntry("Eight", 8, 8);
ColumnEntry entry9 = new ColumnEntry("Nine", 9, 9);
ColumnEntry entry10 = new ColumnEntry("Ten", 10, 10);
List<ColumnEntry> visibleEntries = Arrays.asList(this.entry1, this.entry2, this.entry3,
this.entry4, this.entry5, this.entry6, this.entry7, this.entry8, this.entry9, this.entry10);
/*
* Leaf index 0 1 2 3 4 5 6 7 8 Col Index 0 1 2 3 4 5 6 7 8 9 10 11 12
* -------------------------------------------------------------------------
* |<- G1 ->| |<-- G2 -->| |<--- G3 --->|
*/
ColumnGroupModel columnGroupModel = new ColumnGroupModelFixture();
private Shell shell;
private ColumnChooserDialog testDialog;
private TestTreeListener testListener;
@Before
public void setup() {
this.shell = new Shell();
this.testDialog = new ColumnChooserDialog(this.shell, "", "");
this.testDialog.createDialogArea(this.shell);
this.testListener = new TestTreeListener();
this.testDialog.addListener(this.testListener);
this.testDialog.populateSelectedTree(this.visibleEntries, this.columnGroupModel);
}
@After
public void tearDown() {
this.testDialog.close();
this.shell.dispose();
}
@Ignore
public void singleColumnMovedDown() throws Exception {
this.testDialog.setSelectionIncludingNested(Arrays.asList(2));
this.testDialog.moveSelectedDown();
List<List<Integer>> fromPositions = this.testListener.fromPositions;
Assert.assertEquals(1, fromPositions.size());
Assert.assertEquals(2, fromPositions.get(0));
}
@Test
public void setSelection() throws Exception {
this.testDialog.setSelection(this.testDialog.getSelectedTree(),
Arrays.asList(0, 1, 2));
List<TreeItem> selectedLeaves = ArrayUtil.asList(this.testDialog
.getSelectedTree().getSelection());
Assert.assertEquals(3, selectedLeaves.size());
Assert.assertEquals("G1", selectedLeaves.get(0).getText());
Assert.assertEquals(this.entry2.getLabel(), selectedLeaves.get(1).getText());
Assert.assertEquals("G2", selectedLeaves.get(2).getText());
}
@Test
public void getIndexesOfSelectedLeaves() throws Exception {
this.testDialog.setSelection(this.testDialog.getSelectedTree(),
Arrays.asList(0, 1, 2));
List<Integer> indexesOfSelectedLeaves = this.testDialog
.getIndexesOfSelectedLeaves(this.testDialog.getSelectedTree());
Assert.assertEquals(3, indexesOfSelectedLeaves.size());
Assert.assertEquals(0, indexesOfSelectedLeaves.get(0).intValue());
Assert.assertEquals(1, indexesOfSelectedLeaves.get(1).intValue());
Assert.assertEquals(2, indexesOfSelectedLeaves.get(2).intValue());
}
@Test
public void populateTree() throws Exception {
this.columnGroupModel.getColumnGroupByIndex(0).toggleCollapsed();
Assert.assertEquals(9, this.testDialog.getSelectedTree().getItemCount());
TreeItem item = this.testDialog.getSelectedTree().getItem(0);
Assert.assertTrue(item.getData() instanceof ColumnGroupEntry);
item = this.testDialog.getSelectedTree().getItem(1);
Assert.assertTrue(item.getData() instanceof ColumnEntry);
item = this.testDialog.getSelectedTree().getItem(2);
Assert.assertTrue(item.getData() instanceof ColumnGroupEntry);
}
@Test
public void moveSelectedToTop() {
// given
ColumnChooserDialogTestHelper helper = createColumnChooserDialogTestHelper("", "0:0,1:1,2:2");
// when
helper.getDialog().setSelection(helper.getDialog().getSelectedTree(), Arrays.asList(2));
helper.getDialog().moveSelectedToTop();
// then
Assert.assertEquals((Integer) 2, helper.getListener().fromPositions.get(0).get(0));
Assert.assertEquals((Integer) 0, helper.getListener().toPositions.get(0));
}
@Test
public void moveSelectedToTop_withFirstItemRemovedFromSelectedTree() {
// given
ColumnChooserDialogTestHelper helper = createColumnChooserDialogTestHelper("-1:0", "0:1,1:2");
// when
helper.getDialog().setSelection(helper.getDialog().getSelectedTree(), Arrays.asList(1));
helper.getDialog().moveSelectedToTop();
// then
Assert.assertEquals((Integer) 1, helper.getListener().fromPositions.get(0).get(0));
Assert.assertEquals((Integer) 0, helper.getListener().toPositions.get(0));
}
@Test
public void moveSelectedToTop_withFirstItemNotVisible() {
// given
ColumnChooserDialogTestHelper helper = createColumnChooserDialogTestHelper("", "1:1,2:2");
// when
helper.getDialog().setSelection(helper.getDialog().getSelectedTree(), Arrays.asList(1));
helper.getDialog().moveSelectedToTop();
// then
Assert.assertEquals((Integer) 2, helper.getListener().fromPositions.get(0).get(0));
Assert.assertEquals((Integer) 1, helper.getListener().toPositions.get(0));
}
@Test
public void moveSelectedToTop_withColumnGroups() {
// given
ColumnChooserDialogTestHelper helper = createColumnChooserDialogTestHelper("", "0:0,1:1,2:2,3:3,4:4,5:5", "(0,1)", "(2,3)", "(4,5)");
// when
helper.getDialog().setSelection(helper.getDialog().getSelectedTree(), Arrays.asList(1));
helper.getDialog().moveSelectedToTop();
// then
Assert.assertEquals((Integer) 2, helper.getListener().fromPositions.get(0).get(0));
Assert.assertEquals((Integer) 3, helper.getListener().fromPositions.get(0).get(1));
Assert.assertEquals((Integer) 0, helper.getListener().toPositions.get(0));
}
@Test
public void moveSelectedToTop_withFirstColumnGroupRemovedFromSelectedTree() {
// given
ColumnChooserDialogTestHelper helper = createColumnChooserDialogTestHelper("-1:0,-1:1", "0:2,1:3,2:4,3:5", "(0,1)", "(2,3)", "(4,5)");
// when
helper.getDialog().setSelection(helper.getDialog().getSelectedTree(), Arrays.asList(1));
helper.getDialog().moveSelectedToTop();
// then
Assert.assertEquals((Integer) 2, helper.getListener().fromPositions.get(0).get(0));
Assert.assertEquals((Integer) 3, helper.getListener().fromPositions.get(0).get(1));
Assert.assertEquals((Integer) 0, helper.getListener().toPositions.get(0));
}
@Test
public void moveSelectedToTop_withFirstColumnGroupNotVisible() {
// given
ColumnChooserDialogTestHelper helper = createColumnChooserDialogTestHelper("", "2:2,3:3,4:4,5:5", "(0,1)", "(2,3)", "(4,5)");
// when
helper.getDialog().setSelection(helper.getDialog().getSelectedTree(), Arrays.asList(1));
helper.getDialog().moveSelectedToTop();
// then
Assert.assertEquals((Integer) 4, helper.getListener().fromPositions.get(0).get(0));
Assert.assertEquals((Integer) 5, helper.getListener().fromPositions.get(0).get(1));
Assert.assertEquals((Integer) 2, helper.getListener().toPositions.get(0));
}
@Test
public void moveSelectedToBottom() {
// given
ColumnChooserDialogTestHelper helper = createColumnChooserDialogTestHelper("", "0:0,1:1,2:2");
// when
helper.getDialog().setSelection(helper.getDialog().getSelectedTree(), Arrays.asList(0));
helper.getDialog().moveSelectedToBottom();
// then
Assert.assertEquals((Integer) 0, helper.getListener().fromPositions.get(0).get(0));
Assert.assertEquals((Integer) 2, helper.getListener().toPositions.get(0));
}
@Test
public void moveSelectedToBottom_withFirstItemRemovedFromSelectedTree() {
// given
ColumnChooserDialogTestHelper helper = createColumnChooserDialogTestHelper("-1:0", "0:1,1:2");
// when
helper.getDialog().setSelection(helper.getDialog().getSelectedTree(), Arrays.asList(0));
helper.getDialog().moveSelectedToBottom();
// then
Assert.assertEquals((Integer) 0, helper.getListener().fromPositions.get(0).get(0));
Assert.assertEquals((Integer) 1, helper.getListener().toPositions.get(0));
}
@Test
public void moveSelectedToBottom_withFirstItemNotVisible() {
// given
ColumnChooserDialogTestHelper helper = createColumnChooserDialogTestHelper("", "1:1,2:2");
// when
helper.getDialog().setSelection(helper.getDialog().getSelectedTree(), Arrays.asList(0));
helper.getDialog().moveSelectedToBottom();
// then
Assert.assertEquals((Integer) 1, helper.getListener().fromPositions.get(0).get(0));
Assert.assertEquals((Integer) 2, helper.getListener().toPositions.get(0));
}
@Test
public void moveSelectedToBottom_withColumnGroups() {
// given
ColumnChooserDialogTestHelper helper = createColumnChooserDialogTestHelper("", "0:0,1:1,2:2,3:3,4:4,5:5", "(0,1)", "(2,3)", "(4,5)");
// when
helper.getDialog().setSelection(helper.getDialog().getSelectedTree(), Arrays.asList(0));
helper.getDialog().moveSelectedToBottom();
// then
Assert.assertEquals((Integer) 0, helper.getListener().fromPositions.get(0).get(0));
Assert.assertEquals((Integer) 1, helper.getListener().fromPositions.get(0).get(1));
Assert.assertEquals((Integer) 5, helper.getListener().toPositions.get(0));
}
@Test
public void moveSelectedToBottom_withFirstColumnGroupRemovedFromSelectedTree() {
// given
ColumnChooserDialogTestHelper helper = createColumnChooserDialogTestHelper("-1:0,-1:1", "0:2,1:3,2:4,3:5", "(0,1)", "(2,3)", "(4,5)");
// when
helper.getDialog().setSelection(helper.getDialog().getSelectedTree(), Arrays.asList(0));
helper.getDialog().moveSelectedToBottom();
// then
Assert.assertEquals((Integer) 0, helper.getListener().fromPositions.get(0).get(0));
Assert.assertEquals((Integer) 1, helper.getListener().fromPositions.get(0).get(1));
Assert.assertEquals((Integer) 3, helper.getListener().toPositions.get(0));
}
@Test
public void moveSelectedToBottom_withFirstColumnGroupNotVisible() {
// given
ColumnChooserDialogTestHelper helper = createColumnChooserDialogTestHelper("", "2:2,3:3,4:4,5:5", "(0,1)", "(2,3)", "(4,5)");
// when
helper.getDialog().setSelection(helper.getDialog().getSelectedTree(), Arrays.asList(0));
helper.getDialog().moveSelectedToBottom();
// then
Assert.assertEquals((Integer) 2, helper.getListener().fromPositions.get(0).get(0));
Assert.assertEquals((Integer) 3, helper.getListener().fromPositions.get(0).get(1));
Assert.assertEquals((Integer) 5, helper.getListener().toPositions.get(0));
}
/**
* item string format: position:index{,position:index}* --> e.g.
* 0:0,1:1,2:2<br>
* column group string format: (index{,index}*) --> e.g. (0,1)<br>
*
* @param availableItems
* the column entries in the list of available columns.
* @param selectedItems
* the column entries in the list of selected columns.
* @param columnGroups
* the column groups.
* @return a helper class giving access to an instance of a
* {@link ColumnChooserDialog} parameterized as defined.
*/
private ColumnChooserDialogTestHelper createColumnChooserDialogTestHelper(String availableItems, String selectedItems, String... columnGroups) {
Shell shell = new Shell();
ColumnChooserDialog dialog = new ColumnChooserDialog(shell, "", "");
dialog.createDialogArea(shell);
List<ColumnEntry> availableEntries = parseEntryString(availableItems);
List<ColumnEntry> visibleEntries = parseEntryString(selectedItems);
ColumnGroupModel columnGroupModel = parseColumnGroups(columnGroups);
dialog.populateAvailableTree(availableEntries, columnGroupModel);
dialog.populateSelectedTree(visibleEntries, columnGroupModel);
TestTreeListener listener = new TestTreeListener();
dialog.addListener(listener);
return new ColumnChooserDialogTestHelper(dialog, listener);
}
private static List<ColumnEntry> parseEntryString(String entryString) {
List<ColumnEntry> result = new ArrayList<ColumnEntry>();
if (!entryString.isEmpty()) {
String[] entries = entryString.split(",");
for (String entry : entries) {
String[] values = entry.split(":");
int position = Integer.valueOf(values[0]);
int index = Integer.valueOf(values[1]);
result.add(new ColumnEntry("Column " + index, index, position));
}
}
return result;
}
private static ColumnGroupModel parseColumnGroups(String[] columnGroups) {
ColumnGroupModel columnGroupModel = new ColumnGroupModel();
if (columnGroups != null) {
for (int i = 0; i < columnGroups.length; i++) {
String columnGroup = columnGroups[i];
String[] indexes = columnGroup.substring(1, columnGroup.length() - 1).split(",");
int[] columnIndexes = new int[indexes.length];
for (int j = 0; j < indexes.length; j++) {
columnIndexes[j] = Integer.valueOf(indexes[j]);
}
columnGroupModel.addColumnsIndexesToGroup("Column Group " + i, columnIndexes);
}
}
return columnGroupModel;
}
private class ColumnChooserDialogTestHelper {
private ColumnChooserDialog dialog;
private TestTreeListener listener;
public ColumnChooserDialogTestHelper(ColumnChooserDialog dialog, TestTreeListener listener) {
this.dialog = dialog;
this.listener = listener;
}
public ColumnChooserDialog getDialog() {
return this.dialog;
}
public TestTreeListener getListener() {
return this.listener;
}
}
class TestTreeListener implements ISelectionTreeListener {
List<ColumnEntry> entriesRemoved;
List<ColumnEntry> entriesAdded;
List<List<Integer>> fromPositions;
List<Integer> toPositions;
@Override
public void itemsRemoved(List<ColumnEntry> removedItems) {
this.entriesRemoved = removedItems;
}
@Override
public void itemsSelected(List<ColumnEntry> addedItems) {
this.entriesAdded = addedItems;
}
@Override
public void itemsCollapsed(ColumnGroupEntry columnGroupEntry) {
}
@Override
public void itemsExpanded(ColumnGroupEntry columnGroupEntry) {
}
public void itemsMoved(
List<ColumnGroupEntry> selectedColumnGroupEntries,
List<ColumnEntry> movedColumnEntries,
List<List<Integer>> fromPositions, List<Integer> toPositions) {
}
@Override
public void itemsMoved(MoveDirectionEnum direction,
List<ColumnGroupEntry> selectedColumnGroupEntries,
List<ColumnEntry> movedColumnEntries,
List<List<Integer>> fromPositions, List<Integer> toPositions) {
this.fromPositions = fromPositions;
this.toPositions = toPositions;
}
}
}