| /******************************************************************************* |
| * Copyright (c) 2014, 2020 Jonas Hugo, Markus Wahl. |
| * 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: |
| * Jonas Hugo <Jonas.Hugo@jeppesen.com>, |
| * Markus Wahl <Markus.Wahl@jeppesen.com> - initial test |
| * Dirk Fauth <dirk.fauth@googlemail.com> - made Selections.Row a static inner class |
| ******************************************************************************/ |
| package org.eclipse.nebula.widgets.nattable.selection.preserve; |
| |
| import static org.junit.Assert.assertEquals; |
| import static org.junit.Assert.assertFalse; |
| import static org.junit.Assert.assertTrue; |
| |
| import java.io.Serializable; |
| import java.util.Arrays; |
| import java.util.HashSet; |
| |
| import org.eclipse.nebula.widgets.nattable.selection.preserve.Selections.CellPosition; |
| import org.junit.Test; |
| |
| public class SelectionsTest { |
| |
| private Selections<String[]> testee = new Selections<>(); |
| |
| private Serializable rowA = "rowA"; |
| |
| private Serializable rowB = "rowB"; |
| |
| /** |
| * Each row consist of an array of String, one String for each column, i e |
| * each cell is a String. |
| */ |
| private String[] rowObjectA = new String[] { "good", "day" }; |
| |
| private String[] rowObjectB = new String[] { "bad", "night" }; |
| |
| private int columnPosition1 = 1; |
| |
| private int columnPosition2 = 2; |
| |
| private int columnPosition3 = 3; |
| |
| @Test |
| public void Never_Selected_Cell_Is_Not_Selected() { |
| assertFalse(this.testee.isSelected(this.rowA, this.columnPosition2)); |
| } |
| |
| @Test |
| public void Selecting_A_Cell_For_Unselected_Row() { |
| this.testee.select(this.rowA, this.rowObjectA, this.columnPosition2); |
| assertTrue(this.testee.isSelected(this.rowA, this.columnPosition2)); |
| } |
| |
| @Test |
| public void Selecting_A_Cell_For_Already_Selected_Row() { |
| this.testee.select(this.rowA, this.rowObjectA, this.columnPosition1); |
| this.testee.select(this.rowA, this.rowObjectA, this.columnPosition2); |
| assertTrue(this.testee.isSelected(this.rowA, this.columnPosition1)); |
| assertTrue(this.testee.isSelected(this.rowA, this.columnPosition2)); |
| } |
| |
| @Test |
| public void Clear_Removes_All_Selections() { |
| this.testee.select(this.rowA, this.rowObjectA, this.columnPosition1); |
| this.testee.select(this.rowA, this.rowObjectA, this.columnPosition2); |
| this.testee.select(this.rowB, this.rowObjectB, this.columnPosition2); |
| this.testee.clear(); |
| assertFalse(this.testee.isSelected(this.rowA, this.columnPosition1)); |
| assertFalse(this.testee.isSelected(this.rowA, this.columnPosition2)); |
| assertFalse(this.testee.isSelected(this.rowB, this.columnPosition2)); |
| |
| assertTrue(this.testee.getRows().isEmpty()); |
| assertTrue(this.testee.getColumnPositions().length == 0); |
| } |
| |
| @Test |
| public void Deselecting_Cells_Does_Only_Affect_Those_Cells() { |
| // cell not to be touched |
| this.testee.select(this.rowA, this.rowObjectA, this.columnPosition1); |
| |
| // Cells to be touched |
| this.testee.select(this.rowA, this.rowObjectA, this.columnPosition2); |
| this.testee.select(this.rowB, this.rowObjectB, this.columnPosition2); |
| this.testee.deselect(this.rowA, this.columnPosition2); |
| this.testee.deselect(this.rowB, this.columnPosition2); |
| |
| assertTrue(this.testee.isSelected(this.rowA, this.columnPosition1)); |
| assertFalse(this.testee.isSelected(this.rowA, this.columnPosition2)); |
| assertFalse(this.testee.isSelected(this.rowB, this.columnPosition2)); |
| } |
| |
| @Test |
| public void Fully_Deselected_Row_Doesent_Linger() { |
| this.testee.select(this.rowA, this.rowObjectA, this.columnPosition1); |
| this.testee.select(this.rowA, this.rowObjectA, this.columnPosition2); |
| this.testee.deselect(this.rowA, this.columnPosition1); |
| this.testee.deselect(this.rowA, this.columnPosition2); |
| |
| assertFalse(this.testee.isRowSelected(this.rowA)); |
| } |
| |
| @Test |
| public void None_Selected_Cells_Is_Empty() { |
| assertTrue(this.testee.isEmpty()); |
| } |
| |
| @Test |
| public void Selected_Cell_Is_Not_Empty() { |
| this.testee.select(this.rowA, this.rowObjectA, this.columnPosition1); |
| assertFalse(this.testee.isEmpty()); |
| } |
| |
| @Test |
| public void Fully_Deselecting_All_Rows_Causes_Is_Empty() { |
| this.testee.select(this.rowA, this.rowObjectA, this.columnPosition1); |
| this.testee.deselect(this.rowA, this.columnPosition1); |
| assertTrue(this.testee.isEmpty()); |
| } |
| |
| @Test |
| public void getSelections_Retrieves_All_Cells() { |
| this.testee.select(this.rowA, this.rowObjectA, this.columnPosition2); |
| this.testee.select(this.rowB, this.rowObjectB, this.columnPosition2); |
| |
| HashSet<CellPosition<String[]>> actualCells = new HashSet<>(this.testee.getSelections()); |
| |
| HashSet<CellPosition<String[]>> expectedCells = new HashSet<>(); |
| expectedCells.add(new CellPosition<>(this.rowObjectA, this.columnPosition2)); |
| expectedCells.add(new CellPosition<>(this.rowObjectB, this.columnPosition2)); |
| |
| assertEquals(expectedCells, actualCells); |
| } |
| |
| @Test |
| public void getRows() { |
| this.testee.select(this.rowA, this.rowObjectA, this.columnPosition2); |
| this.testee.select(this.rowB, this.rowObjectB, this.columnPosition2); |
| |
| HashSet<Serializable> actualRowIds = new HashSet<>(); |
| for (Selections.Row<String[]> row : this.testee.getRows()) { |
| actualRowIds.add(row.getId()); |
| } |
| |
| HashSet<Serializable> expectedRowIds = new HashSet<>(); |
| expectedRowIds.add(this.rowA); |
| expectedRowIds.add(this.rowB); |
| |
| assertEquals(expectedRowIds, actualRowIds); |
| } |
| |
| @Test |
| public void getColumns() { |
| this.testee.select(this.rowA, this.rowObjectA, this.columnPosition2); |
| this.testee.select(this.rowA, this.rowObjectA, this.columnPosition3); |
| this.testee.select(this.rowB, this.rowObjectB, this.columnPosition1); |
| |
| int[] actualColumns = this.testee.getColumnPositions(); |
| |
| int[] expectedColumns = new int[] { this.columnPosition1, this.columnPosition2, this.columnPosition3 }; |
| |
| assertTrue(Arrays.equals(expectedColumns, actualColumns)); |
| } |
| |
| } |