/*
* 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.elements.tabsheet;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.util.Arrays;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import com.vaadin.testbench.elements.TabSheetElement;
import com.vaadin.tests.tb3.MultiBrowserTest;
public class TabSheetElementTabWithoutCaptionTest extends MultiBrowserTest {
@Before
public void init() {
openTestURL("theme=reindeer");
}
@Test
public void openTabByCaption() {
for (int i = 1; i <= 5; i++) {
String caption = (i != 3 ? "Tab " + i : null);
$(TabSheetElement.class).first().openTab(caption);
checkSelectedTab(caption);
}
}
@Test
public void getCaptions() {
List<String> expectedCaptions = Arrays.asList(
new String[] { "Tab 1", "Tab 2", null, "Tab 4", "Tab 5" });
List<String> actualCaptions = $(TabSheetElement.class).first()
.getTabCaptions();
assertEquals("Unexpected tab captions", expectedCaptions,
actualCaptions);
}
@Test
public void closeTabByCaption() {
for (int i = 1; i <= 5; i++) {
String caption = (i != 3 ? "Tab " + i : null);
$(TabSheetElement.class).first().closeTab(caption);
checkTabClosed(caption);
}
}
@Test
public void openTabByIndex() {
int maxIndex = $(TabSheetElement.class).get(1).getTabCount();
for (int i = 0; i < maxIndex; i++) {
$(TabSheetElement.class).all().get(1).openTab(i);
checkIconTabOpen(i);
}
}
@Test
public void closeTabByIndex() {
$(TabSheetElement.class).get(1).closeTab(0);
int numTabs = $(TabSheetElement.class).get(1)
.findElements(By.className("v-tabsheet-tabitemcell")).size();
assertEquals("The number of open tabs is incorrect", 4, numTabs);
$(TabSheetElement.class).get(1).closeTab(3);
numTabs = $(TabSheetElement.class).get(1)
.findElements(By.className("v-tabsheet-tabitemcell")).size();
assertEquals("The number of open tabs is incorrect", 3, numTabs);
$(TabSheetElement.class).get(1).closeTab(2);
numTabs = $(TabSheetElement.class).get(1)
.findElements(By.className("v-tabsheet-tabitemcell")).size();
assertEquals("The number of open tabs is incorrect", 2, numTabs);
}
private void checkSelectedTab(String caption) {
// Check that the currently selected tab has the given caption.
WebElement elem = $(TabSheetElement.class).first().getWrappedElement();
List<WebElement> openTabs = elem
.findElements(By.className("v-tabsheet-tabitem-selected"));
assertTrue(
"Exactly one tab should be open, but there are "
+ openTabs.size() + " open tabs.",
openTabs.size() == 1);
WebElement tab = openTabs.get(0);
List<WebElement> openTabCaptionElements = tab
.findElement(By.className("v-caption"))
.findElements(By.className("v-captiontext"));
if (openTabCaptionElements.size() > 0) {
String openTabCaption = openTabCaptionElements.get(0).getText();
assertEquals("Wrong tab is open.", caption, openTabCaption);
} else {
assertEquals("Wrong tab is open.", caption, null);
}
}
private void checkTabClosed(String caption) {
List<String> openTabs = $(TabSheetElement.class).first()
.getTabCaptions();
assertFalse(
"The tab with caption " + caption
+ " is present, although it should have been closed.",
openTabs.contains(caption));
}
private void checkIconTabOpen(int index) {
List<WebElement> tabs = $(TabSheetElement.class).get(1)
.findElements(By.className("v-tabsheet-tabitemcell"));
boolean tabsOpen = false;
for (int i = 0; i < tabs.size(); i++) {
WebElement tab = tabs.get(i);
boolean isOpened = tab
.findElements(By.className("v-tabsheet-tabitem-selected"))
.size() > 0;
if (isOpened) {
tabsOpen = true;
assertEquals("The wrong tab is open.", index, i);
}
}
if (!tabsOpen) {
fail("There are no tabs open, but tab with index " + index
+ " should be open.");
}
}
}