123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454 |
- /*
- * Copyright 2000-2014 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.basicfeatures;
-
- 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.elements.GridElement.GridCellElement;
- import com.vaadin.tests.annotations.TestCategory;
-
- /**
- *
- * @since
- * @author Vaadin Ltd
- */
- @TestCategory("grid")
- public class GridColumnReorderTest extends GridBasicClientFeaturesTest {
-
- @Before
- public void before() {
- openTestURL();
- }
-
- @Test
- public void columnReorderEventTriggered() {
- final int firstIndex = 3;
- final int secondIndex = 4;
- final String firstHeaderText = getGridElement().getHeaderCell(0,
- firstIndex).getText();
- final String secondHeaderText = getGridElement().getHeaderCell(0,
- secondIndex).getText();
- selectMenuPath("Component", "Internals", "Listeners",
- "Add ColumnReorder listener");
- selectMenuPath("Component", "Columns", "Column " + secondIndex,
- "Move column left");
- // columns 3 and 4 should have swapped to 4 and 3
- GridCellElement headerCell = getGridElement().getHeaderCell(0,
- firstIndex);
- assertEquals(secondHeaderText, headerCell.getText());
- headerCell = getGridElement().getHeaderCell(0, secondIndex);
- assertEquals(firstHeaderText, headerCell.getText());
-
- // the reorder event should have typed the order to this label
- WebElement columnReorderElement = findElement(By.id("columnreorder"));
- int eventIndex = Integer.parseInt(columnReorderElement
- .getAttribute("columns"));
- assertEquals(1, eventIndex);
-
- // trigger another event
- selectMenuPath("Component", "Columns", "Column " + secondIndex,
- "Move column left");
- columnReorderElement = findElement(By.id("columnreorder"));
- eventIndex = Integer.parseInt(columnReorderElement
- .getAttribute("columns"));
- assertEquals(2, eventIndex);
- }
-
- @Test
- public void testColumnReorder_onReorder_columnReorderEventTriggered() {
- final int firstIndex = 3;
- final int secondIndex = 4;
- final String firstHeaderText = getGridElement().getHeaderCell(0,
- firstIndex).getText();
- final String secondHeaderText = getGridElement().getHeaderCell(0,
- secondIndex).getText();
- selectMenuPath("Component", "Internals", "Listeners",
- "Add ColumnReorder listener");
- selectMenuPath("Component", "Columns", "Column " + secondIndex,
- "Move column left");
- // columns 3 and 4 should have swapped to 4 and 3
- GridCellElement headerCell = getGridElement().getHeaderCell(0,
- firstIndex);
- assertEquals(secondHeaderText, headerCell.getText());
- headerCell = getGridElement().getHeaderCell(0, secondIndex);
- assertEquals(firstHeaderText, headerCell.getText());
-
- // the reorder event should have typed the order to this label
- WebElement columnReorderElement = findElement(By.id("columnreorder"));
- int eventIndex = Integer.parseInt(columnReorderElement
- .getAttribute("columns"));
- assertEquals(1, eventIndex);
-
- // trigger another event
- selectMenuPath("Component", "Columns", "Column " + secondIndex,
- "Move column left");
- columnReorderElement = findElement(By.id("columnreorder"));
- eventIndex = Integer.parseInt(columnReorderElement
- .getAttribute("columns"));
- assertEquals(2, eventIndex);
- }
-
- @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, 10);
-
- // 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, 10);
-
- // 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, 10);
-
- // then
- assertFocusedCell(2, 0);
- }
-
- @Test
- public void testColumnReorder_dragColumnFromRightToLeftOfFocusedCellColumn_focusIsKept() {
- // given
- toggleColumnReorder();
- focusCell(1, 3);
-
- // when
- dragAndDropDefaultColumnHeader(4, 1, 10);
-
- // then
- assertFocusedCell(1, 4);
- }
-
- @Test
- public void testColumnReorder_dragColumnFromLeftToRightOfFocusedCellColumn_focusIsKept() {
- // given
- toggleColumnReorder();
- focusCell(4, 2);
-
- // when
- dragAndDropDefaultColumnHeader(0, 4, 10);
-
- // then
- assertFocusedCell(4, 1);
- }
-
- @Test
- public void testColumnReorder_draggingHeaderRowThatHasColumnHeadersSpanned_cantDropInsideSpannedHeaderFromOutside() {
- // given
- toggleColumnReorder();
- selectMenuPath("Component", "Header", "Append row");
- selectMenuPath("Component", "Header", "Row 2", "Join columns 1, 2");
- assertColumnHeaderOrder(0, 1, 2, 3, 4);
-
- // when
- dragAndDropColumnHeader(1, 3, 1, 80);
-
- // then
- assertColumnHeaderOrder(0, 3, 1, 2, 4);
- }
-
- @Test
- public void testColumnReorder_anotherRowHasColumnHeadersSpanned_cantDropInsideSpannedHeaderFromOutside() {
- // given
- toggleColumnReorder();
- selectMenuPath("Component", "Header", "Append row");
- selectMenuPath("Component", "Header", "Row 2", "Join columns 1, 2");
- assertColumnHeaderOrder(0, 1, 2, 3, 4);
-
- // when
- dragAndDropColumnHeader(0, 0, 2, 20);
-
- // then
- assertColumnHeaderOrder(1, 2, 0, 3, 4);
- }
-
- @Test
- public void testColumnReorder_cellInsideSpannedHeader_cantBeDroppedOutsideSpannedArea() {
- // given
- toggleColumnReorder();
- selectMenuPath("Component", "Header", "Append row");
- selectMenuPath("Component", "Header", "Row 2", "Join columns 1, 2");
- assertColumnHeaderOrder(0, 1, 2, 3, 4);
-
- // when
- dragAndDropColumnHeader(0, 2, 0, 20);
-
- // then
- assertColumnHeaderOrder(0, 2, 1, 3, 4);
- }
-
- @Test
- public void testColumnReorder_cellInsideTwoCrossingSpanningHeaders_cantTouchThis() {
- // given
- toggleColumnReorder();
- selectMenuPath("Component", "Header", "Append row");
- selectMenuPath("Component", "Header", "Append row");
- selectMenuPath("Component", "Header", "Row 2", "Join column cells 0, 1");
- selectMenuPath("Component", "Header", "Row 3", "Join columns 1, 2");
- dragAndDropColumnHeader(0, 3, 0, 10);
- assertColumnHeaderOrder(3, 0, 1, 2, 4);
-
- // when
- dragAndDropColumnHeader(0, 2, 0, 10);
-
- // then
- assertColumnHeaderOrder(3, 0, 1, 2, 4);
- }
-
- @Test
- public void testColumnReorder_cellsInsideSpannedHeaderAndBlockedByOtherSpannedCells_cantTouchThose() {
- // given
- toggleColumnReorder();
- selectMenuPath("Component", "Header", "Append row");
- selectMenuPath("Component", "Header", "Append row");
- selectMenuPath("Component", "Header", "Row 2", "Join column cells 0, 1");
- selectMenuPath("Component", "Header", "Row 3", "Join columns 1, 2");
- dragAndDropColumnHeader(0, 3, 0, 10);
- assertColumnHeaderOrder(3, 0, 1, 2, 4);
-
- // when then
- dragAndDropColumnHeader(0, 1, 3, 10);
- assertColumnHeaderOrder(3, 0, 1, 2, 4);
-
- dragAndDropColumnHeader(1, 2, 1, 10);
- assertColumnHeaderOrder(3, 0, 1, 2, 4);
-
- dragAndDropColumnHeader(2, 1, 3, -10);
- assertColumnHeaderOrder(3, 0, 1, 2, 4);
- }
-
- @Test
- public void testColumnReorder_cellsInsideSpannedHeaderAndBlockedByOtherSpannedCells_reorderingLimited() {
- // given
- toggleColumnReorder();
- selectMenuPath("Component", "Header", "Append row");
- selectMenuPath("Component", "Header", "Append row");
- selectMenuPath("Component", "Header", "Row 2", "Join columns 3, 4, 5");
- dragAndDropColumnHeader(0, 0, 4, 100);
- selectMenuPath("Component", "Header", "Row 3", "Join columns 1, 2");
- scrollGridHorizontallyTo(0);
- assertColumnHeaderOrder(1, 2, 3, 4, 5);
-
- // when then
- dragAndDropColumnHeader(0, 1, 4, 10);
- scrollGridHorizontallyTo(0);
- assertColumnHeaderOrder(1, 2, 3, 4, 5);
-
- dragAndDropColumnHeader(0, 2, 4, 10);
- scrollGridHorizontallyTo(0);
- assertColumnHeaderOrder(1, 2, 3, 4, 5);
-
- dragAndDropColumnHeader(0, 3, 4, 80);
- scrollGridHorizontallyTo(0);
- assertColumnHeaderOrder(1, 2, 3, 5, 4);
-
- dragAndDropColumnHeader(0, 4, 2, 100);
- scrollGridHorizontallyTo(0);
- assertColumnHeaderOrder(1, 2, 3, 4, 5);
-
- dragAndDropColumnHeader(2, 3, 4, 80);
- scrollGridHorizontallyTo(0);
- assertColumnHeaderOrder(1, 2, 3, 5, 4);
-
- dragAndDropColumnHeader(2, 4, 2, 100);
- scrollGridHorizontallyTo(0);
- assertColumnHeaderOrder(1, 2, 3, 4, 5);
- }
-
- @Test
- public void testColumnReorder_cellsInsideTwoAdjacentSpannedHeaders_reorderingLimited() {
- // given
- toggleColumnReorder();
- selectMenuPath("Component", "Header", "Append row");
- selectMenuPath("Component", "Header", "Append row");
- selectMenuPath("Component", "Header", "Row 2", "Join columns 3, 4, 5");
- dragAndDropColumnHeader(0, 0, 4, 100);
- scrollGridHorizontallyTo(0);
- dragAndDropColumnHeader(0, 1, 4, 80);
- scrollGridHorizontallyTo(0);
- selectMenuPath("Component", "Header", "Row 3", "Join columns 1, 2");
- assertColumnHeaderOrder(1, 3, 4, 5, 2);
-
- // when then
- dragAndDropColumnHeader(0, 1, 3, 80);
- assertColumnHeaderOrder(1, 4, 3, 5, 2);
-
- dragAndDropColumnHeader(0, 2, 4, 10);
- assertColumnHeaderOrder(1, 4, 3, 5, 2);
-
- dragAndDropColumnHeader(0, 2, 0, 10);
- assertColumnHeaderOrder(1, 3, 4, 5, 2);
- }
-
- @Test
- public void testColumnReorder_footerHasSpannedCells_cantDropInside() {
- // given
- toggleColumnReorder();
- selectMenuPath("Component", "Footer", "Append row");
- selectMenuPath("Component", "Footer", "Row 1", "Join columns 1, 2");
- assertColumnHeaderOrder(0, 1, 2, 3, 4);
-
- // when
- dragAndDropColumnHeader(0, 3, 1, 80);
-
- // then
- assertColumnHeaderOrder(0, 3, 1, 2, 4);
- }
-
- @Test
- public void testColumnReorder_cellInsideASpannedFooter_cantBeDroppedOutsideSpannedArea() {
- // given
- toggleColumnReorder();
- selectMenuPath("Component", "Footer", "Append row");
- selectMenuPath("Component", "Footer", "Row 1", "Join columns 1, 2");
- assertColumnHeaderOrder(0, 1, 2, 3, 4);
-
- // when
- dragAndDropColumnHeader(0, 2, 0, 20);
-
- // then
- assertColumnHeaderOrder(0, 2, 1, 3, 4);
- }
-
- @Test
- public void testColumnReorder_cellInsideTwoCrossingSpanningFooters_cantTouchThis() {
- // given
- toggleColumnReorder();
- selectMenuPath("Component", "Footer", "Append row");
- selectMenuPath("Component", "Footer", "Append row");
- selectMenuPath("Component", "Footer", "Row 1", "Join column cells 0, 1");
- selectMenuPath("Component", "Footer", "Row 2", "Join columns 1, 2");
- dragAndDropColumnHeader(0, 3, 0, 10);
- assertColumnHeaderOrder(3, 0, 1, 2, 4);
-
- // when
- dragAndDropColumnHeader(0, 2, 0, 10);
-
- // then
- assertColumnHeaderOrder(3, 0, 1, 2, 4);
- }
-
- @Test
- public void testColumnReorder_cellsInsideTwoAdjacentSpannedHeaderAndFooter_reorderingLimited() {
- // given
- toggleColumnReorder();
- selectMenuPath("Component", "Header", "Append row");
- selectMenuPath("Component", "Footer", "Append row");
- selectMenuPath("Component", "Header", "Row 2", "Join columns 3, 4, 5");
- dragAndDropColumnHeader(0, 0, 4, 80);
- scrollGridHorizontallyTo(0);
- dragAndDropColumnHeader(0, 1, 4, 80);
- scrollGridHorizontallyTo(0);
- selectMenuPath("Component", "Footer", "Row 1", "Join columns 1, 2");
- assertColumnHeaderOrder(1, 3, 4, 5, 2);
-
- // when then
- dragAndDropColumnHeader(0, 1, 3, 80);
- assertColumnHeaderOrder(1, 4, 3, 5, 2);
-
- dragAndDropColumnHeader(0, 2, 4, 10);
- assertColumnHeaderOrder(1, 4, 3, 5, 2);
-
- dragAndDropColumnHeader(0, 2, 0, 10);
- assertColumnHeaderOrder(1, 3, 4, 5, 2);
- }
-
- private void toggleColumnReorder() {
- selectMenuPath("Component", "State", "Column Reordering");
- }
-
- 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"));
- }
- }
|