blob: a2d75e44c9506c67273d0cd39e1d83054ab57549 [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
******************************************************************************/
package org.eclipse.nebula.widgets.nattable.group;
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.List;
import org.eclipse.nebula.widgets.nattable.reorder.ColumnReorderLayer;
import org.eclipse.nebula.widgets.nattable.test.fixture.layer.ColumnHideShowLayerFixture;
import org.eclipse.nebula.widgets.nattable.test.fixture.layer.ColumnReorderLayerFixture;
import org.junit.Before;
import org.junit.Test;
public class ColumnGroupExpandCollapseLayerTest {
private static final String TEST_GROUP_NAME = "G1";
private ColumnGroupModel model;
private ColumnGroupExpandCollapseLayer expandCollapseLayer;
private ColumnHideShowLayerFixture underlyingLayer;
@Before
public void setup() {
this.model = new ColumnGroupModel();
// 10 Columns in total - column 10 hidden
this.underlyingLayer = new ColumnHideShowLayerFixture(9);
this.expandCollapseLayer = new ColumnGroupExpandCollapseLayer(
this.underlyingLayer, this.model);
this.model.addColumnsIndexesToGroup(TEST_GROUP_NAME, 2, 3, 4, 5);
}
@Test
public void getColumnCountWhenColumnsAddedToTheGroup() throws Exception {
assertEquals(9, this.expandCollapseLayer.getColumnCount());
// Collapse and check count
collapse(3);
assertEquals(6, this.expandCollapseLayer.getColumnCount());
// Expand and add a column
expand(3);
this.model.addColumnsIndexesToGroup(TEST_GROUP_NAME, 8);
// Collapse again
collapse(3);
assertEquals(5, this.expandCollapseLayer.getColumnCount());
}
@Test
public void getColumnCountWhenColumnsCollapsedAndHidden() throws Exception {
// Columns 2 and 3 hidden
this.underlyingLayer.hideColumnPositions(Arrays.asList(2, 3));
assertEquals(7, this.expandCollapseLayer.getColumnCount());
collapse(3);
assertEquals(6, this.expandCollapseLayer.getColumnCount());
expand(3);
assertEquals(7, this.expandCollapseLayer.getColumnCount());
}
/*
* Hide show layer 0 1 2(h) 3 4 5 6 7 8 9(h)
* ------------------------------------------------- Expand/Collapse |<-----
* CG1 ----->|
*/
@Test
public void isFirstVisibleWithFirstColumnHidden() throws Exception {
this.underlyingLayer.hideColumnPositions(Arrays.asList(2));
// assertFalse(expandCollapseLayer.isFirstVisibleColumnInGroup(2));
assertTrue(ColumnGroupUtils.isFirstVisibleColumnIndexInGroup(3,
this.expandCollapseLayer, this.underlyingLayer, this.model));
assertFalse(ColumnGroupUtils.isFirstVisibleColumnIndexInGroup(4,
this.expandCollapseLayer, this.underlyingLayer, this.model));
assertFalse(ColumnGroupUtils.isFirstVisibleColumnIndexInGroup(5,
this.expandCollapseLayer, this.underlyingLayer, this.model));
}
/*
* Hide show layer 0 1 2(h) 3(h) 4 5 6 7 8 9(h)
* ------------------------------------------------- Expand/Collapse
* |<------ CG1 ------->|
*/
@Test
public void isFirstVisibleWithFirstTwoColumnsHidden() throws Exception {
this.underlyingLayer.hideColumnPositions(Arrays.asList(2, 3));
assertFalse(ColumnGroupUtils.isFirstVisibleColumnIndexInGroup(2,
this.expandCollapseLayer, this.underlyingLayer, this.model));
assertFalse(ColumnGroupUtils.isFirstVisibleColumnIndexInGroup(3,
this.expandCollapseLayer, this.underlyingLayer, this.model));
assertTrue(ColumnGroupUtils.isFirstVisibleColumnIndexInGroup(4,
this.expandCollapseLayer, this.underlyingLayer, this.model));
assertFalse(ColumnGroupUtils.isFirstVisibleColumnIndexInGroup(5,
this.expandCollapseLayer, this.underlyingLayer, this.model));
}
/*
* Hide show layer 0 1 2(h) 3(h) 4(h) 5(h) 6 7 8 9(h)
* ------------------------------------------------- Expand/Collapse
* |<--------- CG1 ------->|
*/
@Test
public void isFirstVisibleWithAllColumnsHidden() throws Exception {
this.underlyingLayer.hideColumnPositions(Arrays.asList(2, 3, 4, 5));
assertFalse(ColumnGroupUtils.isFirstVisibleColumnIndexInGroup(2,
this.expandCollapseLayer, this.underlyingLayer, this.model));
assertFalse(ColumnGroupUtils.isFirstVisibleColumnIndexInGroup(3,
this.expandCollapseLayer, this.underlyingLayer, this.model));
assertFalse(ColumnGroupUtils.isFirstVisibleColumnIndexInGroup(4,
this.expandCollapseLayer, this.underlyingLayer, this.model));
assertFalse(ColumnGroupUtils.isFirstVisibleColumnIndexInGroup(5,
this.expandCollapseLayer, this.underlyingLayer, this.model));
}
@Test
public void isFirstVisibleWithColumnsReordered() throws Exception {
// Original indexes : 0 1 2 3 4
// Indexes reordered : 4 1 0 2 3
ColumnReorderLayer reorderLayer = new ColumnReorderLayerFixture();
this.underlyingLayer = new ColumnHideShowLayerFixture(reorderLayer);
this.expandCollapseLayer = new ColumnGroupExpandCollapseLayer(
this.underlyingLayer, this.model);
this.model.clear();
this.model.addColumnsIndexesToGroup(TEST_GROUP_NAME, 0, 2, 3);
// Hide index 0
this.underlyingLayer.hideColumnPositions(Arrays.asList(2));
assertFalse(ColumnGroupUtils.isFirstVisibleColumnIndexInGroup(0,
this.expandCollapseLayer, this.underlyingLayer, this.model));
assertTrue(ColumnGroupUtils.isFirstVisibleColumnIndexInGroup(2,
this.expandCollapseLayer, this.underlyingLayer, this.model));
assertFalse(ColumnGroupUtils.isFirstVisibleColumnIndexInGroup(3,
this.expandCollapseLayer, this.underlyingLayer, this.model));
}
/*
* Hide show layer 0 1 2(h) 3(h) 4 5 6 7 8 9(h)
* ------------------------------------------------- Expand/Collapse
* |<------- CG1 ----->|
*/
@Test
public void isLastVisibleColumnIndexInGroup() throws Exception {
this.underlyingLayer.hideColumnPositions(Arrays.asList(2, 3));
assertFalse(ColumnGroupUtils.isLastVisibleColumnIndexInGroup(2,
this.expandCollapseLayer, this.underlyingLayer, this.model));
assertFalse(ColumnGroupUtils.isLastVisibleColumnIndexInGroup(3,
this.expandCollapseLayer, this.underlyingLayer, this.model));
assertFalse(ColumnGroupUtils.isLastVisibleColumnIndexInGroup(4,
this.expandCollapseLayer, this.underlyingLayer, this.model));
assertTrue(ColumnGroupUtils.isLastVisibleColumnIndexInGroup(5,
this.expandCollapseLayer, this.underlyingLayer, this.model));
}
@Test
public void getVisibleColumnIndexesToTheRight() throws Exception {
collapse(2);
List<Integer> indexes = ColumnGroupUtils.getVisibleIndexesToTheRight(2,
this.expandCollapseLayer, this.underlyingLayer, this.model);
assertEquals(0, indexes.size());
}
/*
* Hide show layer 0 1 2 3 4 5 6 7 8 9(h)
* -------------------------------------- Expand/Collapse |<--- CG1 -->|
*/
@Test
public void getColumnIndexByPosition() throws Exception {
assertEquals(2, this.expandCollapseLayer.getColumnIndexByPosition(2));
assertEquals(3, this.expandCollapseLayer.getColumnIndexByPosition(3));
assertEquals(4, this.expandCollapseLayer.getColumnIndexByPosition(4));
assertEquals(5, this.expandCollapseLayer.getColumnIndexByPosition(5));
assertEquals(9, this.expandCollapseLayer.getColumnCount());
collapse(3);
assertEquals(6, this.expandCollapseLayer.getColumnCount());
assertEquals(2, this.expandCollapseLayer.getColumnIndexByPosition(2));
assertEquals(6, this.expandCollapseLayer.getColumnIndexByPosition(3));
assertEquals(7, this.expandCollapseLayer.getColumnIndexByPosition(4));
assertEquals(8, this.expandCollapseLayer.getColumnIndexByPosition(5));
assertEquals("[2, 0]", this.expandCollapseLayer.getDataValueByPosition(2, 0));
assertEquals("[6, 0]", this.expandCollapseLayer.getDataValueByPosition(3, 0));
assertEquals("[7, 0]", this.expandCollapseLayer.getDataValueByPosition(4, 0));
assertEquals("[8, 0]", this.expandCollapseLayer.getDataValueByPosition(5, 0));
}
private void collapse(int columnIndex) {
this.model.getColumnGroupByIndex(columnIndex).setCollapsed(true);
}
private void expand(int columnIndex) {
this.model.getColumnGroupByIndex(columnIndex).setCollapsed(false);
}
}