blob: 3aeff451ea87043d32975cc70d3eda0c772d3601 [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 org.eclipse.nebula.widgets.nattable.config.IEditableRule;
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.grid.GridRegion;
import org.eclipse.nebula.widgets.nattable.layer.DataLayer;
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.DataLayerFixture;
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 EditTraversalStrategyLeftRightTest {
private static final String NOT_EDITABLE = "NOT_EDITABLE";
private DataLayer dataLayer;
private SelectionLayer selectionLayer;
private ViewportLayer viewportLayer;
private NatTableFixture natTable;
@Before
public void setUp() {
this.dataLayer = new DataLayerFixture(10, 10, 100, 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());
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);
this.natTable.registerLabelOnColumn(this.dataLayer, 2, NOT_EDITABLE);
this.natTable.registerLabelOnColumn(this.dataLayer, 5, NOT_EDITABLE);
this.natTable.registerLabelOnColumn(this.dataLayer, 6, NOT_EDITABLE);
this.natTable.registerLabelOnColumn(this.dataLayer, 7, NOT_EDITABLE);
this.natTable.registerLabelOnColumn(this.dataLayer, 8, NOT_EDITABLE);
this.natTable.registerLabelOnColumn(this.dataLayer, 9, NOT_EDITABLE);
}
@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 right
@Test
public void testOpenAdjacentToRightAxis() {
// 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 to right
processTab();
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(1, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(0, this.natTable.getActiveCellEditor().getRowIndex());
}
@Test
public void testOpenAdjacentToRightStepOverAxis() {
// 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 to right 2 times
processTab();
processTab();
// column 3 since column 2 is not editable
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(3, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(0, this.natTable.getActiveCellEditor().getRowIndex());
}
@Test
public void testOpenAdjacentToRightStepOverEndAxis() {
// 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 to right 4 times
processTab();
processTab();
processTab();
processTab();
// we expect the traversal stopped at the last editable cell in the
// current row
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(4, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(0, this.natTable.getActiveCellEditor().getRowIndex());
}
@Test
public void testOpenAdjacentToRightOneEditableColumnAxis() {
// register axis traversal
this.viewportLayer.registerCommandHandler(
new MoveCellSelectionCommandHandler(this.selectionLayer,
new EditTraversalStrategy(ITraversalStrategy.AXIS_TRAVERSAL_STRATEGY, this.natTable)));
// ensure only one column is editable
this.natTable.registerLabelOnColumn(this.dataLayer, 0, NOT_EDITABLE);
this.natTable.registerLabelOnColumn(this.dataLayer, 1, NOT_EDITABLE);
this.natTable.registerLabelOnColumn(this.dataLayer, 3, NOT_EDITABLE);
// select a cell
this.selectionLayer.setSelectedCell(4, 0);
assertEquals(4, 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(4, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(0, this.natTable.getActiveCellEditor().getRowIndex());
// traverse to right 2 times
processTab();
processTab();
// we expect to stay at the same editable cell
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(4, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(0, this.natTable.getActiveCellEditor().getRowIndex());
}
@Test
public void testOpenAdjacentToRightAxisCycle() {
// 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 to right
processTab();
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(1, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(0, this.natTable.getActiveCellEditor().getRowIndex());
}
@Test
public void testOpenAdjacentToRightStepOverAxisCycle() {
// 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 to right 2 times
processTab();
processTab();
// column 3 since column 2 is not editable
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(3, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(0, this.natTable.getActiveCellEditor().getRowIndex());
}
@Test
public void testOpenAdjacentToRightStepOverEndAxisCycle() {
// 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 to right 4 times
processTab();
processTab();
processTab();
processTab();
// we expect the traversal cycled to the beginning of the current row
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(0, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(0, this.natTable.getActiveCellEditor().getRowIndex());
}
@Test
public void testOpenAdjacentToRightOneEditableColumnAxisCycle() {
// register axis traversal
this.viewportLayer.registerCommandHandler(
new MoveCellSelectionCommandHandler(this.selectionLayer,
new EditTraversalStrategy(ITraversalStrategy.AXIS_CYCLE_TRAVERSAL_STRATEGY, this.natTable)));
// ensure only one column is editable
this.natTable.registerLabelOnColumn(this.dataLayer, 0, NOT_EDITABLE);
this.natTable.registerLabelOnColumn(this.dataLayer, 1, NOT_EDITABLE);
this.natTable.registerLabelOnColumn(this.dataLayer, 3, NOT_EDITABLE);
// select a cell
this.selectionLayer.setSelectedCell(4, 0);
assertEquals(4, 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(4, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(0, this.natTable.getActiveCellEditor().getRowIndex());
// traverse to right 2 times
processTab();
processTab();
// we expect to stay at the same cell
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(4, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(0, this.natTable.getActiveCellEditor().getRowIndex());
}
@Test
public void testOpenAdjacentToRightTable() {
// 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 to right
processTab();
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(1, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(0, this.natTable.getActiveCellEditor().getRowIndex());
}
@Test
public void testOpenAdjacentToRightStepOverTable() {
// 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 to right 2 times
processTab();
processTab();
// column 3 since column 2 is not editable
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(3, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(0, this.natTable.getActiveCellEditor().getRowIndex());
}
@Test
public void testOpenAdjacentToRightStepOverEndTable() {
// 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 to right 4 times
processTab();
processTab();
processTab();
processTab();
// we expect the traversal cycled to the beginning of the next row
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(0, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(1, this.natTable.getActiveCellEditor().getRowIndex());
}
@Test
public void testOpenAdjacentToRightOneEditableColumnTable() {
// register axis traversal
this.viewportLayer.registerCommandHandler(
new MoveCellSelectionCommandHandler(this.selectionLayer,
new EditTraversalStrategy(ITraversalStrategy.TABLE_TRAVERSAL_STRATEGY, this.natTable)));
// ensure only one column is editable
this.natTable.registerLabelOnColumn(this.dataLayer, 0, NOT_EDITABLE);
this.natTable.registerLabelOnColumn(this.dataLayer, 1, NOT_EDITABLE);
this.natTable.registerLabelOnColumn(this.dataLayer, 3, NOT_EDITABLE);
// select a cell
this.selectionLayer.setSelectedCell(4, 0);
assertEquals(4, 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(4, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(0, this.natTable.getActiveCellEditor().getRowIndex());
// traverse to right 2 times
processTab();
processTab();
// we expect to traverse 2 rows down
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(4, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(2, this.natTable.getActiveCellEditor().getRowIndex());
}
@Test
public void testOpenAdjacentToRightStepOverEndBottomTable() {
// register axis traversal
this.viewportLayer.registerCommandHandler(
new MoveCellSelectionCommandHandler(this.selectionLayer,
new EditTraversalStrategy(ITraversalStrategy.TABLE_TRAVERSAL_STRATEGY, this.natTable)));
// select a cell
this.selectionLayer.setSelectedCell(4, 9);
assertEquals(4, this.selectionLayer.getLastSelectedCell().getColumnPosition());
assertEquals(9, this.selectionLayer.getLastSelectedCell().getRowPosition());
// open editor
this.natTable.doCommand(new EditSelectionCommand(this.natTable, this.natTable.getConfigRegistry()));
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(4, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(9, this.natTable.getActiveCellEditor().getRowIndex());
// traverse to right 2 times
processTab();
processTab();
// we expect the traversal stops at last editable cell in table
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(4, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(9, this.natTable.getActiveCellEditor().getRowIndex());
}
@Test
public void testOpenAdjacentToRightTableCycle() {
// 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 to right
processTab();
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(1, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(0, this.natTable.getActiveCellEditor().getRowIndex());
}
@Test
public void testOpenAdjacentToRightStepOverTableCycle() {
// 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 to right 2 times
processTab();
processTab();
// column 3 since column 2 is not editable
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(3, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(0, this.natTable.getActiveCellEditor().getRowIndex());
}
@Test
public void testOpenAdjacentToRightStepOverEndTableCycle() {
// 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 to right 4 times
processTab();
processTab();
processTab();
processTab();
// we expect the traversal cycled to the beginning of the next row
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(0, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(1, this.natTable.getActiveCellEditor().getRowIndex());
}
@Test
public void testOpenAdjacentToRightOneEditableColumnTableCycle() {
// register axis traversal
this.viewportLayer.registerCommandHandler(
new MoveCellSelectionCommandHandler(this.selectionLayer,
new EditTraversalStrategy(ITraversalStrategy.TABLE_CYCLE_TRAVERSAL_STRATEGY, this.natTable)));
// ensure only one column is editable
this.natTable.registerLabelOnColumn(this.dataLayer, 0, NOT_EDITABLE);
this.natTable.registerLabelOnColumn(this.dataLayer, 1, NOT_EDITABLE);
this.natTable.registerLabelOnColumn(this.dataLayer, 3, NOT_EDITABLE);
// select a cell
this.selectionLayer.setSelectedCell(4, 0);
assertEquals(4, 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(4, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(0, this.natTable.getActiveCellEditor().getRowIndex());
// traverse to right 2 times
processTab();
processTab();
// we expect to traverse 2 rows down
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(4, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(2, this.natTable.getActiveCellEditor().getRowIndex());
}
@Test
public void testOpenAdjacentToRightStepOverEndBottomTableCycle() {
// 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(4, 9);
assertEquals(4, this.selectionLayer.getLastSelectedCell().getColumnPosition());
assertEquals(9, this.selectionLayer.getLastSelectedCell().getRowPosition());
// open editor
this.natTable.doCommand(new EditSelectionCommand(this.natTable, this.natTable.getConfigRegistry()));
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(4, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(9, this.natTable.getActiveCellEditor().getRowIndex());
// traverse to right 2 times
processTab();
processTab();
// we expect the traversal started over at table beginning
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(1, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(0, this.natTable.getActiveCellEditor().getRowIndex());
}
// move left
@Test
public void testOpenAdjacentToLeftAxis() {
// register axis traversal
this.viewportLayer.registerCommandHandler(
new MoveCellSelectionCommandHandler(this.selectionLayer,
new EditTraversalStrategy(ITraversalStrategy.AXIS_TRAVERSAL_STRATEGY, this.natTable)));
// select a cell
this.selectionLayer.setSelectedCell(1, 0);
assertEquals(1, 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(1, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(0, this.natTable.getActiveCellEditor().getRowIndex());
// traverse to left
processShiftTab();
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(0, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(0, this.natTable.getActiveCellEditor().getRowIndex());
}
@Test
public void testOpenAdjacentToLeftStepOverAxis() {
// register axis traversal
this.viewportLayer.registerCommandHandler(
new MoveCellSelectionCommandHandler(this.selectionLayer,
new EditTraversalStrategy(ITraversalStrategy.AXIS_TRAVERSAL_STRATEGY, this.natTable)));
// select a cell
this.selectionLayer.setSelectedCell(3, 0);
assertEquals(3, 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(3, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(0, this.natTable.getActiveCellEditor().getRowIndex());
// traverse to left 2 times
processShiftTab();
processShiftTab();
// column 0 since column 2 is not editable
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(0, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(0, this.natTable.getActiveCellEditor().getRowIndex());
}
@Test
public void testOpenAdjacentToLeftStepOverEndAxis() {
// register axis traversal
this.viewportLayer.registerCommandHandler(
new MoveCellSelectionCommandHandler(this.selectionLayer,
new EditTraversalStrategy(ITraversalStrategy.AXIS_TRAVERSAL_STRATEGY, this.natTable)));
// select a cell
this.selectionLayer.setSelectedCell(4, 2);
assertEquals(4, this.selectionLayer.getLastSelectedCell().getColumnPosition());
assertEquals(2, this.selectionLayer.getLastSelectedCell().getRowPosition());
// open editor
this.natTable.doCommand(new EditSelectionCommand(this.natTable, this.natTable.getConfigRegistry()));
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(4, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(2, this.natTable.getActiveCellEditor().getRowIndex());
// traverse to left 4 times
processShiftTab();
processShiftTab();
processShiftTab();
processShiftTab();
// we expect the traversal stopped at the first editable cell in the
// current row
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(0, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(2, this.natTable.getActiveCellEditor().getRowIndex());
}
@Test
public void testOpenAdjacentToLeftOneEditableColumnAxis() {
// register axis traversal
this.viewportLayer.registerCommandHandler(
new MoveCellSelectionCommandHandler(this.selectionLayer,
new EditTraversalStrategy(ITraversalStrategy.AXIS_TRAVERSAL_STRATEGY, this.natTable)));
// ensure only one column is editable
this.natTable.registerLabelOnColumn(this.dataLayer, 0, NOT_EDITABLE);
this.natTable.registerLabelOnColumn(this.dataLayer, 1, NOT_EDITABLE);
this.natTable.registerLabelOnColumn(this.dataLayer, 3, NOT_EDITABLE);
// select a cell
this.selectionLayer.setSelectedCell(4, 2);
assertEquals(4, this.selectionLayer.getLastSelectedCell().getColumnPosition());
assertEquals(2, this.selectionLayer.getLastSelectedCell().getRowPosition());
// open editor
this.natTable.doCommand(new EditSelectionCommand(this.natTable, this.natTable.getConfigRegistry()));
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(4, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(2, this.natTable.getActiveCellEditor().getRowIndex());
// traverse to left 2 times
processShiftTab();
processShiftTab();
// we expect to stay at the same editable cell
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(4, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(2, this.natTable.getActiveCellEditor().getRowIndex());
}
@Test
public void testOpenAdjacentToLeftAxisCycle() {
// 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(1, 0);
assertEquals(1, 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(1, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(0, this.natTable.getActiveCellEditor().getRowIndex());
// traverse to left
processShiftTab();
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(0, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(0, this.natTable.getActiveCellEditor().getRowIndex());
}
@Test
public void testOpenAdjacentToLeftStepOverAxisCycle() {
// 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(3, 0);
assertEquals(3, 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(3, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(0, this.natTable.getActiveCellEditor().getRowIndex());
// traverse to left 2 times
processShiftTab();
processShiftTab();
// column 0 since column 2 is not editable
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(0, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(0, this.natTable.getActiveCellEditor().getRowIndex());
}
@Test
public void testOpenAdjacentToLeftStepOverEndAxisCycle() {
// 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(3, 2);
assertEquals(3, this.selectionLayer.getLastSelectedCell().getColumnPosition());
assertEquals(2, this.selectionLayer.getLastSelectedCell().getRowPosition());
// open editor
this.natTable.doCommand(new EditSelectionCommand(this.natTable, this.natTable.getConfigRegistry()));
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(3, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(2, this.natTable.getActiveCellEditor().getRowIndex());
// traverse to left 4 times
processShiftTab();
processShiftTab();
processShiftTab();
processShiftTab();
// we expect the traversal cycle so we will be at column 1
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(3, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(2, this.natTable.getActiveCellEditor().getRowIndex());
}
@Test
public void testOpenAdjacentToLeftOneEditableColumnAxisCycle() {
// register axis traversal
this.viewportLayer.registerCommandHandler(
new MoveCellSelectionCommandHandler(this.selectionLayer,
new EditTraversalStrategy(ITraversalStrategy.AXIS_CYCLE_TRAVERSAL_STRATEGY, this.natTable)));
// ensure only one column is editable
this.natTable.registerLabelOnColumn(this.dataLayer, 0, NOT_EDITABLE);
this.natTable.registerLabelOnColumn(this.dataLayer, 1, NOT_EDITABLE);
this.natTable.registerLabelOnColumn(this.dataLayer, 3, NOT_EDITABLE);
// select a cell
this.selectionLayer.setSelectedCell(4, 2);
assertEquals(4, this.selectionLayer.getLastSelectedCell().getColumnPosition());
assertEquals(2, this.selectionLayer.getLastSelectedCell().getRowPosition());
// open editor
this.natTable.doCommand(new EditSelectionCommand(this.natTable, this.natTable.getConfigRegistry()));
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(4, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(2, this.natTable.getActiveCellEditor().getRowIndex());
// traverse to left 2 times
processShiftTab();
processShiftTab();
// we expect to stay at the same cell
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(4, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(2, this.natTable.getActiveCellEditor().getRowIndex());
}
@Test
public void testOpenAdjacentToLeftTable() {
// register axis traversal
this.viewportLayer.registerCommandHandler(
new MoveCellSelectionCommandHandler(this.selectionLayer,
new EditTraversalStrategy(ITraversalStrategy.TABLE_TRAVERSAL_STRATEGY, this.natTable)));
// select a cell
this.selectionLayer.setSelectedCell(1, 0);
assertEquals(1, 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(1, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(0, this.natTable.getActiveCellEditor().getRowIndex());
// traverse to left
processShiftTab();
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(0, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(0, this.natTable.getActiveCellEditor().getRowIndex());
}
@Test
public void testOpenAdjacentToLeftStepOverTable() {
// register axis traversal
this.viewportLayer.registerCommandHandler(
new MoveCellSelectionCommandHandler(this.selectionLayer,
new EditTraversalStrategy(ITraversalStrategy.TABLE_TRAVERSAL_STRATEGY, this.natTable)));
// select a cell
this.selectionLayer.setSelectedCell(3, 0);
assertEquals(3, 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(3, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(0, this.natTable.getActiveCellEditor().getRowIndex());
// traverse to left 2 times
processShiftTab();
processShiftTab();
// column 0 since column 2 is not editable
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(0, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(0, this.natTable.getActiveCellEditor().getRowIndex());
}
@Test
public void testOpenAdjacentToLeftStepOverEndTable() {
// register axis traversal
this.viewportLayer.registerCommandHandler(
new MoveCellSelectionCommandHandler(this.selectionLayer,
new EditTraversalStrategy(ITraversalStrategy.TABLE_TRAVERSAL_STRATEGY, this.natTable)));
// select a cell
this.selectionLayer.setSelectedCell(4, 2);
assertEquals(4, this.selectionLayer.getLastSelectedCell().getColumnPosition());
assertEquals(2, this.selectionLayer.getLastSelectedCell().getRowPosition());
// open editor
this.natTable.doCommand(new EditSelectionCommand(this.natTable, this.natTable.getConfigRegistry()));
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(4, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(2, this.natTable.getActiveCellEditor().getRowIndex());
// traverse to left 4 times
processShiftTab();
processShiftTab();
processShiftTab();
processShiftTab();
// we expect the traversal stopped at the first editable cell in the
// current row
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(4, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(1, this.natTable.getActiveCellEditor().getRowIndex());
}
@Test
public void testOpenAdjacentToLeftOneEditableColumnTable() {
// register axis traversal
this.viewportLayer.registerCommandHandler(
new MoveCellSelectionCommandHandler(this.selectionLayer,
new EditTraversalStrategy(ITraversalStrategy.TABLE_TRAVERSAL_STRATEGY, this.natTable)));
// ensure only one column is editable
this.natTable.registerLabelOnColumn(this.dataLayer, 0, NOT_EDITABLE);
this.natTable.registerLabelOnColumn(this.dataLayer, 1, NOT_EDITABLE);
this.natTable.registerLabelOnColumn(this.dataLayer, 3, NOT_EDITABLE);
// select a cell
this.selectionLayer.setSelectedCell(4, 2);
assertEquals(4, this.selectionLayer.getLastSelectedCell().getColumnPosition());
assertEquals(2, this.selectionLayer.getLastSelectedCell().getRowPosition());
// open editor
this.natTable.doCommand(new EditSelectionCommand(this.natTable, this.natTable.getConfigRegistry()));
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(4, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(2, this.natTable.getActiveCellEditor().getRowIndex());
// traverse to left 2 times
processShiftTab();
processShiftTab();
// we expect to traverse 2 rows up
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(4, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(0, this.natTable.getActiveCellEditor().getRowIndex());
}
@Test
public void testOpenAdjacentToLeftStepOverStartTopTable() {
// 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 to left 2 times
processShiftTab();
processShiftTab();
// 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 testOpenAdjacentToLeftTableCycle() {
// 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(1, 0);
assertEquals(1, 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(1, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(0, this.natTable.getActiveCellEditor().getRowIndex());
// traverse to left
processShiftTab();
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(0, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(0, this.natTable.getActiveCellEditor().getRowIndex());
}
@Test
public void testOpenAdjacentToLeftStepOverTableCycle() {
// 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(3, 0);
assertEquals(3, 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(3, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(0, this.natTable.getActiveCellEditor().getRowIndex());
// traverse to left 2 times
processShiftTab();
processShiftTab();
// column 0 since column 2 is not editable
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(0, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(0, this.natTable.getActiveCellEditor().getRowIndex());
}
@Test
public void testOpenAdjacentToLeftStepOverEndTableCycle() {
// 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(4, 2);
assertEquals(4, this.selectionLayer.getLastSelectedCell().getColumnPosition());
assertEquals(2, this.selectionLayer.getLastSelectedCell().getRowPosition());
// open editor
this.natTable.doCommand(new EditSelectionCommand(this.natTable, this.natTable.getConfigRegistry()));
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(4, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(2, this.natTable.getActiveCellEditor().getRowIndex());
// traverse to left 4 times
processShiftTab();
processShiftTab();
processShiftTab();
processShiftTab();
// we expect the traversal stopped at the first editable cell in the
// current row
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(4, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(1, this.natTable.getActiveCellEditor().getRowIndex());
}
@Test
public void testOpenAdjacentToLeftOneEditableColumnTableCycle() {
// register axis traversal
this.viewportLayer.registerCommandHandler(
new MoveCellSelectionCommandHandler(this.selectionLayer,
new EditTraversalStrategy(ITraversalStrategy.TABLE_CYCLE_TRAVERSAL_STRATEGY, this.natTable)));
// ensure only one column is editable
this.natTable.registerLabelOnColumn(this.dataLayer, 0, NOT_EDITABLE);
this.natTable.registerLabelOnColumn(this.dataLayer, 1, NOT_EDITABLE);
this.natTable.registerLabelOnColumn(this.dataLayer, 3, NOT_EDITABLE);
// select a cell
this.selectionLayer.setSelectedCell(4, 2);
assertEquals(4, this.selectionLayer.getLastSelectedCell().getColumnPosition());
assertEquals(2, this.selectionLayer.getLastSelectedCell().getRowPosition());
// open editor
this.natTable.doCommand(new EditSelectionCommand(this.natTable, this.natTable.getConfigRegistry()));
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(4, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(2, this.natTable.getActiveCellEditor().getRowIndex());
// traverse to left 2 times
processShiftTab();
processShiftTab();
// we expect to traverse 2 rows up
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(4, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(0, this.natTable.getActiveCellEditor().getRowIndex());
}
@Test
public void testOpenAdjacentToLeftStepOverStartTopTableCycle() {
// 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 to left 2 times
processShiftTab();
processShiftTab();
// we expect the traversal started over at table beginning
assertNotNull(this.natTable.getActiveCellEditor());
assertEquals(3, this.natTable.getActiveCellEditor().getColumnIndex());
assertEquals(9, this.natTable.getActiveCellEditor().getRowIndex());
}
private void processTab() {
Text textControl = ((Text) this.natTable.getActiveCellEditor().getEditorControl());
textControl.notifyListeners(SWT.Traverse, SWTUtils.keyEvent(SWT.TAB));
}
private void processShiftTab() {
Text textControl = ((Text) this.natTable.getActiveCellEditor().getEditorControl());
textControl.notifyListeners(SWT.Traverse, SWTUtils.keyEventWithModifier(SWT.TAB, SWT.SHIFT));
}
}