/* * 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.richCollapsibleSubTableToggler; import static org.richfaces.tests.metamer.ftest.extension.configurator.use.annotation.ValuesFrom.FROM_FIELD; import static org.richfaces.tests.metamer.ftest.richCollapsibleSubTableToggler.CollapsibleSubTableTogglerAttributes.rendered; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertFalse; import static org.testng.Assert.assertTrue; import org.richfaces.fragment.collapsibleSubTableToggler.RichFacesCollapsibleSubTableToggler; import org.richfaces.fragment.common.Event; import org.richfaces.fragment.common.Utils; 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.extension.configurator.use.annotation.UseWithField; import org.richfaces.tests.metamer.ftest.richCollapsibleSubTable.AbstractCollapsibleSubTableTest; 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> */ public class TestCollapsibleSubTableToggler extends AbstractCollapsibleSubTableTest { private static final String IMAGE_URL = "/resources/images/star.png"; private static final String LABEL = "Label"; private final Attributes<CollapsibleSubTableTogglerAttributes> attributes = getAttributes(); private Event event = Event.CLICK; private Event[] events = new Event[] { Event.DBLCLICK, Event.CLICK }; private Boolean toggleByImage = Boolean.TRUE; @Override public String getComponentTestPagePath() { return "richCollapsibleSubTableToggler/simple.xhtml"; } @Test @CoversAttributes("collapsedIcon") @Templates("plain") public void testCollapsedIcon() { attributes.set(CollapsibleSubTableTogglerAttributes.collapsedIcon, IMAGE_URL); new TogglerTester() { private String expandedImageUrl; @Override public void verifyBeforeCollapsion() { assertTrue(toggler.isExpanded()); expandedImageUrl = toggler.getVisibleImage().getAttribute("src"); } @Override public void verifyAfterCollapsion() { assertFalse(toggler.isExpanded()); assertTrue(toggler.getVisibleImage().getAttribute("src").contains(IMAGE_URL)); } @Override public void verifyAfterExpansion() { assertTrue(toggler.isExpanded()); assertEquals(toggler.getVisibleImage().getAttribute("src"), expandedImageUrl); } }.test(); } @Test @CoversAttributes("collapsedLabel") @Templates("plain") public void testCollapsedLabel() { attsSetter() .setAttribute(CollapsibleSubTableTogglerAttributes.collapsedIcon).toValue("none") .setAttribute(CollapsibleSubTableTogglerAttributes.collapsedLabel).toValue(LABEL) .asSingleAction().perform(); new TogglerTester() { private String expandedImageUrl; @Override public void verifyBeforeCollapsion() { assertTrue(toggler.isExpanded()); assertFalse(Utils.isVisible(toggler.getVisibleLabel())); expandedImageUrl = toggler.getVisibleImage().getAttribute("src"); } @Override public void verifyAfterCollapsion() { assertFalse(toggler.isExpanded()); assertEquals(toggler.getVisibleLabel().getText(), LABEL); } @Override public void verifyAfterExpansion() { assertTrue(toggler.isExpanded()); assertFalse(Utils.isVisible(toggler.getVisibleLabel())); assertEquals(toggler.getVisibleImage().getAttribute("src"), expandedImageUrl); } }.test(); } @Test @CoversAttributes({ "event", "FOR" }) @Templates("plain") @UseWithField(field = "event", valuesFrom = FROM_FIELD, value = "events") public void testEvent() { attributes.set(CollapsibleSubTableTogglerAttributes.event, event); new TogglerTester().test(); } @Test @CoversAttributes("expandedIcon") @Templates("plain") public void testExpandedIcon() { attributes.set(CollapsibleSubTableTogglerAttributes.expandedIcon, IMAGE_URL); new TogglerTester() { @Override public void verifyBeforeCollapsion() { assertTrue(toggler.isExpanded()); assertTrue(toggler.getVisibleImage().getAttribute("src").contains(IMAGE_URL)); } @Override public void verifyAfterCollapsion() { assertFalse(toggler.isExpanded()); } @Override public void verifyAfterExpansion() { assertTrue(toggler.isExpanded()); assertTrue(toggler.getVisibleImage().getAttribute("src").contains(IMAGE_URL)); } }.test(); } @Test @CoversAttributes("expandedLabel") @Templates("plain") public void testExpandedLabel() { attributes.set(CollapsibleSubTableTogglerAttributes.expandedLabel, LABEL); new TogglerTester() { @Override public void verifyBeforeCollapsion() { assertTrue(toggler.isExpanded()); assertEquals(toggler.getVisibleLabel().getText(), LABEL); } @Override public void verifyAfterCollapsion() { assertFalse(toggler.isExpanded()); assertFalse(Utils.isVisible(toggler.getVisibleLabel())); } @Override public void verifyAfterExpansion() { assertTrue(toggler.isExpanded()); assertEquals(toggler.getVisibleLabel().getText(), LABEL); } }.test(); } @Test @CoversAttributes("rendered") @Templates("plain") public void testRendered() { attributes.set(rendered, Boolean.FALSE); assertFalse(getSubTable(Boolean.TRUE).advanced().getTableToggler().isVisible()); assertFalse(getSubTable(Boolean.FALSE).advanced().getTableToggler().isVisible()); attributes.set(rendered, Boolean.TRUE); assertTrue(getSubTable(Boolean.TRUE).advanced().getTableToggler().isVisible()); assertTrue(getSubTable(Boolean.FALSE).advanced().getTableToggler().isVisible()); } private class TogglerTester { private CollapsibleSubTableWithEmployees subtable; protected RichFacesCollapsibleSubTableToggler toggler; public void test() { for (int i = 1; i <= 2; i++) { subtable = getSubTable(i == 1); toggler = subtable.advanced().getTableToggler(); toggler.setToggleEvent(event); if (toggleByImage) { toggler.setToggleByImage(); } else { toggler.setToggleByLabel(); } assertTrue(subtable.advanced().isExpanded(), "Table should be expanded."); verifyBeforeCollapsion(); toggler.toggle(); subtable.advanced().waitUntilTableCollapses().perform(); verifyAfterCollapsion(); toggler.toggle(); subtable.advanced().waitUntilTableExpands().perform(); verifyAfterExpansion(); } } protected void verifyAfterCollapsion() { } protected void verifyAfterExpansion() { } protected void verifyBeforeCollapsion() { } } }