]> source.dussan.org Git - vaadin-framework.git/blob
57666944c4d4c92a5c6e10680eb6b66f544bbd78
[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.MatcherAssert.assertThat;
19 import static org.hamcrest.number.IsCloseTo.closeTo;
20
21 import org.junit.Before;
22 import org.junit.Test;
23
24 import com.vaadin.tests.tb3.MultiBrowserTest;
25 import com.vaadin.v7.testbench.customelements.TableElement;
26
27 /**
28  * Scroll position should be restored when removing and re-adding all rows in
29  * Table.
30  *
31  * @author Vaadin Ltd
32  */
33 public class TableRepairsScrollPositionOnReAddingAllRowsTest
34         extends MultiBrowserTest {
35
36     private int rowLocation0;
37
38     @Override
39     @Before
40     public void setup() throws Exception {
41         super.setup();
42         openTestURL();
43
44         rowLocation0 = getCellY(0);
45         scrollToBottom();
46     }
47
48     @Test
49     public void testReAddAllViaAddAll() {
50         int rowLocation = getCellY(70);
51
52         // This button is for re-adding all rows (original itemIds) at once
53         // (removeAll() + addAll())
54         hitButton("buttonReAddAllViaAddAll");
55
56         int newRowLocation = getCellY(70);
57
58         assertCloseTo(
59                 "Scroll position should be the same as before Re-Adding rows via addAll()",
60                 newRowLocation, rowLocation);
61
62     }
63
64     @Test
65     public void testReplaceByAnotherCollectionViaAddAll() {
66         int rowLocation = getCellY(70);
67
68         // This button is for replacing all rows at once (removeAll() +
69         // addAll())
70         hitButton("buttonReplaceByAnotherCollectionViaAddAll");
71
72         // new collection has one less element
73         int newRowLocation = getCellY(69);
74
75         assertCloseTo(
76                 "Scroll position should be the same as before Replacing rows via addAll()",
77                 newRowLocation, rowLocation);
78     }
79
80     @Test
81     public void testReplaceByAnotherCollectionViaAdd() {
82
83         // This button is for replacing all rows one by one (removeAll() + add()
84         // + add()..)
85         hitButton("buttonReplaceByAnotherCollectionViaAdd");
86
87         int newRowLocation = getCellY(0);
88
89         assertCloseTo("Scroll position should be 0", newRowLocation,
90                 rowLocation0);
91     }
92
93     @Test
94     public void testReplaceBySubsetOfSmallerSize() {
95         // This button is for replacing all rows at once but the count of rows
96         // is less then first index to scroll
97         hitButton("buttonReplaceBySubsetOfSmallerSize");
98
99         int newRowLocation = getCellY(5);
100
101         assertCloseTo("Scroll position should be 0", newRowLocation,
102                 rowLocation0);
103     }
104
105     @Test
106     public void testReplaceByWholeSubsetPlusOneNew() {
107         int rowLocation = getCellY(70);
108
109         // This button is for replacing by whole original sub-set of items plus
110         // one new
111         hitButton("buttonReplaceByWholeSubsetPlusOneNew");
112
113         int newRowLocation = getCellY(70);
114
115         assertCloseTo("Scroll position should be the same as before Replacing",
116                 newRowLocation, rowLocation);
117
118     }
119
120     @Test
121     public void testRemoveAllAddOne() {
122         // This button is for removing all and then adding only one new item
123         hitButton("buttonRemoveAllAddOne");
124
125         int newRowLocation = getCellY(0);
126
127         assertCloseTo("Scroll position should be 0", newRowLocation,
128                 rowLocation0);
129     }
130
131     @Test
132     public void testReplaceByNewDatasource() {
133         // This button is for remove all items and add new datasource
134         hitButton("buttonReplaceByNewDatasource");
135
136         int newRowLocation = getCellY(0);
137
138         assertCloseTo("Scroll position should be 0", newRowLocation,
139                 rowLocation0);
140     }
141
142     private TableElement getTable() {
143         return $(TableElement.class).first();
144     }
145
146     private void scrollToBottom() {
147         scrollTable(getTable(), 80, 70);
148     }
149
150     private int getCellY(int row) {
151         return getTable().getCell(row, 0).getLocation().getY();
152     }
153
154     private void assertCloseTo(String reason, int actual, int expected) {
155         // ranged check because IE9 consistently misses the mark by 1 pixel
156         assertThat(reason, (double) actual, closeTo(expected, 1));
157     }
158
159 }