blob: b1d604328285f146d8c0c95ea812b3bc98e473b6 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2013 Dirk Fauth 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:
* Dirk Fauth <dirk.fauth@gmail.com> - initial API and implementation
*******************************************************************************/
package org.eclipse.nebula.widgets.nattable.edit.command;
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.io.Serializable;
import java.util.List;
import org.eclipse.nebula.widgets.nattable.config.CellConfigAttributes;
import org.eclipse.nebula.widgets.nattable.config.EditableRule;
import org.eclipse.nebula.widgets.nattable.config.IEditableRule;
import org.eclipse.nebula.widgets.nattable.coordinate.PositionCoordinate;
import org.eclipse.nebula.widgets.nattable.data.IRowDataProvider;
import org.eclipse.nebula.widgets.nattable.data.IRowIdAccessor;
import org.eclipse.nebula.widgets.nattable.data.ListDataProvider;
import org.eclipse.nebula.widgets.nattable.data.ReflectiveColumnPropertyAccessor;
import org.eclipse.nebula.widgets.nattable.data.convert.DefaultBooleanDisplayConverter;
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.edit.ActiveCellEditorRegistry;
import org.eclipse.nebula.widgets.nattable.edit.EditConfigAttributes;
import org.eclipse.nebula.widgets.nattable.edit.editor.CheckBoxCellEditor;
import org.eclipse.nebula.widgets.nattable.edit.editor.ICellEditor;
import org.eclipse.nebula.widgets.nattable.edit.editor.TextCellEditor;
import org.eclipse.nebula.widgets.nattable.layer.DataLayer;
import org.eclipse.nebula.widgets.nattable.layer.cell.ILayerCell;
import org.eclipse.nebula.widgets.nattable.selection.RowSelectionModel;
import org.eclipse.nebula.widgets.nattable.selection.SelectionLayer;
import org.eclipse.nebula.widgets.nattable.style.DisplayMode;
import org.eclipse.nebula.widgets.nattable.test.fixture.NatTableFixture;
import org.eclipse.nebula.widgets.nattable.test.fixture.layer.GridLayerFixture;
import org.junit.Before;
import org.junit.Test;
@SuppressWarnings("deprecation")
public class RowSelectionEditUtilsTest {
private static final String TEST_LABEL = "testLabel";
private NatTableFixture natTable;
private GridLayerFixture gridLayerStack;
private SelectionLayer selectionLayer;
@Before
public void setup() {
List<RowDataFixture> listFixture = RowDataListFixture.getList(10);
IRowDataProvider<RowDataFixture> bodyDataProvider = new ListDataProvider<RowDataFixture>(listFixture,
new ReflectiveColumnPropertyAccessor<RowDataFixture>(RowDataListFixture.getPropertyNames()));
this.gridLayerStack = new GridLayerFixture(bodyDataProvider);
this.selectionLayer = this.gridLayerStack.getBodyLayer().getSelectionLayer();
this.selectionLayer.setSelectionModel(new RowSelectionModel<RowDataFixture>(
this.selectionLayer, bodyDataProvider,
new IRowIdAccessor<RowDataFixture>() {
@Override
public Serializable getRowId(RowDataFixture rowObject) {
return rowObject.getSecurity_id();
}
}));
this.natTable = new NatTableFixture(this.gridLayerStack);
// Ensure no active editor (static) is present
// Although deprecated this needs to still work for backwards
// compatibility
assertNull(ActiveCellEditorRegistry.getActiveCellEditor());
}
@Test
public void testGetLastSelectedCellWithoutSelection() {
assertNull(EditUtils.getLastSelectedCell(this.selectionLayer));
}
@Test
public void testGetLastSelectedCellWithSingleSelection() {
this.selectionLayer.selectCell(1, 1, false, false);
ILayerCell cell = EditUtils.getLastSelectedCell(this.selectionLayer);
assertNotNull(cell);
assertEquals(1, cell.getColumnIndex());
assertEquals(1, cell.getRowIndex());
}
@Test
public void testGetLastSelectedCellWithMultiSelection() {
this.selectionLayer.selectCell(1, 1, false, true);
this.selectionLayer.selectCell(2, 2, false, true);
this.selectionLayer.selectCell(3, 3, false, true);
ILayerCell cell = EditUtils.getLastSelectedCell(this.selectionLayer);
assertNotNull(cell);
assertEquals(3, cell.getColumnIndex());
assertEquals(3, cell.getRowIndex());
}
@Test
public void testGetLastSelectedCellEditorWithoutSelection() {
assertNull(EditUtils.getLastSelectedCellEditor(this.selectionLayer,
this.natTable.getConfigRegistry()));
}
@Test
public void testGetLastSelectedCellEditorWithSingleSelection() {
this.selectionLayer.selectCell(1, 1, false, false);
ICellEditor editor = EditUtils.getLastSelectedCellEditor(
this.selectionLayer, this.natTable.getConfigRegistry());
assertNotNull(editor);
assertTrue(editor instanceof TextCellEditor);
}
@Test
public void testGetLastSelectedCellEditorWithMultiSelection() {
this.selectionLayer.selectCell(1, 1, false, true);
this.selectionLayer.selectCell(2, 2, false, true);
this.selectionLayer.selectCell(3, 3, false, true);
ICellEditor editor = EditUtils.getLastSelectedCellEditor(
this.selectionLayer, this.natTable.getConfigRegistry());
assertNotNull(editor);
assertTrue(editor instanceof TextCellEditor);
}
@Test
public void testAllCellsEditableWithoutSelection() {
assertTrue(EditUtils.allCellsEditable(this.selectionLayer,
this.natTable.getConfigRegistry()));
}
@Test
public void testAllCellsEditableWithoutSelectionEnableEditing() {
this.natTable.enableEditingOnAllCells();
assertTrue(EditUtils.allCellsEditable(this.selectionLayer,
this.natTable.getConfigRegistry()));
}
@Test
public void testAllCellsEditableWithSingleSelection() {
this.selectionLayer.selectCell(1, 1, false, false);
assertFalse(EditUtils.allCellsEditable(this.selectionLayer,
this.natTable.getConfigRegistry()));
}
@Test
public void testAllCellsEditableWithSingleSelectionEnableEditing() {
this.natTable.enableEditingOnAllCells();
this.selectionLayer.selectCell(1, 1, false, false);
assertTrue(EditUtils.allCellsEditable(this.selectionLayer,
this.natTable.getConfigRegistry()));
}
@Test
public void testAllCellsEditableWithSingleSelectionOneColumnEditable() {
DataLayer bodyDataLayer = (DataLayer) this.gridLayerStack.getBodyDataLayer();
this.natTable.registerLabelOnColumn(bodyDataLayer, 1, TEST_LABEL);
this.natTable.getConfigRegistry().registerConfigAttribute(
EditConfigAttributes.CELL_EDITABLE_RULE, IEditableRule.ALWAYS_EDITABLE,
DisplayMode.EDIT, TEST_LABEL);
this.selectionLayer.selectCell(1, 1, false, false);
assertTrue(EditUtils.allCellsEditable(this.selectionLayer,
this.natTable.getConfigRegistry()));
}
@Test
public void testAllCellsEditableWithSingleSelectionOneColumnEditableSelectNonEditable() {
DataLayer bodyDataLayer = (DataLayer) this.gridLayerStack.getBodyDataLayer();
this.natTable.registerLabelOnColumn(bodyDataLayer, 1, TEST_LABEL);
this.natTable.getConfigRegistry().registerConfigAttribute(
EditConfigAttributes.CELL_EDITABLE_RULE, IEditableRule.ALWAYS_EDITABLE,
DisplayMode.EDIT, TEST_LABEL);
this.selectionLayer.selectCell(2, 1, false, false);
assertFalse(EditUtils.allCellsEditable(this.selectionLayer,
this.natTable.getConfigRegistry()));
}
@Test
public void testAllCellsEditableWithMultiSelection() {
this.selectionLayer.selectCell(1, 1, false, true);
this.selectionLayer.selectCell(2, 2, false, true);
this.selectionLayer.selectCell(3, 3, false, true);
assertFalse(EditUtils.allCellsEditable(this.selectionLayer,
this.natTable.getConfigRegistry()));
}
@Test
public void testAllCellsEditableWithMultiSelectionEnableEditing() {
this.natTable.enableEditingOnAllCells();
this.selectionLayer.selectCell(1, 1, false, true);
this.selectionLayer.selectCell(2, 2, false, true);
this.selectionLayer.selectCell(3, 3, false, true);
assertTrue(EditUtils.allCellsEditable(this.selectionLayer,
this.natTable.getConfigRegistry()));
}
@Test
public void testAllCellsEditableWithMultiSelectionOneColumnEditableMultiSelection() {
DataLayer bodyDataLayer = (DataLayer) this.gridLayerStack.getBodyDataLayer();
this.natTable.registerLabelOnColumn(bodyDataLayer, 1, TEST_LABEL);
this.natTable.getConfigRegistry().registerConfigAttribute(
EditConfigAttributes.CELL_EDITABLE_RULE, IEditableRule.ALWAYS_EDITABLE,
DisplayMode.EDIT, TEST_LABEL);
this.selectionLayer.selectCell(1, 1, false, true);
this.selectionLayer.selectCell(1, 2, false, true);
this.selectionLayer.selectCell(1, 3, false, true);
assertTrue(EditUtils.allCellsEditable(this.selectionLayer,
this.natTable.getConfigRegistry()));
}
@Test
public void testIsCellEditableWithoutSelection() {
PositionCoordinate coord = new PositionCoordinate(this.selectionLayer, 0, 0);
assertFalse(EditUtils.isCellEditable(this.selectionLayer,
this.natTable.getConfigRegistry(), coord));
}
@Test
public void testIsCellEditableWithoutSelectionEnableEditing() {
this.natTable.enableEditingOnAllCells();
PositionCoordinate coord = new PositionCoordinate(this.selectionLayer, 0, 0);
assertTrue(EditUtils.isCellEditable(this.selectionLayer,
this.natTable.getConfigRegistry(), coord));
}
@Test
public void testIsCellEditableWithSingleSelection() {
this.selectionLayer.selectCell(1, 1, false, false);
PositionCoordinate coord = new PositionCoordinate(this.selectionLayer, 1, 1);
assertFalse(EditUtils.isCellEditable(this.selectionLayer,
this.natTable.getConfigRegistry(), coord));
}
@Test
public void testIsCellEditableWithSingleSelectionEnableEditing() {
this.natTable.enableEditingOnAllCells();
this.selectionLayer.selectCell(1, 1, false, false);
PositionCoordinate coord = new PositionCoordinate(this.selectionLayer, 1, 1);
assertTrue(EditUtils.isCellEditable(this.selectionLayer,
this.natTable.getConfigRegistry(), coord));
}
@Test
public void testIsEditorSameWithoutSelection() {
assertTrue(EditUtils.isEditorSame(this.selectionLayer,
this.natTable.getConfigRegistry()));
}
@Test
public void testIsEditorSameWithSingleSelection() {
this.selectionLayer.selectCell(1, 1, false, false);
assertTrue(EditUtils.isEditorSame(this.selectionLayer,
this.natTable.getConfigRegistry()));
}
@Test
public void testIsEditorSameWithSingleSelectionOneChangedEditor() {
DataLayer bodyDataLayer = (DataLayer) this.gridLayerStack.getBodyDataLayer();
this.natTable.registerLabelOnColumn(bodyDataLayer, 1, TEST_LABEL);
this.natTable.getConfigRegistry().registerConfigAttribute(
EditConfigAttributes.CELL_EDITOR, new CheckBoxCellEditor(),
DisplayMode.EDIT, TEST_LABEL);
this.selectionLayer.selectCell(1, 1, false, false);
assertTrue(EditUtils.isEditorSame(this.selectionLayer,
this.natTable.getConfigRegistry()));
}
@Test
public void testIsEditorSameWithMultiSelectionOneColumnEditorMultiSelection() {
DataLayer bodyDataLayer = (DataLayer) this.gridLayerStack.getBodyDataLayer();
this.natTable.registerLabelOnColumn(bodyDataLayer, 1, TEST_LABEL);
this.natTable.getConfigRegistry().registerConfigAttribute(
EditConfigAttributes.CELL_EDITOR, new CheckBoxCellEditor(),
DisplayMode.EDIT, TEST_LABEL);
this.selectionLayer.selectCell(1, 1, false, true);
this.selectionLayer.selectCell(1, 2, false, true);
this.selectionLayer.selectCell(1, 3, false, true);
assertTrue(EditUtils.isEditorSame(this.selectionLayer,
this.natTable.getConfigRegistry()));
}
@Test
public void testIsEditorSameWithMultiSelection() {
this.selectionLayer.selectCell(1, 1, false, true);
this.selectionLayer.selectCell(2, 2, false, true);
this.selectionLayer.selectCell(3, 3, false, true);
assertTrue(EditUtils.isEditorSame(this.selectionLayer,
this.natTable.getConfigRegistry()));
}
@Test
public void testIsEditorSameWithMultiSelectionOneChangedEditor() {
this.selectionLayer.selectCell(1, 1, false, true);
this.selectionLayer.selectCell(2, 2, false, true);
this.selectionLayer.selectCell(3, 3, false, true);
DataLayer bodyDataLayer = (DataLayer) this.gridLayerStack.getBodyDataLayer();
this.natTable.registerLabelOnColumn(bodyDataLayer, 1, TEST_LABEL);
this.natTable.getConfigRegistry().registerConfigAttribute(
EditConfigAttributes.CELL_EDITOR, new CheckBoxCellEditor(),
DisplayMode.EDIT, TEST_LABEL);
// the result is true here because using the IRowSelectionModel the
// anchor is used to determine the cells to edit
assertTrue(EditUtils.isEditorSame(this.selectionLayer,
this.natTable.getConfigRegistry()));
}
@Test
public void testIsConverterSameWithoutSelection() {
assertTrue(EditUtils.isConverterSame(this.selectionLayer,
this.natTable.getConfigRegistry()));
}
@Test
public void testIsConverterSameWithSingleSelection() {
this.selectionLayer.selectCell(1, 1, false, false);
assertTrue(EditUtils.isConverterSame(this.selectionLayer,
this.natTable.getConfigRegistry()));
}
@Test
public void testIsConverterSameWithMultiSelection() {
this.selectionLayer.selectCell(1, 1, false, true);
this.selectionLayer.selectCell(2, 2, false, true);
this.selectionLayer.selectCell(3, 3, false, true);
assertTrue(EditUtils.isConverterSame(this.selectionLayer,
this.natTable.getConfigRegistry()));
}
@Test
public void testIsConverterSameWithSingleSelectionOneChangedConverter() {
DataLayer bodyDataLayer = (DataLayer) this.gridLayerStack.getBodyDataLayer();
this.natTable.registerLabelOnColumn(bodyDataLayer, 1, TEST_LABEL);
this.natTable.getConfigRegistry().registerConfigAttribute(
CellConfigAttributes.DISPLAY_CONVERTER,
new DefaultBooleanDisplayConverter(), DisplayMode.EDIT,
TEST_LABEL);
this.selectionLayer.selectCell(1, 1, false, false);
assertTrue(EditUtils.isConverterSame(this.selectionLayer,
this.natTable.getConfigRegistry()));
}
@Test
public void testIsConverterSameWithMultiSelectionOneColumnConverterMultiSelection() {
DataLayer bodyDataLayer = (DataLayer) this.gridLayerStack.getBodyDataLayer();
this.natTable.registerLabelOnColumn(bodyDataLayer, 1, TEST_LABEL);
this.natTable.getConfigRegistry().registerConfigAttribute(
CellConfigAttributes.DISPLAY_CONVERTER,
new DefaultBooleanDisplayConverter(), DisplayMode.EDIT,
TEST_LABEL);
this.selectionLayer.selectCell(1, 1, false, true);
this.selectionLayer.selectCell(1, 2, false, true);
this.selectionLayer.selectCell(1, 3, false, true);
assertTrue(EditUtils.isConverterSame(this.selectionLayer,
this.natTable.getConfigRegistry()));
}
@Test
public void testIsConverterSameWithMultiSelectionOneChangedConverter() {
this.selectionLayer.selectCell(1, 1, false, true);
this.selectionLayer.selectCell(2, 2, false, true);
this.selectionLayer.selectCell(3, 3, false, true);
DataLayer bodyDataLayer = (DataLayer) this.gridLayerStack.getBodyDataLayer();
this.natTable.registerLabelOnColumn(bodyDataLayer, 1, TEST_LABEL);
this.natTable.getConfigRegistry().registerConfigAttribute(
CellConfigAttributes.DISPLAY_CONVERTER,
new DefaultBooleanDisplayConverter(), DisplayMode.EDIT,
TEST_LABEL);
// the result is true here because using the IRowSelectionModel the
// anchor is used to determine the cells to edit
assertTrue(EditUtils.isConverterSame(this.selectionLayer,
this.natTable.getConfigRegistry()));
}
@Test
public void testIsValueSameWithoutSelection() {
assertTrue(EditUtils.isValueSame(this.selectionLayer));
}
@Test
public void testIsValueSameWithSingleSelection() {
this.selectionLayer.selectCell(1, 1, false, false);
assertTrue(EditUtils.isValueSame(this.selectionLayer));
}
@Test
public void testIsValueSameWithMultiSelection() {
this.selectionLayer.selectCell(1, 1, false, true);
this.selectionLayer.selectCell(2, 2, false, true);
this.selectionLayer.selectCell(3, 3, false, true);
assertFalse(EditUtils.isValueSame(this.selectionLayer));
}
@Test
public void testIsValueSameWithMultiSelectionEnsureSameValues() {
this.selectionLayer.selectCell(1, 1, false, true);
this.selectionLayer.selectCell(1, 2, false, true);
this.selectionLayer.selectCell(1, 3, false, true);
this.selectionLayer.doCommand(new UpdateDataCommand(this.selectionLayer, 1, 1, "Test"));
this.selectionLayer.doCommand(new UpdateDataCommand(this.selectionLayer, 1, 2, "Test"));
this.selectionLayer.doCommand(new UpdateDataCommand(this.selectionLayer, 1, 3, "Test"));
assertTrue(EditUtils.isValueSame(this.selectionLayer));
}
}