blob: 8794916e45826f67cd0e2785ed88d52bd142ec66 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2012, 2020 Original authors and others.
*
* 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:
* Original authors and others - initial API and implementation
******************************************************************************/
package org.eclipse.nebula.widgets.nattable.group;
import static org.junit.Assert.assertEquals;
import org.eclipse.nebula.widgets.nattable.grid.command.ClientAreaResizeCommand;
import org.eclipse.nebula.widgets.nattable.hideshow.command.ColumnHideCommand;
import org.eclipse.nebula.widgets.nattable.layer.stack.DefaultBodyLayerStack;
import org.eclipse.nebula.widgets.nattable.reorder.command.ColumnReorderCommand;
import org.eclipse.nebula.widgets.nattable.resize.command.ColumnResizeCommand;
import org.eclipse.nebula.widgets.nattable.test.fixture.layer.DataLayerFixture;
import org.eclipse.nebula.widgets.nattable.util.IClientAreaProvider;
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 DefaultBodyLayerStackTest {
private DefaultBodyLayerStack layerStack;
@Before
public void setup() {
this.layerStack = new DefaultBodyLayerStack(new DataLayerFixture(10, 5, 100,
20));
this.layerStack.setClientAreaProvider(new IClientAreaProvider() {
@Override
public Rectangle getClientArea() {
return new Rectangle(0, 0, 2000, 250);
}
});
this.layerStack.doCommand(new ClientAreaResizeCommand(new Shell(Display
.getDefault(), SWT.V_SCROLL | SWT.H_SCROLL)));
}
/*
* Data Layer: 0 1 2 3 4 5 6 7 8 9
* -----------------------------------------------------
*/
@Test
public void hideColumnsAndReorder() throws Exception {
// Hide 3, 4
this.layerStack.doCommand(new ColumnHideCommand(this.layerStack, 3));
this.layerStack.doCommand(new ColumnHideCommand(this.layerStack, 3));
assertEquals(0, this.layerStack.getColumnIndexByPosition(0));
assertEquals(1, this.layerStack.getColumnIndexByPosition(1));
assertEquals(2, this.layerStack.getColumnIndexByPosition(2));
assertEquals(5, this.layerStack.getColumnIndexByPosition(3));
assertEquals(6, this.layerStack.getColumnIndexByPosition(4));
assertEquals(7, this.layerStack.getColumnIndexByPosition(5));
assertEquals(8, this.layerStack.getColumnIndexByPosition(6));
assertEquals(9, this.layerStack.getColumnIndexByPosition(7));
assertEquals(-1, this.layerStack.getColumnIndexByPosition(8));
// Reorder 0 -> 4
this.layerStack.doCommand(new ColumnReorderCommand(this.layerStack, 0, 4));
assertEquals(1, this.layerStack.getColumnIndexByPosition(0));
assertEquals(2, this.layerStack.getColumnIndexByPosition(1));
assertEquals(5, this.layerStack.getColumnIndexByPosition(2));
assertEquals(0, this.layerStack.getColumnIndexByPosition(3));
assertEquals(6, this.layerStack.getColumnIndexByPosition(4));
assertEquals(7, this.layerStack.getColumnIndexByPosition(5));
assertEquals(8, this.layerStack.getColumnIndexByPosition(6));
assertEquals(9, this.layerStack.getColumnIndexByPosition(7));
assertEquals(-1, this.layerStack.getColumnIndexByPosition(8));
}
@Test
public void resizeAColumnAndHideIt() throws Exception {
assertEquals(10, this.layerStack.getColumnCount());
assertEquals(1000, this.layerStack.getWidth());
// Resize 2
this.layerStack.doCommand(new ColumnResizeCommand(this.layerStack, 2, 500));
assertEquals(1400, this.layerStack.getWidth());
assertEquals(1, this.layerStack.getColumnIndexByPosition(1));
assertEquals(100, this.layerStack.getColumnWidthByPosition(1));
assertEquals(100, this.layerStack.getStartXOfColumnPosition(1));
assertEquals(2, this.layerStack.getColumnIndexByPosition(2));
assertEquals(500, this.layerStack.getColumnWidthByPosition(2));
assertEquals(200, this.layerStack.getStartXOfColumnPosition(2));
assertEquals(3, this.layerStack.getColumnIndexByPosition(3));
assertEquals(100, this.layerStack.getColumnWidthByPosition(3));
assertEquals(700, this.layerStack.getStartXOfColumnPosition(3));
// Hide 2
this.layerStack.doCommand(new ColumnHideCommand(this.layerStack, 2));
assertEquals(9, this.layerStack.getColumnCount());
assertEquals(1, this.layerStack.getColumnIndexByPosition(1));
assertEquals(100, this.layerStack.getColumnWidthByPosition(1));
assertEquals(100, this.layerStack.getStartXOfColumnPosition(1));
assertEquals(3, this.layerStack.getColumnIndexByPosition(2));
assertEquals(100, this.layerStack.getColumnWidthByPosition(2));
assertEquals(200, this.layerStack.getStartXOfColumnPosition(2));
assertEquals(4, this.layerStack.getColumnIndexByPosition(3));
assertEquals(100, this.layerStack.getColumnWidthByPosition(3));
assertEquals(300, this.layerStack.getStartXOfColumnPosition(3));
assertEquals(9, this.layerStack.getColumnIndexByPosition(8));
assertEquals(100, this.layerStack.getColumnWidthByPosition(8));
assertEquals(800, this.layerStack.getStartXOfColumnPosition(8));
}
@Test
public void resizeAColumnAndReorderIt() throws Exception {
assertEquals(10, this.layerStack.getColumnCount());
assertEquals(1000, this.layerStack.getWidth());
// Resize 2
this.layerStack.doCommand(new ColumnResizeCommand(this.layerStack, 2, 500));
assertEquals(1400, this.layerStack.getWidth());
// Reorder 2 -> 4
this.layerStack.doCommand(new ColumnReorderCommand(this.layerStack, 2, 4));
assertEquals(0, this.layerStack.getColumnIndexByPosition(0));
assertEquals(1, this.layerStack.getColumnIndexByPosition(1));
assertEquals(3, this.layerStack.getColumnIndexByPosition(2));
assertEquals(2, this.layerStack.getColumnIndexByPosition(3));
assertEquals(4, this.layerStack.getColumnIndexByPosition(4));
assertEquals(5, this.layerStack.getColumnIndexByPosition(5));
assertEquals(6, this.layerStack.getColumnIndexByPosition(6));
assertEquals(7, this.layerStack.getColumnIndexByPosition(7));
assertEquals(8, this.layerStack.getColumnIndexByPosition(8));
}
}