/* * Copyright 2000-2016 Vaadin Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package com.vaadin.tests.components.grid.basics; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import org.junit.Before; import org.junit.Test; import org.openqa.selenium.By; import org.openqa.selenium.WebElement; import org.openqa.selenium.interactions.Actions; import com.vaadin.testbench.parallel.TestCategory; import com.vaadin.v7.tests.components.grid.basicfeatures.GridBasicFeaturesTest.CellSide; /** * * @author Vaadin Ltd */ @TestCategory("grid") public class GridColumnReorderTest extends GridBasicsTest { @Before public void before() { openTestURL(); } @Test public void testColumnReorder_onReorder_columnReorderEventTriggered() { selectMenuPath("Component", "Header", "Prepend header row"); selectMenuPath("Component", "State", "Column reorder listener"); selectMenuPath("Component", "Columns", GridBasics.COLUMN_CAPTIONS[3], "Move left"); assertEquals("1. Registered a column reorder listener.", getLogRow(2)); assertEquals("2. Columns reordered, userOriginated: false", getLogRow(1)); assertColumnHeaderOrder(0, 1, 3, 2); // trigger another event selectMenuPath("Component", "Columns", GridBasics.COLUMN_CAPTIONS[3], "Move right"); assertColumnHeaderOrder(0, 1, 2, 3); // test drag and drop is user originated toggleColumnReorder(); dragAndDropColumnHeader(0, 0, 1, CellSide.RIGHT); assertEquals("6. Columns reordered, userOriginated: true", getLogRow(1)); assertColumnHeaderOrder(1, 0, 2, 3); } @Test public void testColumnReorder_draggingSortedColumn_sortIndicatorShownOnDraggedElement() { // given toggleColumnReorder(); toggleSortableColumn(0); sortColumn(0); // when startDragButDontDropOnDefaultColumnHeader(0); // then WebElement draggedElement = getDraggedHeaderElement(); assertTrue(draggedElement.getAttribute("class").contains("sort")); } @Test public void testColumnReorder_draggingSortedColumn_sortStays() { // given toggleColumnReorder(); toggleSortableColumn(0); sortColumn(0); // when dragAndDropDefaultColumnHeader(0, 2, CellSide.LEFT); // then assertColumnIsSorted(1); } @Test public void testColumnReorder_draggingFocusedHeader_focusShownOnDraggedElement() { // given toggleColumnReorder(); focusDefaultHeader(0); // when startDragButDontDropOnDefaultColumnHeader(0); // then WebElement draggedElement = getDraggedHeaderElement(); assertTrue(draggedElement.getAttribute("class").contains("focused")); } @Test public void testColumnReorder_draggingFocusedHeader_focusIsKeptOnHeader() { // given toggleColumnReorder(); focusDefaultHeader(0); // when dragAndDropDefaultColumnHeader(0, 3, CellSide.LEFT); // then WebElement defaultColumnHeader = getDefaultColumnHeader(2); String attribute = defaultColumnHeader.getAttribute("class"); assertTrue(attribute.contains("focused")); } @Test public void testColumnReorder_draggingFocusedCellColumn_focusIsKeptOnCell() { // given toggleColumnReorder(); focusCell(2, 2); // when dragAndDropDefaultColumnHeader(2, 0, CellSide.LEFT); // then assertFocusedCell(2, 0); } @Test public void testColumnReorderWithHiddenColumn_draggingFocusedCellColumnOverHiddenColumn_focusIsKeptOnCell() { // given toggleColumnReorder(); selectMenuPath("Component", "Columns", "Column 1", "Hidden"); focusCell(2, 2); assertFocusedCell(2, 2); // when dragAndDropDefaultColumnHeader(1, 0, CellSide.LEFT); // then assertFocusedCell(2, 2); // when dragAndDropDefaultColumnHeader(0, 2, CellSide.LEFT); // then assertFocusedCell(2, 2); } @Test public void testColumnReorder_dragColumnFromRightToLeftOfFocusedCellColumn_focusIsKept() { // given toggleColumnReorder(); focusCell(1, 3); // when dragAndDropDefaultColumnHeader(4, 1, CellSide.LEFT); // then assertFocusedCell(1, 4); } @Test public void testColumnReorder_dragColumnFromLeftToRightOfFocusedCellColumn_focusIsKept() { // given toggleColumnReorder(); focusCell(4, 2); // when dragAndDropDefaultColumnHeader(0, 4, CellSide.LEFT); // then assertFocusedCell(4, 1); } private void toggleSortableColumn(int index) { selectMenuPath("Component", "Columns", "Column " + index, "Sortable"); } private void startDragButDontDropOnDefaultColumnHeader(int index) { new Actions(getDriver()) .clickAndHold(getGridHeaderRowCells().get(index)) .moveByOffset(100, 0).perform(); } private void sortColumn(int index) { getGridHeaderRowCells().get(index).click(); } private void focusDefaultHeader(int index) { getGridHeaderRowCells().get(index).click(); } private WebElement getDraggedHeaderElement() { return findElement(By.className("dragged-column-header")); } }