blob: 83d3a9a6edeeed4b4bfeab37e2346e8b2977684e [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2019, 2020 Dirk Fauth.
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Dirk Fauth <dirk.fauth@googlemail.com> - initial API and implementation
******************************************************************************/
package org.eclipse.nebula.widgets.nattable.group.performance;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.nebula.widgets.nattable.data.ExtendedReflectiveColumnPropertyAccessor;
import org.eclipse.nebula.widgets.nattable.data.IColumnPropertyAccessor;
import org.eclipse.nebula.widgets.nattable.data.IDataProvider;
import org.eclipse.nebula.widgets.nattable.data.ListDataProvider;
import org.eclipse.nebula.widgets.nattable.dataset.person.ExtendedPersonWithAddress;
import org.eclipse.nebula.widgets.nattable.dataset.person.PersonService;
import org.eclipse.nebula.widgets.nattable.grid.command.ClientAreaResizeCommand;
import org.eclipse.nebula.widgets.nattable.grid.data.DefaultColumnHeaderDataProvider;
import org.eclipse.nebula.widgets.nattable.grid.data.DefaultCornerDataProvider;
import org.eclipse.nebula.widgets.nattable.grid.data.DefaultRowHeaderDataProvider;
import org.eclipse.nebula.widgets.nattable.grid.layer.ColumnHeaderLayer;
import org.eclipse.nebula.widgets.nattable.grid.layer.CornerLayer;
import org.eclipse.nebula.widgets.nattable.grid.layer.DefaultColumnHeaderDataLayer;
import org.eclipse.nebula.widgets.nattable.grid.layer.DefaultRowHeaderDataLayer;
import org.eclipse.nebula.widgets.nattable.grid.layer.GridLayer;
import org.eclipse.nebula.widgets.nattable.grid.layer.RowHeaderLayer;
import org.eclipse.nebula.widgets.nattable.group.RowGroupUtils;
import org.eclipse.nebula.widgets.nattable.group.performance.GroupModel.Group;
import org.eclipse.nebula.widgets.nattable.hideshow.ColumnHideShowLayer;
import org.eclipse.nebula.widgets.nattable.layer.DataLayer;
import org.eclipse.nebula.widgets.nattable.layer.ILayer;
import org.eclipse.nebula.widgets.nattable.reorder.ColumnReorderLayer;
import org.eclipse.nebula.widgets.nattable.selection.SelectionLayer;
import org.eclipse.nebula.widgets.nattable.selection.SelectionLayer.MoveDirectionEnum;
import org.eclipse.nebula.widgets.nattable.util.IClientAreaProvider;
import org.eclipse.nebula.widgets.nattable.viewport.ViewportLayer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.junit.Before;
import org.junit.Test;
public class RowGroupUtilsTest {
RowGroupHeaderLayer rowGroupHeaderLayer;
SelectionLayer selectionLayer;
GridLayer gridLayer;
@Before
public void setup() {
String[] propertyNames = {
"firstName", "lastName", "gender", "married",
"address.street", "address.housenumber", "address.postalCode", "address.city",
"age", "birthday", "money",
"description", "favouriteFood", "favouriteDrinks" };
// mapping from property to label, needed for column header labels
Map<String, String> propertyToLabelMap = new HashMap<>();
propertyToLabelMap.put("firstName", "Firstname");
propertyToLabelMap.put("lastName", "Lastname");
propertyToLabelMap.put("gender", "Gender");
propertyToLabelMap.put("married", "Married");
propertyToLabelMap.put("address.street", "Street");
propertyToLabelMap.put("address.housenumber", "Housenumber");
propertyToLabelMap.put("address.postalCode", "Postalcode");
propertyToLabelMap.put("address.city", "City");
propertyToLabelMap.put("age", "Age");
propertyToLabelMap.put("birthday", "Birthday");
propertyToLabelMap.put("money", "Money");
propertyToLabelMap.put("description", "Description");
propertyToLabelMap.put("favouriteFood", "Food");
propertyToLabelMap.put("favouriteDrinks", "Drinks");
IColumnPropertyAccessor<ExtendedPersonWithAddress> columnPropertyAccessor =
new ExtendedReflectiveColumnPropertyAccessor<>(propertyNames);
IDataProvider bodyDataProvider =
new ListDataProvider<>(
PersonService.getExtendedPersonsWithAddress(14),
columnPropertyAccessor);
DataLayer bodyDataLayer = new DataLayer(bodyDataProvider);
ColumnReorderLayer columnReorderLayer = new ColumnReorderLayer(bodyDataLayer);
ColumnHideShowLayer columnHideShowLayer = new ColumnHideShowLayer(columnReorderLayer);
ColumnGroupExpandCollapseLayer columnGroupExpandCollapseLayer = new ColumnGroupExpandCollapseLayer(columnHideShowLayer);
this.selectionLayer = new SelectionLayer(columnGroupExpandCollapseLayer);
ViewportLayer viewportLayer = new ViewportLayer(this.selectionLayer);
// build the column header layer
IDataProvider columnHeaderDataProvider = new DefaultColumnHeaderDataProvider(propertyNames, propertyToLabelMap);
DataLayer columnHeaderDataLayer = new DefaultColumnHeaderDataLayer(columnHeaderDataProvider);
ColumnHeaderLayer columnHeaderLayer = new ColumnHeaderLayer(columnHeaderDataLayer, viewportLayer, this.selectionLayer);
// build the row header layer
IDataProvider rowHeaderDataProvider = new DefaultRowHeaderDataProvider(bodyDataProvider);
DataLayer rowHeaderDataLayer = new DefaultRowHeaderDataLayer(rowHeaderDataProvider);
ILayer rowHeaderLayer = new RowHeaderLayer(rowHeaderDataLayer, viewportLayer, this.selectionLayer);
this.rowGroupHeaderLayer = new RowGroupHeaderLayer(rowHeaderLayer, this.selectionLayer);
// configure the column groups
this.rowGroupHeaderLayer.addGroup("Person", 0, 4);
this.rowGroupHeaderLayer.addGroup("Address", 4, 4);
this.rowGroupHeaderLayer.addGroup("Facts", 8, 3);
this.rowGroupHeaderLayer.addGroup("Personal", 11, 3);
// build the corner layer
IDataProvider cornerDataProvider = new DefaultCornerDataProvider(columnHeaderDataProvider, rowHeaderDataProvider);
DataLayer cornerDataLayer = new DataLayer(cornerDataProvider);
ILayer cornerLayer = new CornerLayer(cornerDataLayer, this.rowGroupHeaderLayer, columnHeaderLayer);
// build the grid layer
this.gridLayer = new GridLayer(viewportLayer, columnHeaderLayer, this.rowGroupHeaderLayer, cornerLayer);
// configure the visible area, needed for tests in scrolled state
this.gridLayer.setClientAreaProvider(new IClientAreaProvider() {
@Override
public Rectangle getClientArea() {
// 10 rows + column header should be visible
return new Rectangle(0, 0, 1010, 120);
}
});
this.gridLayer.doCommand(new ClientAreaResizeCommand(new Shell(Display.getDefault(), SWT.V_SCROLL | SWT.H_SCROLL)));
assertEquals(1, this.rowGroupHeaderLayer.getLevelCount());
}
@Test
public void shouldTestInSameGroup() {
assertTrue(RowGroupUtils.isInTheSameGroup(this.rowGroupHeaderLayer, 0, 0, 1));
assertTrue(RowGroupUtils.isInTheSameGroup(this.rowGroupHeaderLayer, 0, 0, 2));
assertTrue(RowGroupUtils.isInTheSameGroup(this.rowGroupHeaderLayer, 0, 0, 3));
assertTrue(RowGroupUtils.isInTheSameGroup(this.rowGroupHeaderLayer, 0, 0, 0));
assertTrue(RowGroupUtils.isInTheSameGroup(this.rowGroupHeaderLayer, 0, 4, 5));
assertTrue(RowGroupUtils.isInTheSameGroup(this.rowGroupHeaderLayer, 0, 4, 6));
assertTrue(RowGroupUtils.isInTheSameGroup(this.rowGroupHeaderLayer, 0, 4, 7));
assertTrue(RowGroupUtils.isInTheSameGroup(this.rowGroupHeaderLayer, 0, 4, 4));
assertTrue(RowGroupUtils.isInTheSameGroup(this.rowGroupHeaderLayer, 0, 8, 8));
assertTrue(RowGroupUtils.isInTheSameGroup(this.rowGroupHeaderLayer, 0, 8, 9));
assertTrue(RowGroupUtils.isInTheSameGroup(this.rowGroupHeaderLayer, 0, 8, 10));
assertTrue(RowGroupUtils.isInTheSameGroup(this.rowGroupHeaderLayer, 0, 11, 11));
assertTrue(RowGroupUtils.isInTheSameGroup(this.rowGroupHeaderLayer, 0, 11, 12));
assertTrue(RowGroupUtils.isInTheSameGroup(this.rowGroupHeaderLayer, 0, 11, 13));
assertFalse(RowGroupUtils.isInTheSameGroup(this.rowGroupHeaderLayer, 0, 0, 4));
assertFalse(RowGroupUtils.isInTheSameGroup(this.rowGroupHeaderLayer, 0, 0, 7));
assertFalse(RowGroupUtils.isInTheSameGroup(this.rowGroupHeaderLayer, 0, 4, 8));
}
@Test
public void shouldTestIsReorderValidWithoutUnbreakable() {
// increase the client area to show all rows
this.gridLayer.setClientAreaProvider(new IClientAreaProvider() {
@Override
public Rectangle getClientArea() {
return new Rectangle(0, 0, 1600, 250);
}
});
this.gridLayer.doCommand(new ClientAreaResizeCommand(new Shell(Display.getDefault(), SWT.V_SCROLL | SWT.H_SCROLL)));
// in same group
assertTrue(RowGroupUtils.isReorderValid(this.rowGroupHeaderLayer, 0, 4, true));
assertTrue(RowGroupUtils.isReorderValid(this.rowGroupHeaderLayer, 4, 4, true));
// to other group
assertTrue(RowGroupUtils.isReorderValid(this.rowGroupHeaderLayer, 0, 6, true));
// to start of first group
assertTrue(RowGroupUtils.isReorderValid(this.rowGroupHeaderLayer, 8, 0, true));
// to end of last group
assertTrue(RowGroupUtils.isReorderValid(this.rowGroupHeaderLayer, 0, 13, false));
}
@Test
public void shouldTestIsReorderValidWithUnbreakableFromNonGroupedRight() {
// increase the client area to show all rows
this.gridLayer.setClientAreaProvider(new IClientAreaProvider() {
@Override
public Rectangle getClientArea() {
return new Rectangle(0, 0, 1600, 250);
}
});
this.gridLayer.doCommand(new ClientAreaResizeCommand(new Shell(Display.getDefault(), SWT.V_SCROLL | SWT.H_SCROLL)));
// remove first group
this.rowGroupHeaderLayer.removeGroup(0);
// set all remaining groups unbreakable
this.rowGroupHeaderLayer.setGroupUnbreakable(4, true);
this.rowGroupHeaderLayer.setGroupUnbreakable(8, true);
this.rowGroupHeaderLayer.setGroupUnbreakable(11, true);
// reorder outside group valid
assertTrue(RowGroupUtils.isReorderValid(this.rowGroupHeaderLayer, 0, 4, true));
assertTrue(RowGroupUtils.isReorderValid(this.rowGroupHeaderLayer, 3, 4, true));
// in same group
assertTrue(RowGroupUtils.isReorderValid(this.rowGroupHeaderLayer, 6, 7, true));
assertTrue(RowGroupUtils.isReorderValid(this.rowGroupHeaderLayer, 7, 4, true));
// in same group where adjacent group is also unbreakable
assertTrue(RowGroupUtils.isReorderValid(this.rowGroupHeaderLayer, 4, 8, true));
assertTrue(RowGroupUtils.isReorderValid(this.rowGroupHeaderLayer, 10, 8, true));
// to any other group
assertFalse(RowGroupUtils.isReorderValid(this.rowGroupHeaderLayer, 3, 5, true));
assertFalse(RowGroupUtils.isReorderValid(this.rowGroupHeaderLayer, 0, 6, true));
assertFalse(RowGroupUtils.isReorderValid(this.rowGroupHeaderLayer, 1, 9, true));
assertFalse(RowGroupUtils.isReorderValid(this.rowGroupHeaderLayer, 2, 13, true));
// to start of table
assertTrue(RowGroupUtils.isReorderValid(this.rowGroupHeaderLayer, 3, 0, true));
// to end of last group
assertTrue(RowGroupUtils.isReorderValid(this.rowGroupHeaderLayer, 0, 13, false));
// between unbreakable groups
assertTrue(RowGroupUtils.isReorderValid(this.rowGroupHeaderLayer, 3, 8, true));
}
@Test
public void shouldTestIsReorderValidWithUnbreakableFromNonGroupedLeft() {
// increase the client area to show all rows
this.gridLayer.setClientAreaProvider(new IClientAreaProvider() {
@Override
public Rectangle getClientArea() {
return new Rectangle(0, 0, 1600, 250);
}
});
this.gridLayer.doCommand(new ClientAreaResizeCommand(new Shell(Display.getDefault(), SWT.V_SCROLL | SWT.H_SCROLL)));
// remove first group
this.rowGroupHeaderLayer.removeGroup(11);
// set all remaining groups unbreakable
this.rowGroupHeaderLayer.setGroupUnbreakable(0, true);
this.rowGroupHeaderLayer.setGroupUnbreakable(4, true);
this.rowGroupHeaderLayer.setGroupUnbreakable(8, true);
// between unbreakable groups
assertTrue(RowGroupUtils.isReorderValid(this.rowGroupHeaderLayer, 12, 8, true));
// to start of table
assertTrue(RowGroupUtils.isReorderValid(this.rowGroupHeaderLayer, 13, 0, true));
}
@Test
public void shouldTestIsReorderValidFromUnbreakable() {
// remove first group
this.rowGroupHeaderLayer.removeGroup(0);
// set second and third group unbreakable
this.rowGroupHeaderLayer.setGroupUnbreakable(4, true);
this.rowGroupHeaderLayer.setGroupUnbreakable(8, true);
this.rowGroupHeaderLayer.setGroupUnbreakable(11, true);
// in same group
assertTrue(RowGroupUtils.isReorderValid(this.rowGroupHeaderLayer, 4, 6, true));
assertTrue(RowGroupUtils.isReorderValid(this.rowGroupHeaderLayer, 5, 6, true));
assertTrue(RowGroupUtils.isReorderValid(this.rowGroupHeaderLayer, 7, 6, true));
assertTrue(RowGroupUtils.isReorderValid(this.rowGroupHeaderLayer, 4, 8, true));
assertTrue(RowGroupUtils.isReorderValid(this.rowGroupHeaderLayer, 7, 4, true));
assertTrue(RowGroupUtils.isReorderValid(this.rowGroupHeaderLayer, 10, 8, true));
// to other group
assertFalse(RowGroupUtils.isReorderValid(this.rowGroupHeaderLayer, 5, 9, true));
assertFalse(RowGroupUtils.isReorderValid(this.rowGroupHeaderLayer, 8, 5, true));
assertFalse(RowGroupUtils.isReorderValid(this.rowGroupHeaderLayer, 9, 4, true));
assertFalse(RowGroupUtils.isReorderValid(this.rowGroupHeaderLayer, 11, 8, true));
// to start of first group
assertFalse(RowGroupUtils.isReorderValid(this.rowGroupHeaderLayer, 4, 0, true));
// to end of last group
assertFalse(RowGroupUtils.isReorderValid(this.rowGroupHeaderLayer, 4, 13, false));
}
@Test
public void shouldTestIsBetweenTwoGroups() {
assertTrue(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 0, 0, true, MoveDirectionEnum.LEFT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 0, 1, true, MoveDirectionEnum.LEFT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 0, 2, true, MoveDirectionEnum.LEFT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 0, 3, true, MoveDirectionEnum.LEFT));
assertTrue(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 0, 4, true, MoveDirectionEnum.LEFT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 0, 5, true, MoveDirectionEnum.LEFT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 0, 6, true, MoveDirectionEnum.LEFT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 0, 7, true, MoveDirectionEnum.LEFT));
assertTrue(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 0, 8, true, MoveDirectionEnum.LEFT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 0, 9, true, MoveDirectionEnum.LEFT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 0, 10, true, MoveDirectionEnum.LEFT));
assertTrue(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 0, 11, true, MoveDirectionEnum.LEFT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 0, 12, true, MoveDirectionEnum.LEFT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 0, 13, true, MoveDirectionEnum.LEFT));
// move right reorderToLeftEdge
assertTrue(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 0, 0, true, MoveDirectionEnum.RIGHT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 0, 1, true, MoveDirectionEnum.RIGHT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 0, 2, true, MoveDirectionEnum.RIGHT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 0, 3, true, MoveDirectionEnum.RIGHT));
assertTrue(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 0, 4, true, MoveDirectionEnum.RIGHT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 0, 5, true, MoveDirectionEnum.RIGHT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 0, 6, true, MoveDirectionEnum.RIGHT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 0, 7, true, MoveDirectionEnum.RIGHT));
assertTrue(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 0, 8, true, MoveDirectionEnum.RIGHT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 0, 9, true, MoveDirectionEnum.RIGHT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 0, 10, true, MoveDirectionEnum.RIGHT));
assertTrue(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 0, 11, true, MoveDirectionEnum.RIGHT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 0, 12, true, MoveDirectionEnum.RIGHT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 0, 13, true, MoveDirectionEnum.RIGHT));
// move left reorderToRightEdge
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 0, 0, false, MoveDirectionEnum.LEFT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 0, 1, false, MoveDirectionEnum.LEFT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 0, 2, false, MoveDirectionEnum.LEFT));
assertTrue(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 0, 3, false, MoveDirectionEnum.LEFT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 0, 4, false, MoveDirectionEnum.LEFT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 0, 5, false, MoveDirectionEnum.LEFT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 0, 6, false, MoveDirectionEnum.LEFT));
assertTrue(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 0, 7, false, MoveDirectionEnum.LEFT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 0, 8, false, MoveDirectionEnum.LEFT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 0, 9, false, MoveDirectionEnum.LEFT));
assertTrue(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 0, 10, false, MoveDirectionEnum.LEFT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 0, 11, false, MoveDirectionEnum.LEFT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 0, 12, false, MoveDirectionEnum.LEFT));
assertTrue(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 0, 13, false, MoveDirectionEnum.LEFT));
// move right reorderToRightEdge
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 0, 0, false, MoveDirectionEnum.RIGHT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 0, 1, false, MoveDirectionEnum.RIGHT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 0, 2, false, MoveDirectionEnum.RIGHT));
assertTrue(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 0, 3, false, MoveDirectionEnum.RIGHT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 0, 4, false, MoveDirectionEnum.RIGHT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 0, 5, false, MoveDirectionEnum.RIGHT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 0, 6, false, MoveDirectionEnum.RIGHT));
assertTrue(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 0, 7, false, MoveDirectionEnum.RIGHT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 0, 8, false, MoveDirectionEnum.RIGHT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 0, 9, false, MoveDirectionEnum.RIGHT));
assertTrue(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 0, 10, false, MoveDirectionEnum.RIGHT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 0, 11, false, MoveDirectionEnum.RIGHT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 0, 12, false, MoveDirectionEnum.RIGHT));
assertTrue(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 0, 13, false, MoveDirectionEnum.RIGHT));
}
@Test
public void shouldTestIsBetweenTwoGroupsOnLevel() {
// add a second level
this.rowGroupHeaderLayer.addGroupingLevel();
// group spans Address and Facts
this.rowGroupHeaderLayer.addGroup(1, "Test", 4, 7);
// tests on level 0
// additional level should not change the results
shouldTestIsBetweenTwoGroups();
// tests on level 1
// note that if check on deeper level is false, it also needs to be
// false on the upper level
// move left reorderToLeftEdge
assertTrue(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 1, 0, true, MoveDirectionEnum.LEFT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 1, 1, true, MoveDirectionEnum.LEFT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 1, 2, true, MoveDirectionEnum.LEFT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 1, 3, true, MoveDirectionEnum.LEFT));
assertTrue(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 1, 4, true, MoveDirectionEnum.LEFT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 1, 5, true, MoveDirectionEnum.LEFT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 1, 6, true, MoveDirectionEnum.LEFT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 1, 7, true, MoveDirectionEnum.LEFT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 1, 8, true, MoveDirectionEnum.LEFT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 1, 9, true, MoveDirectionEnum.LEFT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 1, 10, true, MoveDirectionEnum.LEFT));
assertTrue(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 1, 11, true, MoveDirectionEnum.LEFT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 1, 12, true, MoveDirectionEnum.LEFT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 1, 13, true, MoveDirectionEnum.LEFT));
// move right reorderToLeftEdge
assertTrue(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 1, 0, true, MoveDirectionEnum.RIGHT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 1, 1, true, MoveDirectionEnum.RIGHT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 1, 2, true, MoveDirectionEnum.RIGHT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 1, 3, true, MoveDirectionEnum.RIGHT));
assertTrue(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 1, 4, true, MoveDirectionEnum.RIGHT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 1, 5, true, MoveDirectionEnum.RIGHT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 1, 6, true, MoveDirectionEnum.RIGHT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 1, 7, true, MoveDirectionEnum.RIGHT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 1, 8, true, MoveDirectionEnum.RIGHT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 1, 9, true, MoveDirectionEnum.RIGHT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 1, 10, true, MoveDirectionEnum.RIGHT));
assertTrue(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 1, 11, true, MoveDirectionEnum.RIGHT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 1, 12, true, MoveDirectionEnum.RIGHT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 1, 13, true, MoveDirectionEnum.RIGHT));
// move left reorderToRightEdge
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 1, 0, false, MoveDirectionEnum.LEFT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 1, 1, false, MoveDirectionEnum.LEFT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 1, 2, false, MoveDirectionEnum.LEFT));
assertTrue(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 1, 3, false, MoveDirectionEnum.LEFT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 1, 4, false, MoveDirectionEnum.LEFT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 1, 5, false, MoveDirectionEnum.LEFT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 1, 6, false, MoveDirectionEnum.LEFT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 1, 7, false, MoveDirectionEnum.LEFT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 1, 8, false, MoveDirectionEnum.LEFT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 1, 9, false, MoveDirectionEnum.LEFT));
assertTrue(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 1, 10, false, MoveDirectionEnum.LEFT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 1, 11, false, MoveDirectionEnum.LEFT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 1, 12, false, MoveDirectionEnum.LEFT));
assertTrue(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 1, 13, false, MoveDirectionEnum.LEFT));
// move right reorderToRightEdge
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 1, 0, false, MoveDirectionEnum.RIGHT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 1, 1, false, MoveDirectionEnum.RIGHT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 1, 2, false, MoveDirectionEnum.RIGHT));
assertTrue(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 1, 3, false, MoveDirectionEnum.RIGHT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 1, 4, false, MoveDirectionEnum.RIGHT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 1, 5, false, MoveDirectionEnum.RIGHT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 1, 6, false, MoveDirectionEnum.RIGHT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 1, 7, false, MoveDirectionEnum.RIGHT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 1, 8, false, MoveDirectionEnum.RIGHT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 1, 9, false, MoveDirectionEnum.RIGHT));
assertTrue(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 1, 10, false, MoveDirectionEnum.RIGHT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 1, 11, false, MoveDirectionEnum.RIGHT));
assertFalse(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 1, 12, false, MoveDirectionEnum.RIGHT));
assertTrue(RowGroupUtils.isBetweenTwoGroups(this.rowGroupHeaderLayer, 1, 13, false, MoveDirectionEnum.RIGHT));
// assertTrue(RowGroupUtils.isBetweenTwoGroups(this.columnGroupHeaderLayer,
// 1, 0, true, MoveDirectionEnum.LEFT));
// assertTrue(RowGroupUtils.isBetweenTwoGroups(this.columnGroupHeaderLayer,
// 1, 4, true, MoveDirectionEnum.LEFT));
// assertTrue(RowGroupUtils.isBetweenTwoGroups(this.columnGroupHeaderLayer,
// 1, 11, true, MoveDirectionEnum.LEFT));
// assertTrue(RowGroupUtils.isBetweenTwoGroups(this.columnGroupHeaderLayer,
// 1, 13, false, MoveDirectionEnum.RIGHT));
//
// assertFalse(RowGroupUtils.isBetweenTwoGroups(this.columnGroupHeaderLayer,
// 1, 8, true, MoveDirectionEnum.LEFT));
// assertFalse(RowGroupUtils.isBetweenTwoGroups(this.columnGroupHeaderLayer,
// 1, 5, true, MoveDirectionEnum.LEFT));
// TODO remove group on level 0
// no group on level 1 at this positions
// assertTrue(RowGroupUtils.isBetweenTwoGroups(this.columnGroupHeaderLayer,
// 1, 0, false, MoveDirectionEnum.LEFT));
// assertTrue(RowGroupUtils.isBetweenTwoGroups(this.columnGroupHeaderLayer,
// 1, 2, true, MoveDirectionEnum.LEFT));
// assertTrue(RowGroupUtils.isBetweenTwoGroups(this.columnGroupHeaderLayer,
// 1, 12, true, MoveDirectionEnum.LEFT));
// assertTrue(RowGroupUtils.isBetweenTwoGroups(this.columnGroupHeaderLayer,
// 1, 13, true, MoveDirectionEnum.RIGHT));
}
@Test
public void shouldTestIsGroupReordered() {
Group group = this.rowGroupHeaderLayer.getGroupByPosition(0);
// test all group positions
assertTrue(RowGroupUtils.isGroupReordered(group, new int[] { 0, 1, 2, 3 }));
// test less group positions
assertFalse(RowGroupUtils.isGroupReordered(group, new int[] { 1, 2, 3 }));
// test more group positions
assertTrue(RowGroupUtils.isGroupReordered(group, new int[] { 0, 1, 2, 3, 4, 5 }));
}
}