]> source.dussan.org Git - vaadin-framework.git/blob
aa4e748edc6decc2fcb19a02b380fc447b326b16
[vaadin-framework.git] /
1 /*
2  * Copyright 2000-2016 Vaadin Ltd.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5  * use this file except in compliance with the License. You may obtain a copy of
6  * the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13  * License for the specific language governing permissions and limitations under
14  * the License.
15  */
16 package com.vaadin.tests.components.table;
17
18 import static org.hamcrest.CoreMatchers.is;
19 import static org.hamcrest.MatcherAssert.assertThat;
20
21 import java.util.List;
22
23 import org.junit.Test;
24 import org.openqa.selenium.By;
25 import org.openqa.selenium.WebElement;
26 import org.openqa.selenium.interactions.Actions;
27
28 import com.vaadin.tests.tb3.MultiBrowserTest;
29 import com.vaadin.v7.testbench.customelements.TableElement;
30
31 /**
32  * Tests that clicking on active fields doesn't change Table selection, nor does
33  * dragging rows.
34  *
35  * @author Vaadin Ltd
36  */
37 public class TableClickAndDragOnIconAndComponentsTest extends MultiBrowserTest {
38
39     @Override
40     public void setup() throws Exception {
41         super.setup();
42
43         openTestURL();
44     }
45
46     @Test
47     public void clickOnTextFieldDoesNotSelectRow() {
48         selectRow(1);
49
50         clickOnTextField(2);
51         assertThatFocusTextFieldHasText("foo 2foo");
52
53         assertThat(getSelectedRowTextValue(), is(1));
54     }
55
56     @Test
57     public void clickOnReadOnlyTextFieldSelectsRow() {
58         selectRow(1);
59
60         clickOnReadOnlyTextField(2);
61
62         assertThat(getSelectedRowTextValue(), is(2));
63     }
64
65     @Test
66     public void clickOnLabelSelectsRow() {
67         selectRow(1);
68
69         clickOnLabel(2);
70
71         assertThat(getSelectedRowTextValue(), is(2));
72     }
73
74     @Test
75     public void clickOnEmbeddedIconSelectsRow() {
76         selectRow(1);
77
78         clickOnEmbeddedIcon(2);
79
80         assertThat(getSelectedRowTextValue(), is(2));
81     }
82
83     @Test
84     public void dragAndDroppingRowDoesNotSelectRow() {
85         selectRow(1);
86
87         moveRow(0, 3);
88
89         assertThat(getSelectedRowTextValue(), is(1));
90         assertThat(getSelectedRowIndex(), is(0));
91     }
92
93     @Test
94     public void dragAndDroppingSelectedRowStaysSelected() {
95         selectRow(1);
96
97         moveRow(1, 4);
98
99         assertThat(getSelectedRowTextValue(), is(1));
100         assertThat(getSelectedRowIndex(), is(4));
101     }
102
103     private void assertThatFocusTextFieldHasText(String text) {
104         List<WebElement> focused = getTable()
105                 .findElements(By.className("v-textfield-focus"));
106
107         assertThat(focused.get(0).getAttribute("value"), is(text));
108     }
109
110     private int getSelectedRowTextValue() {
111         WebElement selectedRow = getSelectedRow();
112
113         // i.e. 'red 1foo'
114         String text = getText(selectedRow, 2);
115
116         return Integer.parseInt(text.substring(4, 5));
117     }
118
119     private String getText(WebElement row, int column) {
120         List<WebElement> cellContents = getCellContents(row);
121
122         return cellContents.get(column).getText();
123     }
124
125     private List<WebElement> getCellContents(WebElement row) {
126         return row.findElements(By.className("v-table-cell-content"));
127     }
128
129     private WebElement getSelectedRow() {
130         return getTable().findElement(By.className("v-selected"));
131     }
132
133     private void clickOnTextField(int row) {
134         WebElement textField = getTextField(row, 0);
135
136         textField.click();
137     }
138
139     private void clickOnReadOnlyTextField(int row) {
140         WebElement textField = getTextField(row, 1);
141
142         textField.click();
143     }
144
145     private WebElement getTextField(int row, int index) {
146         return getElement(row, index, "v-textfield");
147     }
148
149     private WebElement getElement(int row, String className) {
150         return getElement(row, 0, className);
151     }
152
153     private WebElement getElement(int row, int index, String className) {
154         return getRows().get(row).findElements(By.className(className))
155                 .get(index);
156     }
157
158     private List<WebElement> getRows() {
159         return getTable().findElement(By.className("v-table-body"))
160                 .findElements(By.tagName("tr"));
161     }
162
163     private void selectRow(int row) {
164         TableElement table = getTable();
165
166         table.getCell(row, 2).click();
167     }
168
169     private TableElement getTable() {
170         return $(TableElement.class).first();
171     }
172
173     private void clickOnLabel(int row) {
174         WebElement label = getElement(row, "v-label");
175         label.click();
176     }
177
178     private void clickOnEmbeddedIcon(int row) {
179         WebElement embeddedIcon = getElement(row, "v-embedded");
180         embeddedIcon.click();
181     }
182
183     private void moveRow(int from, int to) {
184         List<WebElement> rows = getRows();
185         List<WebElement> cellContents = getCellContents(rows.get(from));
186
187         new Actions(getDriver()).moveToElement(cellContents.get(2))
188                 .clickAndHold().moveToElement(rows.get(to)).release().perform();
189     }
190
191     private int getSelectedRowIndex() {
192         List<WebElement> rows = getRows();
193
194         // Unfortunately rows.getIndexOf(getSelectedRow()) doesn't work.
195         for (WebElement r : rows) {
196             if (r.getAttribute("class").contains("v-selected")) {
197                 return rows.indexOf(r);
198             }
199         }
200
201         return -1;
202     }
203 }