]> source.dussan.org Git - vaadin-framework.git/blob
5adae48d625cf7b4fd9785310b2fde3de93f7608
[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.v7.tests.components.grid.basicfeatures.client;
17
18 import java.util.List;
19
20 import org.junit.Assert;
21 import org.junit.Test;
22 import org.openqa.selenium.By;
23 import org.openqa.selenium.WebElement;
24
25 import com.vaadin.v7.testbench.customelements.GridElement;
26 import com.vaadin.v7.tests.components.grid.basicfeatures.GridBasicClientFeaturesTest;
27
28 public class GridSidebarContentTest extends GridBasicClientFeaturesTest {
29
30     @Test
31     public void testSidebarWithHidableColumn() {
32         openTestURL();
33
34         Assert.assertEquals("Sidebar should not be initially present", 0,
35                 countBySelector(".v-grid-sidebar-button"));
36
37         selectMenuPath("Component", "Columns", "Column 0", "Hidable");
38
39         getSidebarOpenButton().click();
40
41         WebElement toggle = getSidebarPopup()
42                 .findElement(By.className("column-hiding-toggle"));
43
44         Assert.assertEquals("Column 0 should be togglable", "Header (0,0)",
45                 toggle.getText());
46
47         selectMenuPath("Component", "Columns", "Column 0", "Hidable");
48         Assert.assertEquals("Sidebar should disappear without toggable column",
49                 0, countBySelector(".v-grid-sidebar-button"));
50
51     }
52
53     @Test
54     public void testAddingCustomSidebarItem() {
55         openTestURL();
56         GridElement gridElement = getGridElement();
57
58         selectMenuPath("Component", "Sidebar", "Add item to end");
59
60         gridElement.findElement(By.className("v-grid-sidebar-button")).click();
61
62         WebElement sidebarItem = getSidebarPopup().findElement(
63                 By.cssSelector(".v-grid-sidebar-content .gwt-MenuItem"));
64
65         sidebarItem.click();
66
67         Assert.assertEquals("Sidebar should be closed after clicking item 0", 0,
68                 countBySelector(".v-grid-sidebar-content"));
69     }
70
71     @Test
72     public void testProgrammaticSidebarOpen() {
73         openTestURL();
74
75         selectMenuPath("Component", "Columns", "Column 0", "Hidable");
76
77         selectMenuPath("Component", "Sidebar", "Toggle sidebar visibility");
78
79         Assert.assertEquals("Sidebar should be open", 1,
80                 countBySelector(".v-grid-sidebar-content"));
81     }
82
83     @Test
84     public void testBasicSidebarOrder() {
85         openTestURL();
86
87         // First add custom content
88         selectMenuPath("Component", "Sidebar", "Add separator to end");
89         selectMenuPath("Component", "Sidebar", "Add item to end");
90
91         // Then make one column togglable
92         selectMenuPath("Component", "Columns", "Column 0", "Hidable");
93
94         selectMenuPath("Component", "Sidebar", "Toggle sidebar visibility");
95
96         assertSidebarMenuItems("Header (0,0)", null, "Custom menu item 0");
97     }
98
99     @Test
100     public void testSidebarOrderAbuse() {
101         openTestURL();
102
103         selectMenuPath("Component", "Columns", "Column 0", "Hidable");
104         selectMenuPath("Component", "Columns", "Column 1", "Hidable");
105
106         // Inserts a menu item between the two visibility toggles
107         selectMenuPath("Component", "Sidebar", "Add item before index 1");
108
109         selectMenuPath("Component", "Sidebar", "Toggle sidebar visibility");
110
111         // Total order enforcement not implemented at this point. Test can be
112         // updated when it is.
113         assertSidebarMenuItems("Header (0,0)", "Custom menu item 0",
114                 "Header (0,1)");
115
116         selectMenuPath("Component", "Columns", "Column 2", "Hidable");
117         selectMenuPath("Component", "Sidebar", "Toggle sidebar visibility");
118
119         // Adding a new togglable column should have restored the expected order
120         assertSidebarMenuItems("Header (0,0)", "Header (0,1)", "Header (0,2)",
121                 "Custom menu item 0");
122     }
123
124     private void assertSidebarMenuItems(String... items) {
125         List<WebElement> menuItems = getSidebarPopup()
126                 .findElements(By.cssSelector(".v-grid-sidebar-content td"));
127
128         Assert.assertEquals("Expected " + items.length + " menu items",
129                 items.length, menuItems.size());
130
131         for (int i = 0; i < items.length; i++) {
132             String expectedItem = items[i];
133             if (expectedItem == null) {
134                 Assert.assertEquals("Item " + i + " should be a separator",
135                         "gwt-MenuItemSeparator",
136                         menuItems.get(i).getAttribute("class"));
137             } else {
138                 Assert.assertEquals("Unexpected content for item " + i,
139                         expectedItem, menuItems.get(i).getText());
140             }
141         }
142     }
143
144     private int countBySelector(String cssSelector) {
145         return findElements(By.cssSelector(cssSelector)).size();
146     }
147 }