/* * 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.abstractions; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertFalse; import static org.testng.Assert.assertTrue; import java.util.List; import org.openqa.selenium.interactions.Action; import org.richfaces.fragment.common.Event; import org.richfaces.fragment.dataTable.AbstractTable; import org.richfaces.tests.metamer.ftest.abstractions.fragments.SimpleFooterInterface; import org.richfaces.tests.metamer.ftest.abstractions.fragments.SimpleHeaderInterface; import org.richfaces.tests.metamer.ftest.abstractions.fragments.SimpleRowInterface; import org.richfaces.tests.metamer.ftest.richDataTable.DataTableAttributes; import org.richfaces.tests.metamer.ftest.webdriver.Attributes; import org.richfaces.tests.metamer.model.Capital; /** * @author <a href="mailto:jhuska@redhat.com">Juraj Huska</a> */ public abstract class DataTableSimpleTest extends AbstractDataTableTest { protected static final int COLUMNS_TOTAL = 2; private static final String NO_DATA = "There is no data."; protected Integer first = null; protected Integer rows = null; private final Attributes<DataTableAttributes> dataTableAttributes = getAttributes(); protected abstract AbstractTable<? extends SimpleHeaderInterface, ? extends SimpleRowInterface, ? extends SimpleFooterInterface> getTable(); public void testRendered() { assertTrue(getTable().advanced().isVisible()); dataTableAttributes.set(DataTableAttributes.rendered, false); assertFalse(getTable().advanced().isVisible()); assertFalse(getTable().advanced().isNoData()); assertEquals(getTable().advanced().getNumberOfColumns(), 0); assertEquals(getTable().advanced().getNumberOfVisibleRows(), 0); } public void testNoDataLabel() { assertTrue(getTable().advanced().isVisible()); assertFalse(getTable().advanced().isNoData()); dataTableAttributes.set(DataTableAttributes.noDataLabel, NO_DATA); enableShowData(false); assertTrue(getTable().advanced().isVisible()); assertTrue(getTable().advanced().isNoData()); assertEquals(getTable().advanced().getNumberOfColumns(), 0); assertEquals(getTable().advanced().getNumberOfVisibleRows(), 0); assertEquals(getTable().advanced().getNoDataElement().getText(), NO_DATA); } public void testOnrowclick() { testFireEvent("onrowclick", new Action() { @Override public void perform() { getTable().getFirstRow().getRootElement().click(); } }); } public void testOnrowdblclick() { testFireEventWithJS(getTable().getFirstRow().getStateColumn(), Event.DBLCLICK, dataTableAttributes, DataTableAttributes.onrowdblclick); } public void testOnrowkeydown() { testFireEventWithJS(getTable().getFirstRow().getStateColumn(), Event.KEYDOWN, dataTableAttributes, DataTableAttributes.onrowkeydown); } public void testOnrowkeypress() { testFireEventWithJS(getTable().getFirstRow().getStateColumn(), Event.KEYPRESS, dataTableAttributes, DataTableAttributes.onrowkeypress); } public void testOnrowkeyup() { testFireEventWithJS(getTable().getFirstRow().getStateColumn(), Event.KEYUP, dataTableAttributes, DataTableAttributes.onrowkeyup); } public void testOnrowmousedown() { testFireEventWithJS(getTable().getFirstRow().getStateColumn(), Event.MOUSEDOWN, dataTableAttributes, DataTableAttributes.onrowmousedown); } public void testOnrowmousemove() { testFireEventWithJS(getTable().getFirstRow().getStateColumn(), Event.MOUSEMOVE, dataTableAttributes, DataTableAttributes.onrowmousemove); } public void testOnrowmouseout() { testFireEventWithJS(getTable().getFirstRow().getStateColumn(), Event.MOUSEOUT, dataTableAttributes, DataTableAttributes.onrowmouseout); } public void testOnrowmouseover() { testFireEventWithJS(getTable().getFirstRow().getStateColumn(), Event.MOUSEOVER, dataTableAttributes, DataTableAttributes.onrowmouseover); } public void testOnrowmouseup() { testFireEventWithJS(getTable().getFirstRow().getStateColumn(), Event.MOUSEUP, dataTableAttributes, DataTableAttributes.onrowmouseup); } public void testRowClass() { dataTableAttributes.set(DataTableAttributes.rowClass, "metamer-ftest-class"); for (int i = 0; i < getTable().advanced().getNumberOfVisibleRows(); i += 2) { assertTrue(getTable().getRow(i).getRootElement().getAttribute("class").contains("metamer-ftest-class")); } } public void testFirst() { setFirstAttribute(); rows = null; setRowsAttribute(); verifyTable(); } public void testRows() { setRowsAttribute(); first = null; setFirstAttribute(); verifyTable(); } public void verifyTable() { assertTrue(getTable().advanced().isVisible()); assertEquals(getTable().advanced().getNumberOfColumns(), getExpectedColumns()); assertEquals(getTable().advanced().getNumberOfVisibleRows(), getExpectedRows()); assertFalse(getTable().advanced().isNoData()); } private List<Capital> getExpectedElements() { return CAPITALS.subList(getExpectedFirst(), getExpectedFirst() + getExpectedRows()); } private void setFirstAttribute() { if (first == null) { dataTableAttributes.reset(DataTableAttributes.first); } else { dataTableAttributes.set(DataTableAttributes.first, first); } } private void setRowsAttribute() { if (rows == null) { dataTableAttributes.reset(DataTableAttributes.rows); } else { dataTableAttributes.set(DataTableAttributes.rows, rows); } } private int getExpectedFirst() { if (first == null) { return 0; } else { return Math.min(ELEMENTS_TOTAL, first); } } private int getExpectedRows() { if (rows == null) { return ELEMENTS_TOTAL - getExpectedFirst(); } else { return Math.min(rows, ELEMENTS_TOTAL) - getExpectedFirst(); } } private int getExpectedColumns() { if (getExpectedRows() > 0) { return COLUMNS_TOTAL; } else { return 0; } } }