| /***************************************************************************** |
| * Copyright (c) 2015, 2016 CEA LIST, Dirk Fauth. |
| * |
| * 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: |
| * Dirk Fauth <dirk.fauth@googlemail.com> - Initial API and implementation |
| * |
| *****************************************************************************/ |
| package org.eclipse.nebula.widgets.nattable.selection; |
| |
| import static org.junit.Assert.assertEquals; |
| import static org.junit.Assert.assertFalse; |
| import static org.junit.Assert.assertNotNull; |
| import static org.junit.Assert.assertNull; |
| import static org.junit.Assert.assertTrue; |
| |
| import java.util.List; |
| |
| import org.eclipse.nebula.widgets.nattable.data.IRowDataProvider; |
| import org.eclipse.nebula.widgets.nattable.data.ListDataProvider; |
| import org.eclipse.nebula.widgets.nattable.data.ReflectiveColumnPropertyAccessor; |
| import org.eclipse.nebula.widgets.nattable.dataset.fixture.data.RowDataFixture; |
| import org.eclipse.nebula.widgets.nattable.dataset.fixture.data.RowDataListFixture; |
| import org.eclipse.nebula.widgets.nattable.layer.DataLayer; |
| import org.eclipse.nebula.widgets.nattable.layer.cell.ILayerCell; |
| import org.eclipse.nebula.widgets.nattable.test.fixture.data.DataProviderFixture; |
| import org.junit.Test; |
| |
| public class SelectionUtilsTest { |
| |
| @Test |
| public void testConsecutivePositions() { |
| int[] test = new int[] { 1, 2, 3, 4, 5 }; |
| assertTrue(SelectionUtils.isConsecutive(test)); |
| } |
| |
| @Test |
| public void testDuplicateConsecutivePositions() { |
| int[] test = new int[] { 1, 1, 2, 3, 4, 5 }; |
| assertFalse(SelectionUtils.isConsecutive(test)); |
| } |
| |
| @Test |
| public void testGapConsecutivePositions() { |
| int[] test = new int[] { 1, 3, 4, 5 }; |
| assertFalse(SelectionUtils.isConsecutive(test)); |
| } |
| |
| @Test |
| public void testEmptyArray() { |
| int[] test = new int[] {}; |
| assertTrue(SelectionUtils.isConsecutive(test)); |
| } |
| |
| @Test |
| public void testOneEntryArray() { |
| int[] test = new int[] { 42 }; |
| assertTrue(SelectionUtils.isConsecutive(test)); |
| } |
| |
| @Test |
| public void testGetBottomRightSelectAll() { |
| DataLayer dataLayer = new DataLayer(new DataProviderFixture(10, 10)); |
| SelectionLayer selectionLayer = new SelectionLayer(dataLayer); |
| |
| // select all cells |
| selectionLayer.selectAll(); |
| |
| ILayerCell bottomRight = SelectionUtils.getBottomRightCellInSelection(selectionLayer); |
| assertEquals(9, bottomRight.getColumnPosition()); |
| assertEquals(9, bottomRight.getRowPosition()); |
| } |
| |
| @Test |
| public void testGetBottomRightSelectOne() { |
| DataLayer dataLayer = new DataLayer(new DataProviderFixture(10, 10)); |
| SelectionLayer selectionLayer = new SelectionLayer(dataLayer); |
| |
| // select one cell |
| selectionLayer.selectCell(5, 5, false, false); |
| |
| ILayerCell bottomRight = SelectionUtils.getBottomRightCellInSelection(selectionLayer); |
| assertEquals(5, bottomRight.getColumnPosition()); |
| assertEquals(5, bottomRight.getRowPosition()); |
| } |
| |
| @Test |
| public void testGetBottomRightSelectNothing() { |
| DataLayer dataLayer = new DataLayer(new DataProviderFixture(10, 10)); |
| SelectionLayer selectionLayer = new SelectionLayer(dataLayer); |
| |
| ILayerCell bottomRight = SelectionUtils.getBottomRightCellInSelection(selectionLayer); |
| assertNull(bottomRight); |
| } |
| |
| @Test |
| public void testGetBottomRightSelectRegion() { |
| DataLayer dataLayer = new DataLayer(new DataProviderFixture(10, 10)); |
| SelectionLayer selectionLayer = new SelectionLayer(dataLayer); |
| |
| // select region |
| selectionLayer.selectRegion(2, 2, 3, 3); |
| |
| ILayerCell bottomRight = SelectionUtils.getBottomRightCellInSelection(selectionLayer); |
| assertEquals(4, bottomRight.getColumnPosition()); |
| assertEquals(4, bottomRight.getRowPosition()); |
| } |
| |
| @Test |
| public void testGetBottomRightSelectRegionDeselectMiddle() { |
| DataLayer dataLayer = new DataLayer(new DataProviderFixture(10, 10)); |
| SelectionLayer selectionLayer = new SelectionLayer(dataLayer); |
| |
| // select region |
| selectionLayer.selectRegion(2, 2, 3, 3); |
| |
| // deselect a cell |
| selectionLayer.clearSelection(3, 3); |
| |
| ILayerCell bottomRight = SelectionUtils.getBottomRightCellInSelection(selectionLayer); |
| assertNull(bottomRight); |
| } |
| |
| @Test |
| public void testGetBottomRightSelectRegionDeselectTopEdge() { |
| DataLayer dataLayer = new DataLayer(new DataProviderFixture(10, 10)); |
| SelectionLayer selectionLayer = new SelectionLayer(dataLayer); |
| |
| // select region |
| selectionLayer.selectRegion(2, 2, 3, 3); |
| |
| // deselect a cell |
| selectionLayer.clearSelection(2, 2); |
| |
| ILayerCell bottomRight = SelectionUtils.getBottomRightCellInSelection(selectionLayer); |
| assertNull(bottomRight); |
| } |
| |
| @Test |
| public void testGetBottomRightSelectRegionDeselectMiddleBottomEdge() { |
| DataLayer dataLayer = new DataLayer(new DataProviderFixture(10, 10)); |
| SelectionLayer selectionLayer = new SelectionLayer(dataLayer); |
| |
| // select region |
| selectionLayer.selectRegion(2, 2, 3, 3); |
| |
| // deselect a cell |
| selectionLayer.clearSelection(4, 4); |
| |
| ILayerCell bottomRight = SelectionUtils.getBottomRightCellInSelection(selectionLayer); |
| assertNull(bottomRight); |
| } |
| |
| @Test |
| public void testGetBottomRightSelectDifferentRows() { |
| DataLayer dataLayer = new DataLayer(new DataProviderFixture(10, 10)); |
| SelectionLayer selectionLayer = new SelectionLayer(dataLayer); |
| |
| // select cells for same columns in non consecutive rows |
| selectionLayer.selectRegion(2, 2, 3, 1); |
| selectionLayer.selectRegion(4, 4, 3, 1); |
| |
| assertEquals(6, selectionLayer.getSelectedCells().size()); |
| |
| ILayerCell bottomRight = SelectionUtils.getBottomRightCellInSelection(selectionLayer); |
| assertNull(bottomRight); |
| } |
| |
| @Test |
| public void testGetBottomRightSelectDifferentColumns() { |
| DataLayer dataLayer = new DataLayer(new DataProviderFixture(10, 10)); |
| SelectionLayer selectionLayer = new SelectionLayer(dataLayer); |
| |
| // select cells for same columns in non consecutive rows |
| selectionLayer.selectRegion(2, 2, 1, 3); |
| selectionLayer.selectRegion(4, 4, 1, 3); |
| |
| assertEquals(6, selectionLayer.getSelectedCells().size()); |
| |
| ILayerCell bottomRight = SelectionUtils.getBottomRightCellInSelection(selectionLayer); |
| assertNull(bottomRight); |
| } |
| |
| @Test |
| public void testGetEmptyListOnNoSelection() { |
| List<RowDataFixture> listFixture = RowDataListFixture.getList(10); |
| IRowDataProvider<RowDataFixture> bodyDataProvider = |
| new ListDataProvider<RowDataFixture>( |
| listFixture, |
| new ReflectiveColumnPropertyAccessor<RowDataFixture>( |
| RowDataListFixture.getPropertyNames())); |
| |
| DataLayer dataLayer = new DataLayer(bodyDataProvider); |
| SelectionLayer selectionLayer = new SelectionLayer(dataLayer); |
| |
| List<RowDataFixture> selected = SelectionUtils.getSelectedRowObjects( |
| selectionLayer, |
| bodyDataProvider, |
| false); |
| |
| assertNotNull(selected); |
| assertEquals(0, selected.size()); |
| } |
| |
| @Test |
| public void testGetSingleItemOnCellSelection() { |
| List<RowDataFixture> listFixture = RowDataListFixture.getList(10); |
| IRowDataProvider<RowDataFixture> bodyDataProvider = |
| new ListDataProvider<RowDataFixture>( |
| listFixture, |
| new ReflectiveColumnPropertyAccessor<RowDataFixture>( |
| RowDataListFixture.getPropertyNames())); |
| |
| DataLayer dataLayer = new DataLayer(bodyDataProvider); |
| SelectionLayer selectionLayer = new SelectionLayer(dataLayer); |
| |
| selectionLayer.selectCell(1, 3, false, false); |
| |
| List<RowDataFixture> selected = SelectionUtils.getSelectedRowObjects( |
| selectionLayer, |
| bodyDataProvider, |
| false); |
| |
| assertNotNull(selected); |
| assertEquals(1, selected.size()); |
| assertEquals(listFixture.get(3), selected.get(0)); |
| } |
| |
| @Test |
| public void testGetMultipleItemsOnCellSelection() { |
| List<RowDataFixture> listFixture = RowDataListFixture.getList(10); |
| IRowDataProvider<RowDataFixture> bodyDataProvider = |
| new ListDataProvider<RowDataFixture>( |
| listFixture, |
| new ReflectiveColumnPropertyAccessor<RowDataFixture>( |
| RowDataListFixture.getPropertyNames())); |
| |
| DataLayer dataLayer = new DataLayer(bodyDataProvider); |
| SelectionLayer selectionLayer = new SelectionLayer(dataLayer); |
| |
| selectionLayer.selectCell(1, 3, false, true); |
| selectionLayer.selectCell(1, 5, false, true); |
| |
| List<RowDataFixture> selected = SelectionUtils.getSelectedRowObjects( |
| selectionLayer, |
| bodyDataProvider, |
| false); |
| |
| assertNotNull(selected); |
| assertEquals(2, selected.size()); |
| assertEquals(listFixture.get(3), selected.get(0)); |
| assertEquals(listFixture.get(5), selected.get(1)); |
| } |
| |
| @Test |
| public void testGetSingleItemsOnFullRowSelection() { |
| List<RowDataFixture> listFixture = RowDataListFixture.getList(10); |
| IRowDataProvider<RowDataFixture> bodyDataProvider = |
| new ListDataProvider<RowDataFixture>( |
| listFixture, |
| new ReflectiveColumnPropertyAccessor<RowDataFixture>( |
| RowDataListFixture.getPropertyNames())); |
| |
| DataLayer dataLayer = new DataLayer(bodyDataProvider); |
| SelectionLayer selectionLayer = new SelectionLayer(dataLayer); |
| |
| selectionLayer.selectRow(0, 3, false, false); |
| |
| List<RowDataFixture> selected = SelectionUtils.getSelectedRowObjects( |
| selectionLayer, |
| bodyDataProvider, |
| true); |
| |
| assertNotNull(selected); |
| assertEquals(1, selected.size()); |
| assertEquals(listFixture.get(3), selected.get(0)); |
| } |
| |
| @Test |
| public void testGetMultipleItemsOnFullRowSelection() { |
| List<RowDataFixture> listFixture = RowDataListFixture.getList(10); |
| IRowDataProvider<RowDataFixture> bodyDataProvider = |
| new ListDataProvider<RowDataFixture>( |
| listFixture, |
| new ReflectiveColumnPropertyAccessor<RowDataFixture>( |
| RowDataListFixture.getPropertyNames())); |
| |
| DataLayer dataLayer = new DataLayer(bodyDataProvider); |
| SelectionLayer selectionLayer = new SelectionLayer(dataLayer); |
| |
| selectionLayer.selectRow(0, 3, false, true); |
| selectionLayer.selectRow(0, 5, false, true); |
| |
| List<RowDataFixture> selected = SelectionUtils.getSelectedRowObjects( |
| selectionLayer, |
| bodyDataProvider, |
| true); |
| |
| assertNotNull(selected); |
| assertEquals(2, selected.size()); |
| assertEquals(listFixture.get(3), selected.get(0)); |
| assertEquals(listFixture.get(5), selected.get(1)); |
| } |
| |
| @Test |
| public void testGetEmptyListOnCellSelectionForFullRowSelection() { |
| List<RowDataFixture> listFixture = RowDataListFixture.getList(10); |
| IRowDataProvider<RowDataFixture> bodyDataProvider = |
| new ListDataProvider<RowDataFixture>( |
| listFixture, |
| new ReflectiveColumnPropertyAccessor<RowDataFixture>( |
| RowDataListFixture.getPropertyNames())); |
| |
| DataLayer dataLayer = new DataLayer(bodyDataProvider); |
| SelectionLayer selectionLayer = new SelectionLayer(dataLayer); |
| |
| selectionLayer.selectCell(1, 3, false, false); |
| |
| List<RowDataFixture> selected = SelectionUtils.getSelectedRowObjects( |
| selectionLayer, |
| bodyDataProvider, |
| true); |
| |
| assertNotNull(selected); |
| assertEquals(0, selected.size()); |
| } |
| } |