/******************************************************************************* * Copyright (c) 2012, 2014 Original authors and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Original authors and others - initial API and implementation * Jonas Hugo <Jonas.Hugo@jeppesen.com>, * Markus Wahl <Markus.Wahl@jeppesen.com> - Test delegation of markers to * model iff model is an IMarkerSelectionModel. Test getters and setters * for marker fields. * Dirk Fauth <dirk.fauth@googlemail.com> - Bug 446275 ******************************************************************************/ package org.eclipse.nebula.widgets.nattable.selection; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertSame; import static org.junit.Assert.assertTrue; import java.util.Map; import org.eclipse.nebula.widgets.nattable.coordinate.PositionCoordinate; import org.eclipse.nebula.widgets.nattable.layer.IUniqueIndexLayer; import org.eclipse.nebula.widgets.nattable.layer.event.ILayerEvent; import org.eclipse.nebula.widgets.nattable.layer.event.ILayerEventHandler; import org.eclipse.nebula.widgets.nattable.layer.event.IStructuralChangeEvent; import org.eclipse.nebula.widgets.nattable.test.LayerAssert; import org.eclipse.nebula.widgets.nattable.test.fixture.TestLayer; import org.eclipse.swt.graphics.Rectangle; import org.junit.Before; import org.junit.Test; public class SelectionLayerTest { private TestLayer testLayer; private TestSelectionLayer selectionLayer; @Before public void setup() { String columnInfo = "0:0;100 | 1:1;100 | 2:2;100 | 3:3;100"; String rowInfo = "0:0;40 | 1:1;40 | 2:2;40 | 3:3;40"; String cellInfo = "A0 | < | C0 | D0 \n" + "^ | < | C1 | D1 \n" + "A2 | B2 | C2 | D2 \n" + "A3 | B3 | C3 | D3 \n"; this.testLayer = new TestLayer(4, 4, columnInfo, rowInfo, cellInfo); this.selectionLayer = new TestSelectionLayer(this.testLayer); } @Test public void testIdentityLayerTransform() { LayerAssert.assertLayerEquals(this.testLayer, this.selectionLayer); } // Clear @Test public void testClearAllClearsAllMarkers() { this.selectionLayer.selectAll(); this.selectionLayer.clear(); assertNull(this.selectionLayer.getLastSelectedCellPosition()); assertEquals(0, this.selectionLayer.getLastSelectedRegion().width); assertEquals(0, this.selectionLayer.getLastSelectedRegion().height); assertEquals(SelectionLayer.NO_SELECTION, this.selectionLayer.getSelectionAnchor().columnPosition); assertEquals(SelectionLayer.NO_SELECTION, this.selectionLayer.getSelectionAnchor().rowPosition); } @Test public void testClearSingleCellClearsNoMarkers() { this.selectionLayer.selectAll(); this.selectionLayer.clearSelection(1, 1); assertNotNull(this.selectionLayer.getLastSelectedCellPosition()); assertTrue(this.selectionLayer.getLastSelectedRegion().width > 0); assertTrue(this.selectionLayer.getLastSelectedRegion().height > 0); assertFalse(this.selectionLayer.getSelectionAnchor().columnPosition == SelectionLayer.NO_SELECTION); assertFalse(this.selectionLayer.getSelectionAnchor().rowPosition == SelectionLayer.NO_SELECTION); } @Test public void testClearAnchorRectangleClearsOnlyAnchor() { this.selectionLayer.selectAll(); this.selectionLayer.clearSelection(new Rectangle(0, 0, 1, 1)); assertNotNull(this.selectionLayer.getLastSelectedCellPosition()); assertTrue(this.selectionLayer.getLastSelectedRegion().width > 0); assertTrue(this.selectionLayer.getLastSelectedRegion().height > 0); assertEquals(SelectionLayer.NO_SELECTION, this.selectionLayer.getSelectionAnchor().columnPosition); assertEquals(SelectionLayer.NO_SELECTION, this.selectionLayer.getSelectionAnchor().rowPosition); } @Test public void testClearOutsideAnchorRectangleClearsNoMarkers() { this.selectionLayer.selectAll(); this.selectionLayer.clearSelection(new Rectangle(1, 1, 1, 1)); assertFalse(this.selectionLayer.getSelectionAnchor().columnPosition == SelectionLayer.NO_SELECTION); assertFalse(this.selectionLayer.getSelectionAnchor().rowPosition == SelectionLayer.NO_SELECTION); } @Test public void testClearSingleSelectedCellClearsAllMarkers() { this.selectionLayer.selectCell(3, 3, false, false); assertNotNull(this.selectionLayer.getLastSelectedCellPosition()); assertTrue(this.selectionLayer.getLastSelectedRegion().width > 0); assertTrue(this.selectionLayer.getLastSelectedRegion().height > 0); assertFalse(this.selectionLayer.getSelectionAnchor().columnPosition == SelectionLayer.NO_SELECTION); assertFalse(this.selectionLayer.getSelectionAnchor().rowPosition == SelectionLayer.NO_SELECTION); this.selectionLayer.clearSelection(new Rectangle(3, 3, 1, 1)); assertNull(this.selectionLayer.getLastSelectedCellPosition()); assertTrue(this.selectionLayer.getSelectionAnchor().columnPosition == SelectionLayer.NO_SELECTION); assertTrue(this.selectionLayer.getSelectionAnchor().rowPosition == SelectionLayer.NO_SELECTION); this.selectionLayer.selectCell(3, 3, false, false); assertNotNull(this.selectionLayer.getLastSelectedCellPosition()); assertTrue(this.selectionLayer.getLastSelectedRegion().width > 0); assertTrue(this.selectionLayer.getLastSelectedRegion().height > 0); assertFalse(this.selectionLayer.getSelectionAnchor().columnPosition == SelectionLayer.NO_SELECTION); assertFalse(this.selectionLayer.getSelectionAnchor().rowPosition == SelectionLayer.NO_SELECTION); this.selectionLayer.clearSelection(3, 3); assertNull(this.selectionLayer.getLastSelectedCellPosition()); assertTrue(this.selectionLayer.getSelectionAnchor().columnPosition == SelectionLayer.NO_SELECTION); assertTrue(this.selectionLayer.getSelectionAnchor().rowPosition == SelectionLayer.NO_SELECTION); } // Last Selected Region @Test public void testGetLastSelectedRegionDoesNotDelegateToModel() { Rectangle lastSelectedRegion = new Rectangle(22, 22, 22, 22); this.selectionLayer.lastSelectedRegion = lastSelectedRegion; assertSame(lastSelectedRegion, this.selectionLayer.getLastSelectedRegion()); } @Test public void testSetLastSelectedRegionDoesNotDelegateToModel() { Rectangle region = new Rectangle(23454234, 123123, 12, 5); this.selectionLayer.setLastSelectedRegion(region); assertSame(region, this.selectionLayer.lastSelectedRegion); } @Test public void testSetLastSelectedRegionPreservesNULL() { this.selectionLayer.setLastSelectedRegion(null); assertNull(this.selectionLayer.lastSelectedRegion); } @Test public void testSetLastSelectedRegionFieldsDoesNotDelegateToModel() { this.selectionLayer.selectAll(); Rectangle existingRegion = this.selectionLayer.lastSelectedRegion; Rectangle region = new Rectangle(23454234, 123123, 12, 5); this.selectionLayer.setLastSelectedRegion(region.x, region.y, region.width, region.height); assertEquals(region, this.selectionLayer.lastSelectedRegion); assertSame(existingRegion, this.selectionLayer.lastSelectedRegion); } // Selection Anchor @Test public void testGetAnchorDoesNotDelegateToModel() { PositionCoordinate existingAnchor = this.selectionLayer.selectionAnchor; assertSame(existingAnchor, this.selectionLayer.getSelectionAnchor()); } @Test public void testSetSelectionAnchorDoesNotDelegateToModel() { this.selectionLayer.selectAll(); this.selectionLayer.setSelectionAnchor(456, 8); assertEquals(456, this.selectionLayer.selectionAnchor.columnPosition); assertEquals(8, this.selectionLayer.selectionAnchor.rowPosition); } // Last Selected Cell @Test public void testSetLastSelectedCellDoesNotDelegateToModel() { this.selectionLayer.selectAll(); this.selectionLayer.setLastSelectedCell(456, 8); assertEquals(456, this.selectionLayer.lastSelectedCell.columnPosition); assertEquals(8, this.selectionLayer.lastSelectedCell.rowPosition); } @Test public void testGetLastSelectedCellDoesNotDelegateToModel() { this.selectionLayer.selectAll(); PositionCoordinate existingSelectedCell = this.selectionLayer.lastSelectedCell; assertSame(existingSelectedCell, this.selectionLayer.getLastSelectedCell()); } @Test public void testGetLastSelectedCellPosition() { this.selectionLayer.selectAll(); PositionCoordinate existingSelectedCell = this.selectionLayer.getLastSelectedCell(); assertSame(existingSelectedCell, this.selectionLayer.getLastSelectedCellPosition()); assertNotNull(existingSelectedCell); } @Test public void testGetLastSelectedCellPositionReturnsNullWhenUnselected() { assertNull(this.selectionLayer.getLastSelectedCellPosition()); } // Register / unregister event handler @Test public void testIsModelEventHandlerRegistered() { assertEquals(1, this.selectionLayer.getEventHandler().size()); ILayerEventHandler<? extends ILayerEvent> handler = this.selectionLayer.getEventHandler().get(IStructuralChangeEvent.class); assertSame(this.selectionLayer.getSelectionModel(), handler); } @Test public void testUnregisterModelEventHandler() { this.selectionLayer.unregisterEventHandler(this.selectionLayer.getSelectionModel()); assertEquals(0, this.selectionLayer.getEventHandler().size()); } /** * Simple SelectionLayer that makes the event handler accessible for * testing. */ class TestSelectionLayer extends SelectionLayer { public TestSelectionLayer(IUniqueIndexLayer underlyingLayer) { super(underlyingLayer); } public Map<Class<? extends ILayerEvent>, ILayerEventHandler<? extends ILayerEvent>> getEventHandler() { return this.eventHandlers; } } }