/*
* 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.v7.tests.components.grid.basicfeatures.server;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import com.vaadin.testbench.elements.GridElement;
import com.vaadin.testbench.parallel.TestCategory;
import com.vaadin.v7.tests.components.grid.basicfeatures.GridBasicFeaturesTest;
@TestCategory("grid")
public class GridColumnVisibilityTest extends GridBasicFeaturesTest {
private static final String[] TOGGLE_LISTENER = new String[] { "Component",
"State", "ColumnVisibilityChangeListener" };
private static final String[] TOGGLE_HIDE_COLUMN_0 = new String[] {
"Component", "Columns", "Column 0", "Hidden" };
private static final String COLUMN_0_BECAME_HIDDEN_MSG = "Visibility "
+ "changed: propertyId: Column 0, isHidden: true";
private static final String COLUMN_0_BECAME_UNHIDDEN_MSG = "Visibility "
+ "changed: propertyId: Column 0, isHidden: false";
private static final String USER_ORIGINATED_TRUE = "userOriginated: true";
private static final String USER_ORIGINATED_FALSE = "userOriginated: false";
@Before
public void setUp() {
openTestURL();
}
@Test
public void columnIsNotShownWhenHidden() {
assertEquals("column 0",
getGridElement().getHeaderCell(0, 0).getText().toLowerCase());
selectMenuPath(TOGGLE_HIDE_COLUMN_0);
assertEquals("column 1",
getGridElement().getHeaderCell(0, 0).getText().toLowerCase());
}
@Test
public void columnIsShownWhenUnhidden() {
selectMenuPath(TOGGLE_HIDE_COLUMN_0);
selectMenuPath(TOGGLE_HIDE_COLUMN_0);
assertEquals("column 0",
getGridElement().getHeaderCell(0, 0).getText().toLowerCase());
}
@Test
public void registeringListener() {
assertFalse(logContainsText(COLUMN_0_BECAME_HIDDEN_MSG));
selectMenuPath(TOGGLE_LISTENER);
assertFalse(logContainsText(COLUMN_0_BECAME_HIDDEN_MSG));
selectMenuPath(TOGGLE_HIDE_COLUMN_0);
assertTrue(logContainsText(COLUMN_0_BECAME_HIDDEN_MSG));
assertTrue(logContainsText(USER_ORIGINATED_FALSE));
selectMenuPath(TOGGLE_HIDE_COLUMN_0);
assertTrue(logContainsText(COLUMN_0_BECAME_UNHIDDEN_MSG));
assertTrue(logContainsText(USER_ORIGINATED_FALSE));
}
@Test
public void deregisteringListener() {
selectMenuPath(TOGGLE_LISTENER);
selectMenuPath(TOGGLE_HIDE_COLUMN_0);
selectMenuPath(TOGGLE_LISTENER);
selectMenuPath(TOGGLE_HIDE_COLUMN_0);
assertFalse(logContainsText(COLUMN_0_BECAME_UNHIDDEN_MSG));
}
@Test
public void testColumnHiding_userOriginated_correctParams() {
selectMenuPath(TOGGLE_LISTENER);
toggleColumnHidable(0);
assertColumnHeaderOrder(0, 1, 2, 3);
getSidebarOpenButton().click();
getColumnHidingToggle(0).click();
getSidebarOpenButton().click();
assertColumnHeaderOrder(1, 2, 3);
assertTrue(logContainsText(COLUMN_0_BECAME_HIDDEN_MSG));
assertTrue(logContainsText(USER_ORIGINATED_TRUE));
getSidebarOpenButton().click();
getColumnHidingToggle(0).click();
getSidebarOpenButton().click();
assertColumnHeaderOrder(0, 1, 2, 3);
assertTrue(logContainsText(COLUMN_0_BECAME_UNHIDDEN_MSG));
assertTrue(logContainsText(USER_ORIGINATED_TRUE));
getSidebarOpenButton().click();
getColumnHidingToggle(0).click();
getSidebarOpenButton().click();
assertColumnHeaderOrder(1, 2, 3);
assertTrue(logContainsText(COLUMN_0_BECAME_HIDDEN_MSG));
assertTrue(logContainsText(USER_ORIGINATED_TRUE));
}
@Test
public void testColumnHiding_whenHidableColumnRemoved_toggleRemoved() {
toggleColumnHidable(0);
toggleColumnHidable(1);
getSidebarOpenButton().click();
assertNotNull(getColumnHidingToggle(0));
addRemoveColumn(0);
assertNull(getColumnHidingToggle(0));
}
@Test
public void testColumnHiding_whenHidableColumnAdded_toggleWithCorrectCaptionAdded() {
selectMenuPath("Component", "Size", "Width", "100%");
toggleColumnHidable(0);
toggleColumnHidable(1);
toggleColumnHidingToggleCaptionChange(0);
getSidebarOpenButton().click();
assertEquals("Column 0 caption 0", getColumnHidingToggle(0).getText());
getSidebarOpenButton().click();
addRemoveColumn(0);
addRemoveColumn(4);
addRemoveColumn(5);
addRemoveColumn(6);
addRemoveColumn(7);
addRemoveColumn(8);
addRemoveColumn(9);
addRemoveColumn(10);
assertColumnHeaderOrder(1, 2, 3, 11);
getSidebarOpenButton().click();
assertNull(getColumnHidingToggle(0));
getSidebarOpenButton().click();
addRemoveColumn(0);
assertColumnHeaderOrder(1, 2, 3, 11, 0);
getSidebarOpenButton().click();
assertEquals("Column 0 caption 0", getColumnHidingToggle(0).getText());
}
@Test
public void testColumnHidingToggleCaption_settingToggleCaption_updatesToggle() {
toggleColumnHidable(1);
getSidebarOpenButton().click();
assertEquals("column 1",
getGridElement().getHeaderCell(0, 1).getText().toLowerCase());
assertEquals("Column 1", getColumnHidingToggle(1).getText());
toggleColumnHidingToggleCaptionChange(1);
getSidebarOpenButton().click();
assertEquals("column 1",
getGridElement().getHeaderCell(0, 1).getText().toLowerCase());
assertEquals("Column 1 caption 0", getColumnHidingToggle(1).getText());
toggleColumnHidingToggleCaptionChange(1);
getSidebarOpenButton().click();
assertEquals("Column 1 caption 1", getColumnHidingToggle(1).getText());
}
@Test
public void testColumnHidingToggleCaption_settingWidgetToHeader_toggleCaptionStays() {
toggleColumnHidable(1);
getSidebarOpenButton().click();
assertEquals("column 1",
getGridElement().getHeaderCell(0, 1).getText().toLowerCase());
assertEquals("Column 1", getColumnHidingToggle(1).getText());
selectMenuPath("Component", "Columns", "Column 1", "Header Type",
"Widget Header");
getSidebarOpenButton().click();
assertEquals("Column 1", getColumnHidingToggle(1).getText());
}
@Test
public void testColumnHidingToggleCaption_settingColumnHeaderCaption_toggleCaptionIsEqual() {
toggleColumnHidable(1);
selectMenuPath("Component", "Columns", "Column 1",
"Change header caption");
getSidebarOpenButton().click();
assertEquals("column 1 header 0",
getGridElement().getHeaderCell(0, 1).getText().toLowerCase());
assertEquals("Column 1 header 0", getColumnHidingToggle(1).getText());
}
@Test
public void testColumnHidingToggleCaption_explicitlySet_toggleCaptionIsNotOverridden() {
toggleColumnHidable(1);
selectMenuPath("Component", "Columns", "Column 1",
"Change hiding toggle caption");
selectMenuPath("Component", "Columns", "Column 1",
"Change header caption");
getSidebarOpenButton().click();
assertEquals("column 1 header 0",
getGridElement().getHeaderCell(0, 1).getText().toLowerCase());
assertEquals("Column 1 caption 0", getColumnHidingToggle(1).getText());
}
private void toggleColumnHidingToggleCaptionChange(int index) {
selectMenuPath("Component", "Columns", "Column " + index,
"Change hiding toggle caption");
}
@Test
public void testFrozenColumnHiding_hiddenColumnMadeFrozen_frozenWhenMadeVisible() {
selectMenuPath("Component", "Size", "Width", "100%");
toggleColumnHidable(0);
toggleColumnHidable(1);
getSidebarOpenButton().click();
getColumnHidingToggle(0).click();
getColumnHidingToggle(1).click();
assertColumnHeaderOrder(2, 3, 4, 5);
setFrozenColumns(2);
verifyColumnNotFrozen(0);
verifyColumnNotFrozen(1);
getSidebarOpenButton().click();
getColumnHidingToggle(0).click();
assertColumnHeaderOrder(0, 2, 3, 4, 5);
verifyColumnFrozen(0);
verifyColumnNotFrozen(1);
getColumnHidingToggle(1).click();
assertColumnHeaderOrder(0, 1, 2, 3, 4, 5);
verifyColumnFrozen(0);
verifyColumnFrozen(1);
verifyColumnNotFrozen(2);
}
@Test
public void testFrozenColumnHiding_hiddenFrozenColumnUnfrozen_notFrozenWhenMadeVisible() {
selectMenuPath("Component", "Size", "Width", "100%");
toggleColumnHidable(0);
toggleColumnHidable(1);
setFrozenColumns(2);
verifyColumnFrozen(0);
verifyColumnFrozen(1);
verifyColumnNotFrozen(2);
verifyColumnNotFrozen(3);
getSidebarOpenButton().click();
getColumnHidingToggle(0).click();
getColumnHidingToggle(1).click();
assertColumnHeaderOrder(2, 3, 4, 5);
verifyColumnNotFrozen(0);
verifyColumnNotFrozen(1);
setFrozenColumns(0);
verifyColumnNotFrozen(0);
verifyColumnNotFrozen(1);
getSidebarOpenButton().click();
getColumnHidingToggle(0).click();
assertColumnHeaderOrder(0, 2, 3, 4, 5);
verifyColumnNotFrozen(0);
verifyColumnNotFrozen(1);
getColumnHidingToggle(1).click();
assertColumnHeaderOrder(0, 1, 2, 3, 4, 5);
verifyColumnNotFrozen(0);
verifyColumnNotFrozen(1);
verifyColumnNotFrozen(2);
}
@Test
public void showColumnAndScrollbarWhenScrolledDownAndVisibleRowsChange()
throws Exception {
// Set a (un)suitable height
selectMenuPath("Component", "Size", "HeightMode Row");
selectMenuPath("Component", "Size", "Height by Rows", "4.33 rows");
toggleAllColumnsHidable();
// Hide all but the first 3
getSidebarOpenButton().click();
for (int i = 3; i < 12; i++) {
getColumnHidingToggle(i).click();
}
getSidebarOpenButton().click();
// Scroll all the way to the end
$(GridElement.class).first().scrollToRow(999);
// Show the fourth column
getSidebarOpenButton().click();
getColumnHidingToggle(3).click();
// Make sure that the new column contains the data it should
Assert.assertEquals("(999, 3)",
getGridElement().getCell(999, 3).getText());
}
private void verifyColumnFrozen(int index) {
assertTrue(getGridElement().getHeaderCell(0, index).isFrozen());
}
private void verifyColumnNotFrozen(int index) {
assertFalse(getGridElement().getHeaderCell(0, index).isFrozen());
}
private void toggleColumnHidable(int index) {
selectMenuPath("Component", "Columns", "Column " + index, "Hidable");
}
private void toggleAllColumnsHidable() {
selectMenuPath("Component", "Columns", "All columns hidable");
}
private void addRemoveColumn(int index) {
selectMenuPath("Component", "Columns", "Column " + index,
"Add / Remove");
}
}