blob: b613f7d50826407aceb2bb01b17667072ef5a0b4 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2013, 2020 Dirk Fauth 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:
* Dirk Fauth <dirk.fauth@googlemail.com> - initial API and implementation
*******************************************************************************/
package org.eclipse.nebula.widgets.nattable.hideshow;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import org.eclipse.nebula.widgets.nattable.hideshow.indicator.HideIndicatorConstants;
import org.eclipse.nebula.widgets.nattable.layer.LabelStack;
import org.eclipse.nebula.widgets.nattable.test.fixture.layer.DataLayerFixture;
import org.eclipse.nebula.widgets.nattable.test.fixture.layer.RowHideShowLayerFixture;
import org.junit.Before;
import org.junit.Test;
public class RowHideShowLayerTest {
private RowHideShowLayer rowHideShowLayer;
@Before
public void setup() {
this.rowHideShowLayer = new RowHideShowLayerFixture();
}
@Test
public void getRowIndexByPosition() {
assertEquals(4, this.rowHideShowLayer.getRowIndexByPosition(0));
assertEquals(1, this.rowHideShowLayer.getRowIndexByPosition(1));
assertEquals(2, this.rowHideShowLayer.getRowIndexByPosition(2));
assertEquals(5, this.rowHideShowLayer.getRowIndexByPosition(3));
assertEquals(6, this.rowHideShowLayer.getRowIndexByPosition(4));
assertEquals(-1, this.rowHideShowLayer.getRowIndexByPosition(5));
}
@Test
public void getRowIndexHideAdditionalColumn() {
getRowIndexByPosition();
this.rowHideShowLayer.hideRowPositions(Arrays.asList(1));
assertEquals(4, this.rowHideShowLayer.getRowIndexByPosition(0));
assertEquals(2, this.rowHideShowLayer.getRowIndexByPosition(1));
assertEquals(5, this.rowHideShowLayer.getRowIndexByPosition(2));
assertEquals(6, this.rowHideShowLayer.getRowIndexByPosition(3));
assertEquals(-1, this.rowHideShowLayer.getRowIndexByPosition(4));
}
@Test
public void getRowPositionForASingleHiddenRow() {
assertEquals(-1, this.rowHideShowLayer.getRowPositionByIndex(0));
assertEquals(1, this.rowHideShowLayer.getRowPositionByIndex(1));
assertEquals(2, this.rowHideShowLayer.getRowPositionByIndex(2));
assertEquals(-1, this.rowHideShowLayer.getRowPositionByIndex(3));
assertEquals(0, this.rowHideShowLayer.getRowPositionByIndex(4));
assertEquals(3, this.rowHideShowLayer.getRowPositionByIndex(5));
assertEquals(4, this.rowHideShowLayer.getRowPositionByIndex(6));
}
@Test
public void hideAllRows() {
this.rowHideShowLayer.hideRowPositions(0, 1, 2, 3, 4);
assertEquals(0, this.rowHideShowLayer.getRowCount());
}
@Test
public void hideAllRows2() {
this.rowHideShowLayer.hideRowPositions(0);
this.rowHideShowLayer.hideRowPositions(0);
this.rowHideShowLayer.hideRowPositions(0);
this.rowHideShowLayer.hideRowPositions(0);
this.rowHideShowLayer.hideRowPositions(0);
assertEquals(0, this.rowHideShowLayer.getRowCount());
}
@Test
public void showARowByIndex() {
assertEquals(5, this.rowHideShowLayer.getRowCount());
List<Integer> rowPositions = Arrays.asList(2);
this.rowHideShowLayer.hideRowPositions(rowPositions); // index = 2
rowPositions = Arrays.asList(0);
this.rowHideShowLayer.hideRowPositions(rowPositions); // index = 4
assertEquals(3, this.rowHideShowLayer.getRowCount());
assertEquals(1, this.rowHideShowLayer.getRowIndexByPosition(0));
assertEquals(-1, this.rowHideShowLayer.getRowIndexByPosition(3));
this.rowHideShowLayer.showRowIndexes(Arrays.asList(0));
assertEquals(4, this.rowHideShowLayer.getRowCount());
assertEquals(1, this.rowHideShowLayer.getRowIndexByPosition(0));
assertEquals(0, this.rowHideShowLayer.getRowIndexByPosition(1));
assertEquals(-1, this.rowHideShowLayer.getRowIndexByPosition(4));
this.rowHideShowLayer.showRowIndexes(Arrays.asList(2));
assertEquals(5, this.rowHideShowLayer.getRowCount());
assertEquals(1, this.rowHideShowLayer.getRowIndexByPosition(0));
assertEquals(0, this.rowHideShowLayer.getRowIndexByPosition(1));
assertEquals(2, this.rowHideShowLayer.getRowIndexByPosition(2));
assertEquals(-1, this.rowHideShowLayer.getRowIndexByPosition(5));
}
@Test
public void showAllRows() {
assertEquals(5, this.rowHideShowLayer.getRowCount());
this.rowHideShowLayer.hideRowPositions(Arrays.asList(0));
assertEquals(4, this.rowHideShowLayer.getRowCount());
assertEquals(1, this.rowHideShowLayer.getRowIndexByPosition(0));
assertEquals(2, this.rowHideShowLayer.getRowIndexByPosition(1));
assertEquals(-1, this.rowHideShowLayer.getRowIndexByPosition(4));
this.rowHideShowLayer.showAllRows();
assertEquals(7, this.rowHideShowLayer.getRowCount());
assertEquals(4, this.rowHideShowLayer.getRowIndexByPosition(0));
assertEquals(1, this.rowHideShowLayer.getRowIndexByPosition(1));
assertEquals(0, this.rowHideShowLayer.getRowIndexByPosition(2));
assertEquals(2, this.rowHideShowLayer.getRowIndexByPosition(3));
assertEquals(3, this.rowHideShowLayer.getRowIndexByPosition(4));
assertEquals(5, this.rowHideShowLayer.getRowIndexByPosition(5));
assertEquals(6, this.rowHideShowLayer.getRowIndexByPosition(6));
}
@Test
public void showRowIndexes() {
this.rowHideShowLayer = new RowHideShowLayerFixture(
new DataLayerFixture(2, 10, 100, 20));
assertEquals(10, this.rowHideShowLayer.getRowCount());
this.rowHideShowLayer.hideRowPositions(Arrays.asList(3, 4, 5));
assertEquals(7, this.rowHideShowLayer.getRowCount());
assertEquals(-1, this.rowHideShowLayer.getRowPositionByIndex(3));
assertEquals(-1, this.rowHideShowLayer.getRowPositionByIndex(4));
this.rowHideShowLayer.showRowIndexes(Arrays.asList(3, 4));
assertEquals(9, this.rowHideShowLayer.getRowCount());
assertEquals(3, this.rowHideShowLayer.getRowPositionByIndex(3));
assertEquals(4, this.rowHideShowLayer.getRowPositionByIndex(4));
}
@Test
public void showRowIndexesPrimitive() {
this.rowHideShowLayer = new RowHideShowLayerFixture(
new DataLayerFixture(2, 10, 100, 20));
assertEquals(10, this.rowHideShowLayer.getRowCount());
this.rowHideShowLayer.hideRowPositions(3, 4, 5);
assertEquals(7, this.rowHideShowLayer.getRowCount());
assertEquals(-1, this.rowHideShowLayer.getRowPositionByIndex(3));
assertEquals(-1, this.rowHideShowLayer.getRowPositionByIndex(4));
this.rowHideShowLayer.showRowIndexes(3, 4);
assertEquals(9, this.rowHideShowLayer.getRowCount());
assertEquals(3, this.rowHideShowLayer.getRowPositionByIndex(3));
assertEquals(4, this.rowHideShowLayer.getRowPositionByIndex(4));
}
@Test
public void showRowPositions() {
// Row reorder fixture index positions: 4 1 0 2 3 5 6
// Row positions hidden: 2 4 (index 0 3)
this.rowHideShowLayer.showRowPosition(2, true, false);
assertEquals(6, this.rowHideShowLayer.getRowCount());
assertEquals(4, this.rowHideShowLayer.getRowIndexByPosition(0));
assertEquals(1, this.rowHideShowLayer.getRowIndexByPosition(1));
assertEquals(0, this.rowHideShowLayer.getRowIndexByPosition(2));
assertEquals(2, this.rowHideShowLayer.getRowIndexByPosition(3));
assertEquals(5, this.rowHideShowLayer.getRowIndexByPosition(4));
assertEquals(6, this.rowHideShowLayer.getRowIndexByPosition(5));
assertEquals(-1, this.rowHideShowLayer.getRowIndexByPosition(6));
this.rowHideShowLayer.showRowPosition(3, false, false);
assertEquals(7, this.rowHideShowLayer.getRowCount());
assertEquals(4, this.rowHideShowLayer.getRowIndexByPosition(0));
assertEquals(1, this.rowHideShowLayer.getRowIndexByPosition(1));
assertEquals(0, this.rowHideShowLayer.getRowIndexByPosition(2));
assertEquals(2, this.rowHideShowLayer.getRowIndexByPosition(3));
assertEquals(3, this.rowHideShowLayer.getRowIndexByPosition(4));
assertEquals(5, this.rowHideShowLayer.getRowIndexByPosition(5));
assertEquals(6, this.rowHideShowLayer.getRowIndexByPosition(6));
}
@Test
public void showAllRowPositionsOnTopSide() {
// Row reorder fixture index positions: 4 1 0 2 3 5 6
// Row positions hidden: 2 4 (index 0 3)
// hide additional row
this.rowHideShowLayer.hideRowPositions(Arrays.asList(1));
this.rowHideShowLayer.showRowPosition(1, true, false);
assertEquals(5, this.rowHideShowLayer.getRowCount());
assertEquals(4, this.rowHideShowLayer.getRowIndexByPosition(0));
assertEquals(0, this.rowHideShowLayer.getRowIndexByPosition(1));
assertEquals(2, this.rowHideShowLayer.getRowIndexByPosition(2));
assertEquals(5, this.rowHideShowLayer.getRowIndexByPosition(3));
assertEquals(6, this.rowHideShowLayer.getRowIndexByPosition(4));
assertEquals(-1, this.rowHideShowLayer.getRowIndexByPosition(5));
assertEquals(-1, this.rowHideShowLayer.getRowIndexByPosition(6));
// hide again
this.rowHideShowLayer.hideRowPositions(Arrays.asList(1));
// now show all rows to the top
this.rowHideShowLayer.showRowPosition(1, true, true);
assertEquals(6, this.rowHideShowLayer.getRowCount());
assertEquals(4, this.rowHideShowLayer.getRowIndexByPosition(0));
assertEquals(1, this.rowHideShowLayer.getRowIndexByPosition(1));
assertEquals(0, this.rowHideShowLayer.getRowIndexByPosition(2));
assertEquals(2, this.rowHideShowLayer.getRowIndexByPosition(3));
assertEquals(5, this.rowHideShowLayer.getRowIndexByPosition(4));
assertEquals(6, this.rowHideShowLayer.getRowIndexByPosition(5));
assertEquals(-1, this.rowHideShowLayer.getRowIndexByPosition(6));
}
@Test
public void showAllRowPositionsOnBottomSide() {
// Row reorder fixture index positions: 4 1 0 2 3 5 6
// Row positions hidden: 2 4 (index 0 3)
// hide additional row
this.rowHideShowLayer.hideRowPositions(Arrays.asList(1));
this.rowHideShowLayer.showRowPosition(0, false, false);
assertEquals(5, this.rowHideShowLayer.getRowCount());
assertEquals(4, this.rowHideShowLayer.getRowIndexByPosition(0));
assertEquals(1, this.rowHideShowLayer.getRowIndexByPosition(1));
assertEquals(2, this.rowHideShowLayer.getRowIndexByPosition(2));
assertEquals(5, this.rowHideShowLayer.getRowIndexByPosition(3));
assertEquals(6, this.rowHideShowLayer.getRowIndexByPosition(4));
assertEquals(-1, this.rowHideShowLayer.getRowIndexByPosition(5));
assertEquals(-1, this.rowHideShowLayer.getRowIndexByPosition(6));
// hide again
this.rowHideShowLayer.hideRowPositions(Arrays.asList(1));
// now show all columns to the left
this.rowHideShowLayer.showRowPosition(0, false, true);
assertEquals(6, this.rowHideShowLayer.getRowCount());
assertEquals(4, this.rowHideShowLayer.getRowIndexByPosition(0));
assertEquals(1, this.rowHideShowLayer.getRowIndexByPosition(1));
assertEquals(0, this.rowHideShowLayer.getRowIndexByPosition(2));
assertEquals(2, this.rowHideShowLayer.getRowIndexByPosition(3));
assertEquals(5, this.rowHideShowLayer.getRowIndexByPosition(4));
assertEquals(6, this.rowHideShowLayer.getRowIndexByPosition(5));
assertEquals(-1, this.rowHideShowLayer.getRowIndexByPosition(6));
}
@Test
public void doNotShowIfNoDirectRowHiddenToTop() {
// Row reorder fixture index positions: 4 1 0 2 3 5 6
// Row positions hidden: 2 4 (index 0 3)
// hide additional row
this.rowHideShowLayer.hideRowPositions(Arrays.asList(1));
// Row reorder fixture index positions: 4 2 5 6
this.rowHideShowLayer.showRowPosition(3, true, false);
assertEquals(4, this.rowHideShowLayer.getRowCount());
assertEquals(4, this.rowHideShowLayer.getRowIndexByPosition(0));
assertEquals(2, this.rowHideShowLayer.getRowIndexByPosition(1));
assertEquals(5, this.rowHideShowLayer.getRowIndexByPosition(2));
assertEquals(6, this.rowHideShowLayer.getRowIndexByPosition(3));
assertEquals(-1, this.rowHideShowLayer.getRowIndexByPosition(4));
}
@Test
public void doNotShowIfNoDirectRowHiddenToBottom() {
// Row reorder fixture index positions: 4 1 0 2 3 5 6
// Row positions hidden: 2 4 (index 0 3)
// hide additional row
this.rowHideShowLayer.hideRowPositions(Arrays.asList(2));
this.rowHideShowLayer.showRowPosition(0, false, false);
assertEquals(4, this.rowHideShowLayer.getRowCount());
assertEquals(4, this.rowHideShowLayer.getRowIndexByPosition(0));
assertEquals(1, this.rowHideShowLayer.getRowIndexByPosition(1));
assertEquals(5, this.rowHideShowLayer.getRowIndexByPosition(2));
assertEquals(6, this.rowHideShowLayer.getRowIndexByPosition(3));
assertEquals(-1, this.rowHideShowLayer.getRowIndexByPosition(4));
}
@Test
public void shouldContainHideIndicatorLabels() {
this.rowHideShowLayer = new RowHideShowLayer(new DataLayerFixture());
assertEquals(7, this.rowHideShowLayer.getRowCount());
this.rowHideShowLayer.hideRowPositions(Arrays.asList(0));
LabelStack configLabels = this.rowHideShowLayer.getConfigLabelsByPosition(0, 0);
assertTrue(configLabels.hasLabel(HideIndicatorConstants.ROW_TOP_HIDDEN));
assertFalse(configLabels.hasLabel(HideIndicatorConstants.ROW_BOTTOM_HIDDEN));
this.rowHideShowLayer.hideRowPositions(Arrays.asList(1));
configLabels = this.rowHideShowLayer.getConfigLabelsByPosition(0, 0);
assertTrue(configLabels.hasLabel(HideIndicatorConstants.ROW_TOP_HIDDEN));
assertTrue(configLabels.hasLabel(HideIndicatorConstants.ROW_BOTTOM_HIDDEN));
this.rowHideShowLayer.showRowIndexes(Arrays.asList(0));
configLabels = this.rowHideShowLayer.getConfigLabelsByPosition(0, 1);
assertFalse(configLabels.hasLabel(HideIndicatorConstants.ROW_TOP_HIDDEN));
assertTrue(configLabels.hasLabel(HideIndicatorConstants.ROW_BOTTOM_HIDDEN));
}
@Test
public void shouldCalculateHeight() {
this.rowHideShowLayer = new RowHideShowLayer(new DataLayerFixture(5, 5, 100, 20));
assertEquals(5, this.rowHideShowLayer.getRowCount());
assertEquals(100, this.rowHideShowLayer.getHeight());
this.rowHideShowLayer.hideRowPositions(Arrays.asList(0, 1, 2, 3));
assertEquals(1, this.rowHideShowLayer.getRowCount());
assertEquals(20, this.rowHideShowLayer.getHeight());
this.rowHideShowLayer.hideRowPositions(Arrays.asList(0));
assertEquals(0, this.rowHideShowLayer.getRowCount());
assertEquals(0, this.rowHideShowLayer.getHeight());
}
@Test
public void shouldCalculateHeightForEmptyDataset() {
this.rowHideShowLayer = new RowHideShowLayer(new DataLayerFixture(0, 0, 100, 20));
assertEquals(0, this.rowHideShowLayer.getRowCount());
assertEquals(0, this.rowHideShowLayer.getHeight());
}
@Test
public void shouldTransformLocalToUnderlyingRowPositionHidden() {
assertEquals(-1, this.rowHideShowLayer.localToUnderlyingRowPosition(-1));
assertEquals(0, this.rowHideShowLayer.localToUnderlyingRowPosition(0));
assertEquals(1, this.rowHideShowLayer.localToUnderlyingRowPosition(1));
assertEquals(3, this.rowHideShowLayer.localToUnderlyingRowPosition(2));
assertEquals(5, this.rowHideShowLayer.localToUnderlyingRowPosition(3));
assertEquals(6, this.rowHideShowLayer.localToUnderlyingRowPosition(4));
assertEquals(-1, this.rowHideShowLayer.localToUnderlyingRowPosition(5));
}
@Test
public void shouldTransformLocalToUnderlyingRowPositionNothingHidden() {
this.rowHideShowLayer.showAllRows();
assertEquals(-1, this.rowHideShowLayer.localToUnderlyingRowPosition(-1));
assertEquals(0, this.rowHideShowLayer.localToUnderlyingRowPosition(0));
assertEquals(1, this.rowHideShowLayer.localToUnderlyingRowPosition(1));
assertEquals(2, this.rowHideShowLayer.localToUnderlyingRowPosition(2));
assertEquals(3, this.rowHideShowLayer.localToUnderlyingRowPosition(3));
assertEquals(4, this.rowHideShowLayer.localToUnderlyingRowPosition(4));
assertEquals(5, this.rowHideShowLayer.localToUnderlyingRowPosition(5));
assertEquals(6, this.rowHideShowLayer.localToUnderlyingRowPosition(6));
assertEquals(-1, this.rowHideShowLayer.localToUnderlyingRowPosition(7));
}
@Test
public void shouldReturnHiddenRowIndexes() {
// test initialization hides row indexes 0 and 3
// happens due to reordering and hiding
Collection<Integer> hiddenRowIndexes = this.rowHideShowLayer.getHiddenRowIndexes();
assertEquals(2, hiddenRowIndexes.size());
assertTrue(hiddenRowIndexes.contains(Integer.valueOf(0)));
assertTrue(hiddenRowIndexes.contains(Integer.valueOf(3)));
int[] hiddenRowIndexesArray = this.rowHideShowLayer.getHiddenRowIndexesArray();
assertEquals(2, hiddenRowIndexesArray.length);
assertEquals(0, hiddenRowIndexesArray[0]);
assertEquals(3, hiddenRowIndexesArray[1]);
assertTrue(this.rowHideShowLayer.hasHiddenRows());
this.rowHideShowLayer.showAllRows();
hiddenRowIndexes = this.rowHideShowLayer.getHiddenRowIndexes();
assertEquals(0, hiddenRowIndexes.size());
hiddenRowIndexesArray = this.rowHideShowLayer.getHiddenRowIndexesArray();
assertEquals(0, hiddenRowIndexesArray.length);
assertFalse(this.rowHideShowLayer.hasHiddenRows());
}
}