blob: 88982aa04a0eb9a7cb0d1eaaab2641459a1453c4 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2014, 2020 Dirk Fauth.
*
* 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.selection;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import java.io.Serializable;
import java.util.Arrays;
import org.eclipse.nebula.widgets.nattable.config.CellConfigAttributes;
import org.eclipse.nebula.widgets.nattable.config.IConfigRegistry;
import org.eclipse.nebula.widgets.nattable.config.IEditableRule;
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.data.validate.DefaultDataValidator;
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.EditConfigAttributes;
import org.eclipse.nebula.widgets.nattable.edit.command.EditSelectionCommand;
import org.eclipse.nebula.widgets.nattable.edit.config.DefaultEditBindings;
import org.eclipse.nebula.widgets.nattable.edit.config.DefaultEditConfiguration;
import org.eclipse.nebula.widgets.nattable.edit.editor.TextCellEditor;
import org.eclipse.nebula.widgets.nattable.grid.GridRegion;
import org.eclipse.nebula.widgets.nattable.layer.DataLayer;
import org.eclipse.nebula.widgets.nattable.layer.cell.AggregateConfigLabelAccumulator;
import org.eclipse.nebula.widgets.nattable.layer.cell.ColumnLabelAccumulator;
import org.eclipse.nebula.widgets.nattable.layer.cell.RowOverrideLabelAccumulator;
import org.eclipse.nebula.widgets.nattable.style.DisplayMode;
import org.eclipse.nebula.widgets.nattable.test.fixture.NatTableFixture;
import org.eclipse.nebula.widgets.nattable.test.integration.SWTUtils;
import org.eclipse.nebula.widgets.nattable.viewport.ViewportLayer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Text;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
public class EditTraversalStrategyUpDownTest {
private static final String NOT_EDITABLE = "NOT_EDITABLE";
private DataLayer dataLayer;
private SelectionLayer selectionLayer;
private ViewportLayer viewportLayer;
private NatTableFixture natTable;
private RowOverrideLabelAccumulator<RowDataFixture> overrider;
@Before
public void setUp() {
// only use 10 columns to make the test cases easier
String[] propertyNames = Arrays.copyOfRange(RowDataListFixture.getPropertyNames(), 0, 10);
IRowDataProvider<RowDataFixture> bodyDataProvider = new ListDataProvider<>(
RowDataListFixture.getList(10),
new ReflectiveColumnPropertyAccessor<RowDataFixture>(propertyNames));
this.dataLayer = new DataLayer(bodyDataProvider, 20, 20);
this.selectionLayer = new SelectionLayer(this.dataLayer);
this.viewportLayer = new ViewportLayer(this.selectionLayer);
this.viewportLayer.setRegionName(GridRegion.BODY);
this.viewportLayer.addConfiguration(new DefaultEditBindings());
this.viewportLayer.addConfiguration(new DefaultEditConfiguration() {
@Override
public void configureRegistry(IConfigRegistry configRegistry) {
configRegistry.registerConfigAttribute(
EditConfigAttributes.CELL_EDITOR,
new TextCellEditor(true, true));
configRegistry.registerConfigAttribute(
EditConfigAttributes.DATA_VALIDATOR,
new DefaultDataValidator());
configRegistry.registerConfigAttribute(
CellConfigAttributes.DISPLAY_CONVERTER,
new DefaultBooleanDisplayConverter(),
DisplayMode.NORMAL,
ColumnLabelAccumulator.COLUMN_LABEL_PREFIX + 9);
}
});
this.natTable = new NatTableFixture(this.viewportLayer);
this.natTable.enableEditingOnAllCells();
this.natTable.getConfigRegistry().registerConfigAttribute(
EditConfigAttributes.CELL_EDITABLE_RULE,
IEditableRule.NEVER_EDITABLE,
DisplayMode.EDIT,
NOT_EDITABLE);
this.natTable.getConfigRegistry().registerConfigAttribute(
EditConfigAttributes.OPEN_ADJACENT_EDITOR,
Boolean.TRUE);
// register non editable rows
this.overrider = new RowOverrideLabelAccumulator<>(bodyDataProvider, new IRowIdAccessor<RowDataFixture>() {
@Override
public Serializable getRowId(RowDataFixture rowObject) {
return rowObject.getSecurity_id();
}
});
this.overrider.registerRowOverrides(2, NOT_EDITABLE);
this.overrider.registerRowOverrides(5, NOT_EDITABLE);
this.overrider.registerRowOverrides(6, NOT_EDITABLE);
this.overrider.registerRowOverrides(7, NOT_EDITABLE);
this.overrider.registerRowOverrides(8, NOT_EDITABLE);
this.overrider.registerRowOverrides(9, NOT_EDITABLE);
AggregateConfigLabelAccumulator accumulator = new AggregateConfigLabelAccumulator();
accumulator.add(this.overrider);
accumulator.add(new ColumnLabelAccumulator());
this.dataLayer.setConfigLabelAccumulator(accumulator);
}
@After
public void cleanUp() {
this.selectionLayer.clear();
// since we are not interested in commit operations it is sufficient to
// close the editor
if (this.natTable.getActiveCellEditor() != null) {
this.natTable.getActiveCellEditor().close();
}
}
// move down
@Test
public void testOpenAdjacentDownAxis() {
// register axis traversal
this.viewportLayer.registerCommandHandler(
new MoveCellSelectionCommandHandler(this.selectionLayer,
new EditTraversalStrategy(ITraversalStrategy.AXIS_TRAVERSAL_STRATEGY, this.natTable)));
// select a cell
this.selectionLayer.setSelectedCell(0, 0);
assertEquals(0, this.selectionLayer.getLastSelectedCell().getColumnPosition());
assertEquals(0, this.selectionLayer.getLastSelectedCell().getRowPosition());
// open editor
this.natTable.doCommand(new EditSelectionCommand(this.natTable, this.natTable.getConfigRegistry()));
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(0, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(0, this.natTable.getActiveCellEditor().getRowIndex());
// traverse down
processEnter();
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(0, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(1, this.natTable.getActiveCellEditor().getRowIndex());
}
@Test
public void testOpenAdjacentDownStepOverAxis() {
// register axis traversal
this.viewportLayer.registerCommandHandler(
new MoveCellSelectionCommandHandler(this.selectionLayer,
new EditTraversalStrategy(ITraversalStrategy.AXIS_TRAVERSAL_STRATEGY, this.natTable)));
// select a cell
this.selectionLayer.setSelectedCell(0, 0);
assertEquals(0, this.selectionLayer.getLastSelectedCell().getColumnPosition());
assertEquals(0, this.selectionLayer.getLastSelectedCell().getRowPosition());
// open editor
this.natTable.doCommand(new EditSelectionCommand(this.natTable, this.natTable.getConfigRegistry()));
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(0, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(0, this.natTable.getActiveCellEditor().getRowIndex());
// traverse down 2 times
processEnter();
processEnter();
// row 3 since row 2 is not editable
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(0, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(3, this.natTable.getActiveCellEditor().getRowIndex());
}
@Test
public void testOpenAdjacentDownStepOverEndAxis() {
// register axis traversal
this.viewportLayer.registerCommandHandler(
new MoveCellSelectionCommandHandler(this.selectionLayer,
new EditTraversalStrategy(ITraversalStrategy.AXIS_TRAVERSAL_STRATEGY, this.natTable)));
// select a cell
this.selectionLayer.setSelectedCell(0, 0);
assertEquals(0, this.selectionLayer.getLastSelectedCell().getColumnPosition());
assertEquals(0, this.selectionLayer.getLastSelectedCell().getRowPosition());
// open editor
this.natTable.doCommand(new EditSelectionCommand(this.natTable, this.natTable.getConfigRegistry()));
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(0, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(0, this.natTable.getActiveCellEditor().getRowIndex());
// traverse down 4 times
processEnter();
processEnter();
processEnter();
processEnter();
// we expect the traversal stopped at the last editable cell in the
// current column
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(0, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(4, this.natTable.getActiveCellEditor().getRowIndex());
}
@Test
public void testOpenAdjacentDownOneEditableColumnAxis() {
// register axis traversal
this.viewportLayer.registerCommandHandler(
new MoveCellSelectionCommandHandler(this.selectionLayer,
new EditTraversalStrategy(ITraversalStrategy.AXIS_TRAVERSAL_STRATEGY, this.natTable)));
// ensure only one row is editable
this.overrider.registerRowOverrides(0, NOT_EDITABLE);
this.overrider.registerRowOverrides(1, NOT_EDITABLE);
this.overrider.registerRowOverrides(3, NOT_EDITABLE);
// select a cell
this.selectionLayer.setSelectedCell(0, 4);
assertEquals(0, this.selectionLayer.getLastSelectedCell().getColumnPosition());
assertEquals(4, this.selectionLayer.getLastSelectedCell().getRowPosition());
// open editor
this.natTable.doCommand(new EditSelectionCommand(this.natTable, this.natTable.getConfigRegistry()));
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(0, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(4, this.natTable.getActiveCellEditor().getRowIndex());
// traverse down 2 times
processEnter();
processEnter();
// we expect to stay at the same editable cell
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(0, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(4, this.natTable.getActiveCellEditor().getRowIndex());
}
@Test
public void testOpenAdjacentDownAxisCycle() {
// register axis traversal
this.viewportLayer.registerCommandHandler(
new MoveCellSelectionCommandHandler(this.selectionLayer,
new EditTraversalStrategy(ITraversalStrategy.AXIS_CYCLE_TRAVERSAL_STRATEGY, this.natTable)));
// select a cell
this.selectionLayer.setSelectedCell(0, 0);
assertEquals(0, this.selectionLayer.getLastSelectedCell().getColumnPosition());
assertEquals(0, this.selectionLayer.getLastSelectedCell().getRowPosition());
// open editor
this.natTable.doCommand(new EditSelectionCommand(this.natTable, this.natTable.getConfigRegistry()));
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(0, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(0, this.natTable.getActiveCellEditor().getRowIndex());
// traverse down
processEnter();
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(0, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(1, this.natTable.getActiveCellEditor().getRowIndex());
}
@Test
public void testOpenAdjacentDownStepOverAxisCycle() {
// register axis traversal
this.viewportLayer.registerCommandHandler(
new MoveCellSelectionCommandHandler(this.selectionLayer,
new EditTraversalStrategy(ITraversalStrategy.AXIS_CYCLE_TRAVERSAL_STRATEGY, this.natTable)));
// select a cell
this.selectionLayer.setSelectedCell(0, 0);
assertEquals(0, this.selectionLayer.getLastSelectedCell().getColumnPosition());
assertEquals(0, this.selectionLayer.getLastSelectedCell().getRowPosition());
// open editor
this.natTable.doCommand(new EditSelectionCommand(this.natTable, this.natTable.getConfigRegistry()));
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(0, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(0, this.natTable.getActiveCellEditor().getRowIndex());
// traverse down 2 times
processEnter();
processEnter();
// row 3 since row 2 is not editable
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(0, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(3, this.natTable.getActiveCellEditor().getRowIndex());
}
@Test
public void testOpenAdjacentDownStepOverEndAxisCycle() {
// register axis traversal
this.viewportLayer.registerCommandHandler(
new MoveCellSelectionCommandHandler(this.selectionLayer,
new EditTraversalStrategy(ITraversalStrategy.AXIS_CYCLE_TRAVERSAL_STRATEGY, this.natTable)));
// select a cell
this.selectionLayer.setSelectedCell(0, 0);
assertEquals(0, this.selectionLayer.getLastSelectedCell().getColumnPosition());
assertEquals(0, this.selectionLayer.getLastSelectedCell().getRowPosition());
// open editor
this.natTable.doCommand(new EditSelectionCommand(this.natTable, this.natTable.getConfigRegistry()));
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(0, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(0, this.natTable.getActiveCellEditor().getRowIndex());
// traverse down 4 times
processEnter();
processEnter();
processEnter();
processEnter();
// we expect the traversal cycled to the beginning of the current column
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(0, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(0, this.natTable.getActiveCellEditor().getRowIndex());
}
@Test
public void testOpenAdjacentDownOneEditableColumnAxisCycle() {
// register axis traversal
this.viewportLayer.registerCommandHandler(
new MoveCellSelectionCommandHandler(this.selectionLayer,
new EditTraversalStrategy(ITraversalStrategy.AXIS_CYCLE_TRAVERSAL_STRATEGY, this.natTable)));
// ensure only one row is editable
this.overrider.registerRowOverrides(0, NOT_EDITABLE);
this.overrider.registerRowOverrides(1, NOT_EDITABLE);
this.overrider.registerRowOverrides(3, NOT_EDITABLE);
// select a cell
this.selectionLayer.setSelectedCell(0, 4);
assertEquals(0, this.selectionLayer.getLastSelectedCell().getColumnPosition());
assertEquals(4, this.selectionLayer.getLastSelectedCell().getRowPosition());
// open editor
this.natTable.doCommand(new EditSelectionCommand(this.natTable, this.natTable.getConfigRegistry()));
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(0, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(4, this.natTable.getActiveCellEditor().getRowIndex());
// traverse down 2 times
processEnter();
processEnter();
// we expect to stay at the same cell
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(0, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(4, this.natTable.getActiveCellEditor().getRowIndex());
}
@Test
public void testOpenAdjacentDownTable() {
// register axis traversal
this.viewportLayer.registerCommandHandler(
new MoveCellSelectionCommandHandler(this.selectionLayer,
new EditTraversalStrategy(ITraversalStrategy.TABLE_TRAVERSAL_STRATEGY, this.natTable)));
// select a cell
this.selectionLayer.setSelectedCell(0, 0);
assertEquals(0, this.selectionLayer.getLastSelectedCell().getColumnPosition());
assertEquals(0, this.selectionLayer.getLastSelectedCell().getRowPosition());
// open editor
this.natTable.doCommand(new EditSelectionCommand(this.natTable, this.natTable.getConfigRegistry()));
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(0, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(0, this.natTable.getActiveCellEditor().getRowIndex());
// traverse down
processEnter();
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(0, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(1, this.natTable.getActiveCellEditor().getRowIndex());
}
@Test
public void testOpenAdjacentDownStepOverTable() {
// register axis traversal
this.viewportLayer.registerCommandHandler(
new MoveCellSelectionCommandHandler(this.selectionLayer,
new EditTraversalStrategy(ITraversalStrategy.TABLE_TRAVERSAL_STRATEGY, this.natTable)));
// select a cell
this.selectionLayer.setSelectedCell(0, 0);
assertEquals(0, this.selectionLayer.getLastSelectedCell().getColumnPosition());
assertEquals(0, this.selectionLayer.getLastSelectedCell().getRowPosition());
// open editor
this.natTable.doCommand(new EditSelectionCommand(this.natTable, this.natTable.getConfigRegistry()));
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(0, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(0, this.natTable.getActiveCellEditor().getRowIndex());
// traverse down 2 times
processEnter();
processEnter();
// row 3 since row 2 is not editable
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(0, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(3, this.natTable.getActiveCellEditor().getRowIndex());
}
@Test
public void testOpenAdjacentDownStepOverEndTable() {
// register axis traversal
this.viewportLayer.registerCommandHandler(
new MoveCellSelectionCommandHandler(this.selectionLayer,
new EditTraversalStrategy(ITraversalStrategy.TABLE_TRAVERSAL_STRATEGY, this.natTable)));
// select a cell
this.selectionLayer.setSelectedCell(0, 0);
assertEquals(0, this.selectionLayer.getLastSelectedCell().getColumnPosition());
assertEquals(0, this.selectionLayer.getLastSelectedCell().getRowPosition());
// open editor
this.natTable.doCommand(new EditSelectionCommand(this.natTable, this.natTable.getConfigRegistry()));
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(0, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(0, this.natTable.getActiveCellEditor().getRowIndex());
// traverse down 4 times
processEnter();
processEnter();
processEnter();
processEnter();
// we expect the traversal cycled to the beginning of the next column
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(1, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(0, this.natTable.getActiveCellEditor().getRowIndex());
}
@Test
public void testOpenAdjacentDownOneEditableColumnTable() {
// register axis traversal
this.viewportLayer.registerCommandHandler(
new MoveCellSelectionCommandHandler(this.selectionLayer,
new EditTraversalStrategy(ITraversalStrategy.TABLE_TRAVERSAL_STRATEGY, this.natTable)));
// ensure only one row is editable
this.overrider.registerRowOverrides(0, NOT_EDITABLE);
this.overrider.registerRowOverrides(1, NOT_EDITABLE);
this.overrider.registerRowOverrides(3, NOT_EDITABLE);
// select a cell
this.selectionLayer.setSelectedCell(0, 4);
assertEquals(0, this.selectionLayer.getLastSelectedCell().getColumnPosition());
assertEquals(4, this.selectionLayer.getLastSelectedCell().getRowPosition());
// open editor
this.natTable.doCommand(new EditSelectionCommand(this.natTable, this.natTable.getConfigRegistry()));
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(0, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(4, this.natTable.getActiveCellEditor().getRowIndex());
// traverse down 2 times
processEnter();
processEnter();
// we expect to traverse 2 columns right
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(2, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(4, this.natTable.getActiveCellEditor().getRowIndex());
}
@Test
public void testOpenAdjacentDownStepOverEndBottomTable() {
// register axis traversal
this.viewportLayer.registerCommandHandler(
new MoveCellSelectionCommandHandler(this.selectionLayer,
new EditTraversalStrategy(ITraversalStrategy.TABLE_TRAVERSAL_STRATEGY, this.natTable)));
// select a cell
this.selectionLayer.setSelectedCell(9, 4);
assertEquals(9, this.selectionLayer.getLastSelectedCell().getColumnPosition());
assertEquals(4, this.selectionLayer.getLastSelectedCell().getRowPosition());
// open editor
this.natTable.doCommand(new EditSelectionCommand(this.natTable, this.natTable.getConfigRegistry()));
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(9, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(4, this.natTable.getActiveCellEditor().getRowIndex());
// traverse down 2 times
processEnter();
processEnter();
// we expect the traversal stops at last editable cell in table
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(9, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(4, this.natTable.getActiveCellEditor().getRowIndex());
}
@Test
public void testOpenAdjacentDownTableCycle() {
// register axis traversal
this.viewportLayer.registerCommandHandler(
new MoveCellSelectionCommandHandler(this.selectionLayer,
new EditTraversalStrategy(ITraversalStrategy.TABLE_CYCLE_TRAVERSAL_STRATEGY, this.natTable)));
// select a cell
this.selectionLayer.setSelectedCell(0, 0);
assertEquals(0, this.selectionLayer.getLastSelectedCell().getColumnPosition());
assertEquals(0, this.selectionLayer.getLastSelectedCell().getRowPosition());
// open editor
this.natTable.doCommand(new EditSelectionCommand(this.natTable, this.natTable.getConfigRegistry()));
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(0, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(0, this.natTable.getActiveCellEditor().getRowIndex());
// traverse down
processEnter();
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(0, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(1, this.natTable.getActiveCellEditor().getRowIndex());
}
@Test
public void testOpenAdjacentDownStepOverTableCycle() {
// register axis traversal
this.viewportLayer.registerCommandHandler(
new MoveCellSelectionCommandHandler(this.selectionLayer,
new EditTraversalStrategy(ITraversalStrategy.TABLE_CYCLE_TRAVERSAL_STRATEGY, this.natTable)));
// select a cell
this.selectionLayer.setSelectedCell(0, 0);
assertEquals(0, this.selectionLayer.getLastSelectedCell().getColumnPosition());
assertEquals(0, this.selectionLayer.getLastSelectedCell().getRowPosition());
// open editor
this.natTable.doCommand(new EditSelectionCommand(this.natTable, this.natTable.getConfigRegistry()));
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(0, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(0, this.natTable.getActiveCellEditor().getRowIndex());
// traverse down 2 times
processEnter();
processEnter();
// row 3 since row 2 is not editable
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(0, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(3, this.natTable.getActiveCellEditor().getRowIndex());
}
@Test
public void testOpenAdjacentDownStepOverEndTableCycle() {
// register axis traversal
this.viewportLayer.registerCommandHandler(
new MoveCellSelectionCommandHandler(this.selectionLayer,
new EditTraversalStrategy(ITraversalStrategy.TABLE_CYCLE_TRAVERSAL_STRATEGY, this.natTable)));
// select a cell
this.selectionLayer.setSelectedCell(0, 0);
assertEquals(0, this.selectionLayer.getLastSelectedCell().getColumnPosition());
assertEquals(0, this.selectionLayer.getLastSelectedCell().getRowPosition());
// open editor
this.natTable.doCommand(new EditSelectionCommand(this.natTable, this.natTable.getConfigRegistry()));
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(0, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(0, this.natTable.getActiveCellEditor().getRowIndex());
// traverse down 4 times
processEnter();
processEnter();
processEnter();
processEnter();
// we expect the traversal cycled to the beginning of the next row
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(1, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(0, this.natTable.getActiveCellEditor().getRowIndex());
}
@Test
public void testOpenAdjacentDownOneEditableColumnTableCycle() {
// register axis traversal
this.viewportLayer.registerCommandHandler(
new MoveCellSelectionCommandHandler(this.selectionLayer,
new EditTraversalStrategy(ITraversalStrategy.TABLE_CYCLE_TRAVERSAL_STRATEGY, this.natTable)));
// ensure only one row is editable
this.overrider.registerRowOverrides(0, NOT_EDITABLE);
this.overrider.registerRowOverrides(1, NOT_EDITABLE);
this.overrider.registerRowOverrides(3, NOT_EDITABLE);
// select a cell
this.selectionLayer.setSelectedCell(0, 4);
assertEquals(0, this.selectionLayer.getLastSelectedCell().getColumnPosition());
assertEquals(4, this.selectionLayer.getLastSelectedCell().getRowPosition());
// open editor
this.natTable.doCommand(new EditSelectionCommand(this.natTable, this.natTable.getConfigRegistry()));
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(0, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(4, this.natTable.getActiveCellEditor().getRowIndex());
// traverse down 2 times
processEnter();
processEnter();
// we expect to traverse 2 columns right
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(2, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(4, this.natTable.getActiveCellEditor().getRowIndex());
}
@Test
public void testOpenAdjacentDownStepOverEndBottomTableCycle() {
// register axis traversal
this.viewportLayer.registerCommandHandler(
new MoveCellSelectionCommandHandler(this.selectionLayer,
new EditTraversalStrategy(ITraversalStrategy.TABLE_CYCLE_TRAVERSAL_STRATEGY, this.natTable)));
// select a cell
this.selectionLayer.setSelectedCell(9, 4);
assertEquals(9, this.selectionLayer.getLastSelectedCell().getColumnPosition());
assertEquals(4, this.selectionLayer.getLastSelectedCell().getRowPosition());
// open editor
this.natTable.doCommand(new EditSelectionCommand(this.natTable, this.natTable.getConfigRegistry()));
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(9, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(4, this.natTable.getActiveCellEditor().getRowIndex());
// traverse down 2 times
processEnter();
processEnter();
// we expect the traversal started over at table beginning
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(0, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(1, this.natTable.getActiveCellEditor().getRowIndex());
}
// move up
@Test
public void testOpenAdjacentUpAxis() {
// register axis traversal
this.viewportLayer.registerCommandHandler(
new MoveCellSelectionCommandHandler(this.selectionLayer,
new EditTraversalStrategy(ITraversalStrategy.AXIS_TRAVERSAL_STRATEGY, this.natTable)));
// select a cell
this.selectionLayer.setSelectedCell(0, 1);
assertEquals(0, this.selectionLayer.getLastSelectedCell().getColumnPosition());
assertEquals(1, this.selectionLayer.getLastSelectedCell().getRowPosition());
// open editor
this.natTable.doCommand(new EditSelectionCommand(this.natTable, this.natTable.getConfigRegistry()));
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(0, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(1, this.natTable.getActiveCellEditor().getRowIndex());
// traverse to left
processShiftEnter();
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(0, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(0, this.natTable.getActiveCellEditor().getRowIndex());
}
@Test
public void testOpenAdjacentUpStepOverAxis() {
// register axis traversal
this.viewportLayer.registerCommandHandler(
new MoveCellSelectionCommandHandler(this.selectionLayer,
new EditTraversalStrategy(ITraversalStrategy.AXIS_TRAVERSAL_STRATEGY, this.natTable)));
// select a cell
this.selectionLayer.setSelectedCell(0, 3);
assertEquals(0, this.selectionLayer.getLastSelectedCell().getColumnPosition());
assertEquals(3, this.selectionLayer.getLastSelectedCell().getRowPosition());
// open editor
this.natTable.doCommand(new EditSelectionCommand(this.natTable, this.natTable.getConfigRegistry()));
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(0, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(3, this.natTable.getActiveCellEditor().getRowIndex());
// traverse up 2 times
processShiftEnter();
processShiftEnter();
// row 0 since row 2 is not editable
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(0, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(0, this.natTable.getActiveCellEditor().getRowIndex());
}
@Test
public void testOpenAdjacentUpStepOverEndAxis() {
// register axis traversal
this.viewportLayer.registerCommandHandler(
new MoveCellSelectionCommandHandler(this.selectionLayer,
new EditTraversalStrategy(ITraversalStrategy.AXIS_TRAVERSAL_STRATEGY, this.natTable)));
// select a cell
this.selectionLayer.setSelectedCell(2, 4);
assertEquals(2, this.selectionLayer.getLastSelectedCell().getColumnPosition());
assertEquals(4, this.selectionLayer.getLastSelectedCell().getRowPosition());
// open editor
this.natTable.doCommand(new EditSelectionCommand(this.natTable, this.natTable.getConfigRegistry()));
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(2, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(4, this.natTable.getActiveCellEditor().getRowIndex());
// traverse up 4 times
processShiftEnter();
processShiftEnter();
processShiftEnter();
processShiftEnter();
// we expect the traversal stopped at the first editable cell in the
// current column
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(2, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(0, this.natTable.getActiveCellEditor().getRowIndex());
}
@Test
public void testOpenAdjacentUpOneEditableColumnAxis() {
// register axis traversal
this.viewportLayer.registerCommandHandler(
new MoveCellSelectionCommandHandler(this.selectionLayer,
new EditTraversalStrategy(ITraversalStrategy.AXIS_TRAVERSAL_STRATEGY, this.natTable)));
// ensure only one row is editable
this.overrider.registerRowOverrides(0, NOT_EDITABLE);
this.overrider.registerRowOverrides(1, NOT_EDITABLE);
this.overrider.registerRowOverrides(3, NOT_EDITABLE);
// select a cell
this.selectionLayer.setSelectedCell(2, 4);
assertEquals(2, this.selectionLayer.getLastSelectedCell().getColumnPosition());
assertEquals(4, this.selectionLayer.getLastSelectedCell().getRowPosition());
// open editor
this.natTable.doCommand(new EditSelectionCommand(this.natTable, this.natTable.getConfigRegistry()));
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(2, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(4, this.natTable.getActiveCellEditor().getRowIndex());
// traverse up 2 times
processShiftEnter();
processShiftEnter();
// we expect to stay at the same editable cell
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(2, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(4, this.natTable.getActiveCellEditor().getRowIndex());
}
@Test
public void testOpenAdjacentUpAxisCycle() {
// register axis traversal
this.viewportLayer.registerCommandHandler(
new MoveCellSelectionCommandHandler(this.selectionLayer,
new EditTraversalStrategy(ITraversalStrategy.AXIS_CYCLE_TRAVERSAL_STRATEGY, this.natTable)));
// select a cell
this.selectionLayer.setSelectedCell(0, 1);
assertEquals(0, this.selectionLayer.getLastSelectedCell().getColumnPosition());
assertEquals(1, this.selectionLayer.getLastSelectedCell().getRowPosition());
// open editor
this.natTable.doCommand(new EditSelectionCommand(this.natTable, this.natTable.getConfigRegistry()));
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(0, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(1, this.natTable.getActiveCellEditor().getRowIndex());
// traverse up
processShiftEnter();
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(0, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(0, this.natTable.getActiveCellEditor().getRowIndex());
}
@Test
public void testOpenAdjacentUpStepOverAxisCycle() {
// register axis traversal
this.viewportLayer.registerCommandHandler(
new MoveCellSelectionCommandHandler(this.selectionLayer,
new EditTraversalStrategy(ITraversalStrategy.AXIS_CYCLE_TRAVERSAL_STRATEGY, this.natTable)));
// select a cell
this.selectionLayer.setSelectedCell(0, 3);
assertEquals(0, this.selectionLayer.getLastSelectedCell().getColumnPosition());
assertEquals(3, this.selectionLayer.getLastSelectedCell().getRowPosition());
// open editor
this.natTable.doCommand(new EditSelectionCommand(this.natTable, this.natTable.getConfigRegistry()));
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(0, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(3, this.natTable.getActiveCellEditor().getRowIndex());
// traverse up 2 times
processShiftEnter();
processShiftEnter();
// row 0 since row 2 is not editable
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(0, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(0, this.natTable.getActiveCellEditor().getRowIndex());
}
@Test
public void testOpenAdjacentUpStepOverEndAxisCycle() {
// register axis traversal
this.viewportLayer.registerCommandHandler(
new MoveCellSelectionCommandHandler(this.selectionLayer,
new EditTraversalStrategy(ITraversalStrategy.AXIS_CYCLE_TRAVERSAL_STRATEGY, this.natTable)));
// select a cell
this.selectionLayer.setSelectedCell(2, 3);
assertEquals(2, this.selectionLayer.getLastSelectedCell().getColumnPosition());
assertEquals(3, this.selectionLayer.getLastSelectedCell().getRowPosition());
// open editor
this.natTable.doCommand(new EditSelectionCommand(this.natTable, this.natTable.getConfigRegistry()));
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(2, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(3, this.natTable.getActiveCellEditor().getRowIndex());
// traverse up 4 times
processShiftEnter();
processShiftEnter();
processShiftEnter();
processShiftEnter();
// we expect the traversal cycle so we will be at row 1
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(2, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(3, this.natTable.getActiveCellEditor().getRowIndex());
}
@Test
public void testOpenAdjacentUpOneEditableColumnAxisCycle() {
// register axis traversal
this.viewportLayer.registerCommandHandler(
new MoveCellSelectionCommandHandler(this.selectionLayer,
new EditTraversalStrategy(ITraversalStrategy.AXIS_CYCLE_TRAVERSAL_STRATEGY, this.natTable)));
// ensure only one row is editable
this.overrider.registerRowOverrides(0, NOT_EDITABLE);
this.overrider.registerRowOverrides(1, NOT_EDITABLE);
this.overrider.registerRowOverrides(3, NOT_EDITABLE);
// select a cell
this.selectionLayer.setSelectedCell(2, 4);
assertEquals(2, this.selectionLayer.getLastSelectedCell().getColumnPosition());
assertEquals(4, this.selectionLayer.getLastSelectedCell().getRowPosition());
// open editor
this.natTable.doCommand(new EditSelectionCommand(this.natTable, this.natTable.getConfigRegistry()));
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(2, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(4, this.natTable.getActiveCellEditor().getRowIndex());
// traverse up 2 times
processShiftEnter();
processShiftEnter();
// we expect to stay at the same cell
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(2, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(4, this.natTable.getActiveCellEditor().getRowIndex());
}
@Test
public void testOpenAdjacentUpTable() {
// register axis traversal
this.viewportLayer.registerCommandHandler(
new MoveCellSelectionCommandHandler(this.selectionLayer,
new EditTraversalStrategy(ITraversalStrategy.TABLE_TRAVERSAL_STRATEGY, this.natTable)));
// select a cell
this.selectionLayer.setSelectedCell(0, 1);
assertEquals(0, this.selectionLayer.getLastSelectedCell().getColumnPosition());
assertEquals(1, this.selectionLayer.getLastSelectedCell().getRowPosition());
// open editor
this.natTable.doCommand(new EditSelectionCommand(this.natTable, this.natTable.getConfigRegistry()));
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(0, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(1, this.natTable.getActiveCellEditor().getRowIndex());
// traverse up
processShiftEnter();
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(0, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(0, this.natTable.getActiveCellEditor().getRowIndex());
}
@Test
public void testOpenAdjacentUpStepOverTable() {
// register axis traversal
this.viewportLayer.registerCommandHandler(
new MoveCellSelectionCommandHandler(this.selectionLayer,
new EditTraversalStrategy(ITraversalStrategy.TABLE_TRAVERSAL_STRATEGY, this.natTable)));
// select a cell
this.selectionLayer.setSelectedCell(0, 3);
assertEquals(0, this.selectionLayer.getLastSelectedCell().getColumnPosition());
assertEquals(3, this.selectionLayer.getLastSelectedCell().getRowPosition());
// open editor
this.natTable.doCommand(new EditSelectionCommand(this.natTable, this.natTable.getConfigRegistry()));
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(0, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(3, this.natTable.getActiveCellEditor().getRowIndex());
// traverse up 2 times
processShiftEnter();
processShiftEnter();
// row 0 since row 2 is not editable
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(0, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(0, this.natTable.getActiveCellEditor().getRowIndex());
}
@Test
public void testOpenAdjacentUpStepOverEndTable() {
// register axis traversal
this.viewportLayer.registerCommandHandler(
new MoveCellSelectionCommandHandler(this.selectionLayer,
new EditTraversalStrategy(ITraversalStrategy.TABLE_TRAVERSAL_STRATEGY, this.natTable)));
// select a cell
this.selectionLayer.setSelectedCell(2, 4);
assertEquals(2, this.selectionLayer.getLastSelectedCell().getColumnPosition());
assertEquals(4, this.selectionLayer.getLastSelectedCell().getRowPosition());
// open editor
this.natTable.doCommand(new EditSelectionCommand(this.natTable, this.natTable.getConfigRegistry()));
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(2, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(4, this.natTable.getActiveCellEditor().getRowIndex());
// traverse up 4 times
processShiftEnter();
processShiftEnter();
processShiftEnter();
processShiftEnter();
// we expect the traversal stopped at the first editable cell in the
// current column
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(1, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(4, this.natTable.getActiveCellEditor().getRowIndex());
}
@Test
public void testOpenAdjacentUpOneEditableColumnTable() {
// register axis traversal
this.viewportLayer.registerCommandHandler(
new MoveCellSelectionCommandHandler(this.selectionLayer,
new EditTraversalStrategy(ITraversalStrategy.TABLE_TRAVERSAL_STRATEGY, this.natTable)));
// ensure only one row is editable
this.overrider.registerRowOverrides(0, NOT_EDITABLE);
this.overrider.registerRowOverrides(1, NOT_EDITABLE);
this.overrider.registerRowOverrides(3, NOT_EDITABLE);
// select a cell
this.selectionLayer.setSelectedCell(2, 4);
assertEquals(2, this.selectionLayer.getLastSelectedCell().getColumnPosition());
assertEquals(4, this.selectionLayer.getLastSelectedCell().getRowPosition());
// open editor
this.natTable.doCommand(new EditSelectionCommand(this.natTable, this.natTable.getConfigRegistry()));
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(2, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(4, this.natTable.getActiveCellEditor().getRowIndex());
// traverse up 2 times
processShiftEnter();
processShiftEnter();
// we expect to traverse 2 rows up
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(0, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(4, this.natTable.getActiveCellEditor().getRowIndex());
}
@Test
public void testOpenAdjacentUpStepOverStartTopTable() {
// register axis traversal
this.viewportLayer.registerCommandHandler(
new MoveCellSelectionCommandHandler(this.selectionLayer,
new EditTraversalStrategy(ITraversalStrategy.TABLE_TRAVERSAL_STRATEGY, this.natTable)));
// select a cell
this.selectionLayer.setSelectedCell(0, 0);
assertEquals(0, this.selectionLayer.getLastSelectedCell().getColumnPosition());
assertEquals(0, this.selectionLayer.getLastSelectedCell().getRowPosition());
// open editor
this.natTable.doCommand(new EditSelectionCommand(this.natTable, this.natTable.getConfigRegistry()));
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(0, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(0, this.natTable.getActiveCellEditor().getRowIndex());
// traverse up 2 times
processShiftEnter();
processShiftEnter();
// we expect the traversal stops at first editable cell in table
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(0, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(0, this.natTable.getActiveCellEditor().getRowIndex());
}
@Test
public void testOpenAdjacentUpTableCycle() {
// register axis traversal
this.viewportLayer.registerCommandHandler(
new MoveCellSelectionCommandHandler(this.selectionLayer,
new EditTraversalStrategy(ITraversalStrategy.TABLE_CYCLE_TRAVERSAL_STRATEGY, this.natTable)));
// select a cell
this.selectionLayer.setSelectedCell(0, 1);
assertEquals(0, this.selectionLayer.getLastSelectedCell().getColumnPosition());
assertEquals(1, this.selectionLayer.getLastSelectedCell().getRowPosition());
// open editor
this.natTable.doCommand(new EditSelectionCommand(this.natTable, this.natTable.getConfigRegistry()));
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(0, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(1, this.natTable.getActiveCellEditor().getRowIndex());
// traverse up
processShiftEnter();
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(0, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(0, this.natTable.getActiveCellEditor().getRowIndex());
}
@Test
public void testOpenAdjacentUpStepOverTableCycle() {
// register axis traversal
this.viewportLayer.registerCommandHandler(
new MoveCellSelectionCommandHandler(this.selectionLayer,
new EditTraversalStrategy(ITraversalStrategy.TABLE_CYCLE_TRAVERSAL_STRATEGY, this.natTable)));
// select a cell
this.selectionLayer.setSelectedCell(0, 3);
assertEquals(0, this.selectionLayer.getLastSelectedCell().getColumnPosition());
assertEquals(3, this.selectionLayer.getLastSelectedCell().getRowPosition());
// open editor
this.natTable.doCommand(new EditSelectionCommand(this.natTable, this.natTable.getConfigRegistry()));
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(0, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(3, this.natTable.getActiveCellEditor().getRowIndex());
// traverse up 2 times
processShiftEnter();
processShiftEnter();
// row 0 since row 2 is not editable
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(0, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(0, this.natTable.getActiveCellEditor().getRowIndex());
}
@Test
public void testOpenAdjacentUpStepOverEndTableCycle() {
// register axis traversal
this.viewportLayer.registerCommandHandler(
new MoveCellSelectionCommandHandler(this.selectionLayer,
new EditTraversalStrategy(ITraversalStrategy.TABLE_CYCLE_TRAVERSAL_STRATEGY, this.natTable)));
// select a cell
this.selectionLayer.setSelectedCell(2, 4);
assertEquals(2, this.selectionLayer.getLastSelectedCell().getColumnPosition());
assertEquals(4, this.selectionLayer.getLastSelectedCell().getRowPosition());
// open editor
this.natTable.doCommand(new EditSelectionCommand(this.natTable, this.natTable.getConfigRegistry()));
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(2, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(4, this.natTable.getActiveCellEditor().getRowIndex());
// traverse up 4 times
processShiftEnter();
processShiftEnter();
processShiftEnter();
processShiftEnter();
// we expect the traversal stopped at the first editable cell in the
// previous column
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(1, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(4, this.natTable.getActiveCellEditor().getRowIndex());
}
@Test
public void testOpenAdjacentUpOneEditableColumnTableCycle() {
// register axis traversal
this.viewportLayer.registerCommandHandler(
new MoveCellSelectionCommandHandler(this.selectionLayer,
new EditTraversalStrategy(ITraversalStrategy.TABLE_CYCLE_TRAVERSAL_STRATEGY, this.natTable)));
// ensure only one row is editable
this.overrider.registerRowOverrides(0, NOT_EDITABLE);
this.overrider.registerRowOverrides(1, NOT_EDITABLE);
this.overrider.registerRowOverrides(3, NOT_EDITABLE);
// select a cell
this.selectionLayer.setSelectedCell(2, 4);
assertEquals(2, this.selectionLayer.getLastSelectedCell().getColumnPosition());
assertEquals(4, this.selectionLayer.getLastSelectedCell().getRowPosition());
// open editor
this.natTable.doCommand(new EditSelectionCommand(this.natTable, this.natTable.getConfigRegistry()));
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(2, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(4, this.natTable.getActiveCellEditor().getRowIndex());
// traverse up 2 times
processShiftEnter();
processShiftEnter();
// we expect to traverse 2 columns left
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(0, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(4, this.natTable.getActiveCellEditor().getRowIndex());
}
@Test
public void testOpenAdjacentUpStepOverStartTopTableCycle() {
// register axis traversal
this.viewportLayer.registerCommandHandler(
new MoveCellSelectionCommandHandler(this.selectionLayer,
new EditTraversalStrategy(ITraversalStrategy.TABLE_CYCLE_TRAVERSAL_STRATEGY, this.natTable)));
// select a cell
this.selectionLayer.setSelectedCell(0, 0);
assertEquals(0, this.selectionLayer.getLastSelectedCell().getColumnPosition());
assertEquals(0, this.selectionLayer.getLastSelectedCell().getRowPosition());
// open editor
this.natTable.doCommand(new EditSelectionCommand(this.natTable, this.natTable.getConfigRegistry()));
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(0, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(0, this.natTable.getActiveCellEditor().getRowIndex());
// traverse up 2 times
processShiftEnter();
processShiftEnter();
// we expect the traversal started over at table beginning
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(9, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(3, this.natTable.getActiveCellEditor().getRowIndex());
}
private void processEnter() {
Text textControl = ((Text) this.natTable.getActiveCellEditor().getEditorControl());
SWTUtils.pressKeyOnControl(SWT.CR, textControl);
}
private void processShiftEnter() {
Text textControl = ((Text) this.natTable.getActiveCellEditor().getEditorControl());
SWTUtils.pressKeyOnControl(SWT.CR, SWT.SHIFT, textControl);
// wait shortly to ensure that the event can be processed
try {
Thread.sleep(50);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
}