/*
* JBoss, Home of Professional Open Source
* Copyright 2010-2016, Red Hat, Inc. and individual contributors
* by the @authors tag. See the copyright.txt in the distribution for a
* full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.richfaces.tests.metamer.ftest.richCollapsibleSubTable;
import static java.text.MessageFormat.format;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertTrue;
import static org.testng.Assert.fail;
import org.openqa.selenium.NoSuchElementException;
import org.openqa.selenium.WebElement;
import org.richfaces.fragment.common.Utils;
import org.richfaces.tests.metamer.ftest.BasicAttributes;
import org.richfaces.tests.metamer.ftest.annotations.IssueTracking;
import org.richfaces.tests.metamer.ftest.attributes.AttributeEnum;
import org.richfaces.tests.metamer.ftest.extension.attributes.coverage.annotations.CoversAttributes;
import org.richfaces.tests.metamer.ftest.extension.configurator.templates.annotation.Templates;
import org.richfaces.tests.metamer.ftest.webdriver.Attributes;
import org.testng.annotations.Test;
/**
* @author <a href="mailto:lfryc@redhat.com">Lukas Fryc</a>
* @author <a href="mailto:jstefek@redhat.com">Jiri Stefek</a>
*/
@Templates("plain")
public class TestCollapsibleSubTableFacets extends AbstractCollapsibleSubTableTest {
private static final String EMPTY_STRING = "";
private static final String SAMPLE_STRING = "Abc123!@#ĚščСам";
private final Attributes<FacetsAttributes> dataTableFacets = getAttributes();
@Override
public String getComponentTestPagePath() {
return "richCollapsibleSubTable/facets.xhtml";
}
@Test
public void testBirthdayFooterFacet() {
testFacet(FacetsAttributes.birthdateFooter);
}
@Test
public void testBirthdayHeaderFacet() {
testFacet(FacetsAttributes.birthdateHeader);
}
@Test
@CoversAttributes("cellClass")
public void testCellClass() {
testTableStyleClass("cellClass", "rf-cst-c", (getSubTable(isMale).getAllRows().size()
+ getSubTable(!isMale).getAllRows().size()) * 3);// 3 columns
}
@Test
@CoversAttributes("columnFooterCellClass")
public void testColumnFooterCellClass() {
testTableStyleClass("columnFooterCellClass", "rf-cst-sftr-c", 2 * 3);// 2 tables, 3 columns
}
@Test
@CoversAttributes("columnFooterClass")
public void testColumnFooterClass() {
testTableStyleClass("columnFooterClass", "rf-cst-sftr", 2);// 2 tables
}
@Test
@CoversAttributes("columnHeaderCellClass")
public void testColumnHeaderCellClass() {
testTableStyleClass("columnHeaderCellClass", "rf-cst-shdr-c", 2 * 3);// 2 tables, 3 columns
}
@Test
@CoversAttributes("columnHeaderClass")
public void testColumnHeaderClass() {
testTableStyleClass("columnHeaderClass", "rf-cst-shdr", 2);// 2 tables
}
private void testFacet(FacetsAttributes attribute) {
dataTableFacets.set(attribute, SAMPLE_STRING);
WebElement element1, element2;
switch (attribute) {
case footer:
element1 = getSubTable(isMale).advanced().getFooterElement();
element2 = getSubTable(!isMale).advanced().getFooterElement();
break;
case header:
element1 = getSubTable(isMale).advanced().getHeaderElement();
element2 = getSubTable(!isMale).advanced().getHeaderElement();
break;
case birthdateFooter:
element1 = getSubTable(isMale).advanced().getColumnFooterElement(2);
element2 = getSubTable(!isMale).advanced().getColumnFooterElement(2);
break;
case birthdateHeader:
element1 = getSubTable(isMale).advanced().getColumnHeaderElement(2);
element2 = getSubTable(!isMale).advanced().getColumnHeaderElement(2);
break;
case nameFooter:
element1 = getSubTable(isMale).advanced().getColumnFooterElement(0);
element2 = getSubTable(!isMale).advanced().getColumnFooterElement(0);
break;
case nameHeader:
element1 = getSubTable(isMale).advanced().getColumnHeaderElement(0);
element2 = getSubTable(!isMale).advanced().getColumnHeaderElement(0);
break;
case titleFooter:
element1 = getSubTable(isMale).advanced().getColumnFooterElement(1);
element2 = getSubTable(!isMale).advanced().getColumnFooterElement(1);
break;
case titleHeader:
element1 = getSubTable(isMale).advanced().getColumnHeaderElement(1);
element2 = getSubTable(!isMale).advanced().getColumnHeaderElement(1);
break;
default:
throw new UnsupportedOperationException("Unsupported option " + attribute);
}
assertEquals(element1.getText(), SAMPLE_STRING);
assertEquals(element2.getText(), SAMPLE_STRING);
dataTableFacets.set(attribute, EMPTY_STRING);
try {
String s = element1.getText();// this should throw NoSuchElementException or return an empty String
if (!s.equals(EMPTY_STRING)) {
fail(format("The table should not have <{0}> facet element.", attribute));
}
} catch (NoSuchElementException ex) {
}
try {
String s = element2.getText();// this should throw NoSuchElementException or return an empty String
if (!s.equals(EMPTY_STRING)) {
fail(format("The table should not have <{0}> facet element.", attribute));
}
} catch (NoSuchElementException ex) {
}
dataTableFacets.set(attribute, SAMPLE_STRING);
assertEquals(element1.getText(), SAMPLE_STRING);
assertEquals(element2.getText(), SAMPLE_STRING);
}
@Test
@CoversAttributes("firstRowClass")
public void testFirstRowClass() {
String klass = "metamer-ftest-class";
setAttribute("firstRowClass", "metamer-ftest-class");
WebElement row = getSubTable(isMale).getFirstRow().getRootElement();
WebElement row2 = getSubTable(!isMale).getFirstRow().getRootElement();
assertTrue(row.getAttribute("class").contains(klass));
assertTrue(row2.getAttribute("class").contains(klass));
}
@Test
@CoversAttributes("footerCellClass")
public void testFooterCellClass() {
testTableStyleClass("footerCellClass", "rf-cst-ftr-c", 2);// 2 tables
}
@Test
@CoversAttributes("footerClass")
public void testFooterClass() {
dataTableFacets.set(FacetsAttributes.footer, SAMPLE_STRING);
testStyleClass(getSubTable(isMale).advanced().getFooterElement(), BasicAttributes.footerClass);
testStyleClass(getSubTable(!isMale).advanced().getFooterElement(), BasicAttributes.footerClass);
}
@Test
public void testFooterFacet() {
testFacet(FacetsAttributes.footer);
}
@Test
@CoversAttributes("headerCellClass")
public void testHeaderCellClass() {
testTableStyleClass("headerCellClass", "rf-cst-hdr-c", 2);// 2 tables
}
@Test
@CoversAttributes("headerClass")
public void testHeaderClass() {
dataTableFacets.set(FacetsAttributes.header, SAMPLE_STRING);
testStyleClass(getSubTable(isMale).advanced().getHeaderElement(), BasicAttributes.headerClass);
testStyleClass(getSubTable(!isMale).advanced().getHeaderElement(), BasicAttributes.headerClass);
}
@Test
public void testHeaderFacet() {
testFacet(FacetsAttributes.header);
}
@Test
public void testNameFooterFacet() {
testFacet(FacetsAttributes.nameFooter);
}
@Test
public void testNameHeaderFacet() {
testFacet(FacetsAttributes.nameHeader);
}
@Test
public void testNoColumnFacets() {
dataTableFacets.set(FacetsAttributes.birthdateFooter, EMPTY_STRING);
dataTableFacets.set(FacetsAttributes.nameFooter, EMPTY_STRING);
dataTableFacets.set(FacetsAttributes.titleFooter, EMPTY_STRING);
assertEquals(getSubTable(isMale).advanced().getColumnFooterElements().size(), 0, "There should be no footer facets!");
assertEquals(getSubTable(!isMale).advanced().getColumnFooterElements().size(), 0, "There should be no footer facets!");
dataTableFacets.set(FacetsAttributes.birthdateHeader, EMPTY_STRING);
dataTableFacets.set(FacetsAttributes.nameHeader, EMPTY_STRING);
dataTableFacets.set(FacetsAttributes.titleHeader, EMPTY_STRING);
assertEquals(getSubTable(isMale).advanced().getColumnHeaderElements().size(), 0, "There should be no header facets!");
assertEquals(getSubTable(!isMale).advanced().getColumnHeaderElements().size(), 0, "There should be no header facets!");
}
@Test
@IssueTracking({ "https://issues.jboss.org/browse/RFPL-1515", "https://issues.jboss.org/browse/RF-12672" })
public void testNoDataFacet() {
showDataInTable(false);
dataTableFacets.set(FacetsAttributes.noData, EMPTY_STRING);
assertEquals(getSubTable(isMale).advanced().getNumberOfVisibleRows(), 0);
assertEquals(getSubTable(isMale).advanced().getNumberOfVisibleRows(), 0);
assertFalse(Utils.isVisible(getSubTable(isMale).advanced().getNoDataElement()));
assertFalse(Utils.isVisible(getSubTable(!isMale).advanced().getNoDataElement()));
dataTableFacets.set(FacetsAttributes.noData, SAMPLE_STRING);
assertEquals(getSubTable(isMale).advanced().getNumberOfVisibleRows(), 0);
assertEquals(getSubTable(!isMale).advanced().getNumberOfVisibleRows(), 0);
assertTrue(Utils.isVisible(getSubTable(isMale).advanced().getNoDataElement()));
assertTrue(Utils.isVisible(getSubTable(!isMale).advanced().getNoDataElement()));
assertEquals(getSubTable(isMale).advanced().getNoDataElement().getText(), SAMPLE_STRING);
assertEquals(getSubTable(!isMale).advanced().getNoDataElement().getText(), SAMPLE_STRING);
showDataInTable(true);
try {
getSubTable(isMale).advanced().getNoDataElement();
fail("There should be no noData element now");
} catch (NoSuchElementException e) {
}
assertTrue(getSubTable(isMale).advanced().isVisible());
assertEquals(getSubTable(isMale).advanced().getNumberOfVisibleRows(), 5);
try {
getSubTable(!isMale).advanced().getNoDataElement();
fail("There should be no noData element now");
} catch (NoSuchElementException e) {
}
assertTrue(getSubTable(!isMale).advanced().isVisible());
assertEquals(getSubTable(!isMale).advanced().getNumberOfVisibleRows(), 5);
}
@Test
public void testTitleFooterFacet() {
testFacet(FacetsAttributes.titleFooter);
}
@Test
public void testTitleHeaderFacet() {
testFacet(FacetsAttributes.titleHeader);
}
private enum FacetsAttributes implements AttributeEnum {
birthdateFooter, birthdateHeader, footer, header, nameFooter, nameHeader, noData, titleFooter, titleHeader
}
}