/*
* 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.richPanelMenuGroup;
import static org.jboss.arquillian.graphene.Graphene.guardAjax;
import static org.richfaces.tests.metamer.ftest.BasicAttributes.disabledClass;
import static org.richfaces.tests.metamer.ftest.richPanelMenuGroup.PanelMenuGroupAttributes.disabled;
import static org.richfaces.tests.metamer.ftest.richPanelMenuGroup.PanelMenuGroupAttributes.leftCollapsedIcon;
import static org.richfaces.tests.metamer.ftest.richPanelMenuGroup.PanelMenuGroupAttributes.leftDisabledIcon;
import static org.richfaces.tests.metamer.ftest.richPanelMenuGroup.PanelMenuGroupAttributes.leftExpandedIcon;
import static org.richfaces.tests.metamer.ftest.richPanelMenuGroup.PanelMenuGroupAttributes.rendered;
import static org.richfaces.tests.metamer.ftest.richPanelMenuGroup.PanelMenuGroupAttributes.rightCollapsedIcon;
import static org.richfaces.tests.metamer.ftest.richPanelMenuGroup.PanelMenuGroupAttributes.rightDisabledIcon;
import static org.richfaces.tests.metamer.ftest.richPanelMenuGroup.PanelMenuGroupAttributes.rightExpandedIcon;
import static org.richfaces.tests.metamer.ftest.richPanelMenuGroup.PanelMenuGroupAttributes.selectable;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertTrue;
import javax.faces.event.PhaseId;
import org.jboss.arquillian.graphene.Graphene;
import org.jboss.arquillian.graphene.condition.element.WebElementConditionFactory;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.interactions.Action;
import org.richfaces.fragment.common.Event;
import org.richfaces.fragment.common.Utils;
import org.richfaces.fragment.panelMenu.RichFacesPanelMenuGroup;
import org.richfaces.tests.metamer.ftest.BasicAttributes;
import org.richfaces.tests.metamer.ftest.annotations.IssueTracking;
import org.richfaces.tests.metamer.ftest.checker.IconsChecker;
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.extension.configurator.use.annotation.ValuesFrom;
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:jjamrich@redhat.com">Jan Jamrich</a>
* @since 4.3.1
*/
public class TestPanelMenuGroupSimple extends AbstractPanelMenuGroupTest {
private final Attributes<PanelMenuGroupAttributes> panelMenuGroupAttributes = getAttributes();
final Action collapseFirstGroupAction = new Action() {
@Override
public void perform() {
Graphene.guardAjax(getPage().getMenu()).collapseGroup(1);
}
};
private Event testedEvent;
private final Event[] testedEvents = new Event[] { Event.CLICK, Event.DBLCLICK, Event.KEYPRESS };
@Test
@CoversAttributes("action")
public void testAction() {
collapseFirstGroupAction.perform();
getPage().assertListener(PhaseId.INVOKE_APPLICATION, "action invoked");
}
@Test
@CoversAttributes("actionListener")
public void testActionListener() {
collapseFirstGroupAction.perform();
getPage().assertListener(PhaseId.INVOKE_APPLICATION, "action listener invoked");
}
@Test
@CoversAttributes("collapseEvent")
@UseWithField(field = "testedEvent", valuesFrom = ValuesFrom.FROM_FIELD, value = "testedEvents")
@Templates(value = "plain")
public void testCollapseEvent() {
RichFacesPanelMenuGroup menuGroup = getPage().getTopGroup();
// setup events
panelMenuGroupAttributes.set(PanelMenuGroupAttributes.collapseEvent, testedEvent);
menuGroup.advanced().setCollapseEvent(testedEvent);
// collapse the group
guardAjax(getPage().getMenu()).collapseGroup("Group 2 (influenced by attributes)");
}
@Test
@CoversAttributes("data")
public void testData() {
testData(collapseFirstGroupAction);
}
@Test
@CoversAttributes("disabled")
public void testDisabled() {
assertFalse(getPage().getTopGroup().advanced().isDisabled());
panelMenuGroupAttributes.set(disabled, true);
assertFalse(getPage().getTopGroup().advanced().isSelected());
assertTrue(getPage().getTopGroup().advanced().isDisabled());
Graphene.guardNoRequest(getPage().getTopGroup().advanced().getHeaderElement()).click();
assertFalse(getPage().getTopGroup().advanced().isSelected());
assertTrue(getPage().getTopGroup().advanced().isDisabled());
}
@Test
@CoversAttributes("disabledClass")
@Templates(value = "plain")
public void testDisabledClass() {
panelMenuGroupAttributes.set(disabled, true);
testStyleClass(getPage().getTopGroup().advanced().getRootElement(), disabledClass);
}
@Test
@CoversAttributes("expandEvent")
@UseWithField(field = "testedEvent", valuesFrom = ValuesFrom.FROM_FIELD, value = "testedEvents")
@Templates(value = "plain")
public void testExpandEvent() {
RichFacesPanelMenuGroup menuGroup = getPage().getTopGroup();
// collapse the tested group first, we are checking the @expandEvent
guardAjax(getPage().getMenu()).collapseGroup("Group 2 (influenced by attributes)");
// setup events
panelMenuGroupAttributes.set(PanelMenuGroupAttributes.expandEvent, testedEvent);
menuGroup.advanced().setExpandEvent(testedEvent);
// expand the group
guardAjax(getPage().getMenu()).expandGroup("Group 2 (influenced by attributes)");
}
@Test
@CoversAttributes("expanded")
@Templates(value = "plain")
public void testExpanded() {
assertEquals(getPage().getExpandedGroupsOutputText(), "{group1=false, group2=true, group23=true, group3=false}");
// collapse group23
guardAjax(getPage().getSubGroup().advanced().getLabelElement()).click();
assertEquals(getPage().getExpandedGroupsOutputText(), "{group1=false, group2=true, group23=false, group3=false}");
// collapse group2
guardAjax(getPage().getTopGroup().advanced().getLabelElement()).click();
assertEquals(getPage().getExpandedGroupsOutputText(), "{group1=false, group2=false, group23=false, group3=false}");
}
@Test
@CoversAttributes("label")
@Templates(value = "plain")
public void testLabel() {
String testedVal = "completely new label +éíáýžřčšě;";
panelMenuGroupAttributes.set(PanelMenuGroupAttributes.label, testedVal);
assertEquals(getPage().getTopGroup().advanced().getLabelElement().getText().trim(), "Group 2 (influenced by attributes) - " + testedVal);
assertEquals(getPage().getSubGroup().advanced().getLabelElement().getText().trim(), "Group 2.3 (influenced by attributes) - " + testedVal);
}
@Test
@CoversAttributes("leftCollapsedIcon")
@Templates(value = "plain")
public void testLeftCollapsedIcon() {
Graphene.guardAjax(getPage().getMenu()).collapseGroup(1);
verifyStandardIcons(leftCollapsedIcon, getPage().getTopGroup().advanced().getLeftIconElement(), getPage().getTopGroup().advanced().getLeftIconElement());
panelMenuGroupAttributes.set(disabled, true);
// both icon should be "transparent" - invisible
assertTrue(getPage().getTopGroup().advanced().isTransparent(getPage().getTopGroup().advanced().getLeftIconElement()));
}
@Test
@CoversAttributes("leftDisabledIcon")
@Templates(value = "plain")
public void testLeftDisabledIcon() {
panelMenuGroupAttributes.set(disabled, true);
verifyStandardIcons(leftDisabledIcon, getPage().getTopGroup().advanced().getLeftIconElement(), getPage().getTopGroup().advanced().getLeftIconElement());
}
@Test
@CoversAttributes("leftExpandedIcon")
@Templates(value = "plain")
public void testLeftExpandedIcon() {
verifyStandardIcons(leftExpandedIcon, getPage().getTopGroup().advanced().getLeftIconElement(), getPage().getTopGroup().advanced().getLeftIconElement());
panelMenuGroupAttributes.set(disabled, true);
assertTrue(getPage().getTopGroup().advanced().isTransparent(getPage().getTopGroup().advanced().getRightIconElement()));
}
@Test
@CoversAttributes("leftIconClass")
@Templates(value = "plain")
public void testLeftIconClass() {
testStyleClass(Utils.getAncestorOfElement(getPage().getTopGroup().advanced().getLeftIconElement(), "td"), BasicAttributes.leftIconClass);
}
@Test
@CoversAttributes("limitRender")
public void testLimitRender() {
testLimitRenderWithSwitchTypeOrMode(collapseFirstGroupAction);
}
@Test
@CoversAttributes("name")
@Templates(value = "plain")
public void testName() {
String testedVal = "new group name +éíáýžřčšě;";
panelMenuGroupAttributes.set(PanelMenuGroupAttributes.name, testedVal);
// select group group23
guardAjax(getPage().getSubGroup().advanced().getLabelElement()).click();
assertEquals(getPage().getSelectedItemOutputText(), "group23 - " + testedVal);
// select group group2
guardAjax(getPage().getTopGroup().advanced().getLabelElement()).click();
assertEquals(getPage().getSelectedItemOutputText(), "group2 - " + testedVal);
}
@Test
@CoversAttributes("render")
public void testRender() {
testRenderWithSwitchTypeOrMode(new Action() {
@Override
public void perform() {
guardAjax(getPage().getTopGroup().advanced().getLabelElement()).click();
}
});
}
@Test
@CoversAttributes("rendered")
@Templates(value = "plain")
public void testRendered() {
assertTrue(new WebElementConditionFactory(getPage().getTopGroup().advanced().getRootElement()).isVisible().apply(driver));
panelMenuGroupAttributes.set(rendered, false);
assertFalse(new WebElementConditionFactory(getPage().getTopGroup().advanced().getRootElement()).isVisible().apply(driver));
}
@Test
@CoversAttributes("rightCollapsedIcon")
@Templates(value = "plain")
public void testRightCollapsedIcon() {
Graphene.guardAjax(getPage().getMenu()).collapseGroup(1);
verifyStandardIcons(rightCollapsedIcon, getPage().getTopGroup().advanced().getRightIconElement(), getPage().getTopGroup().advanced().getRightIconElement());
panelMenuGroupAttributes.set(disabled, true);
assertTrue(getPage().getTopGroup().advanced().isTransparent(getPage().getTopGroup().advanced().getRightIconElement()));
}
@Test
@CoversAttributes("rightDisabledIcon")
@Templates(value = "plain")
public void testRightDisabledIcon() {
panelMenuGroupAttributes.set(disabled, true);
verifyStandardIcons(rightDisabledIcon, getPage().getTopGroup().advanced().getRightIconElement(), getPage().getTopGroup().advanced().getRightIconElement());
}
@Test
@CoversAttributes("rightExpandedIcon")
@Templates(value = "plain")
public void testRightExpandedIcon() {
verifyStandardIcons(rightExpandedIcon, getPage().getTopGroup().advanced().getRightIconElement(), getPage().getTopGroup().advanced().getRightIconElement());
panelMenuGroupAttributes.set(disabled, true);
assertTrue(getPage().getTopGroup().advanced().isTransparent(getPage().getTopGroup().advanced().getRightIconElement()));
}
@Test
@CoversAttributes("rightIconClass")
@Templates(value = "plain")
public void testRightIconClass() {
testStyleClass(Utils.getAncestorOfElement(getPage().getTopGroup().advanced().getRightIconElement(), "td"), BasicAttributes.rightIconClass);
}
@Test
@CoversAttributes("selectable")
@IssueTracking("https://issues.jboss.org/browse/RF-13727")
public void testSelectable() {
panelMenuGroupAttributes.set(selectable, false);
guardAjax(getPage().getMenu()).collapseGroup(1);
assertFalse(getPage().getTopGroup().advanced().isSelected());
panelMenuGroupAttributes.set(selectable, true);
guardAjax(getPage().getMenu()).expandGroup(1);
assertTrue(getPage().getTopGroup().advanced().isSelected());
}
@Test
@CoversAttributes("status")
public void testStatus() {
testStatus(collapseFirstGroupAction);
}
@Test
@CoversAttributes("style")
@Templates(value = "plain")
public void testStyle() {
testStyle(getPage().getTopGroup().advanced().getRootElement());
}
@Test
@CoversAttributes("styleClass")
@IssueTracking("https://issues.jboss.org/browse/RF-10485")
@Templates(value = "plain")
public void testStyleClass() {
testStyleClass(getPage().getTopGroup().advanced().getRootElement());
}
private void verifyStandardIcons(PanelMenuGroupAttributes attribute, WebElement icon, WebElement imgIcon) {
new IconsChecker<PanelMenuGroupAttributes>(driver, panelMenuGroupAttributes).checkAll(attribute, icon, imgIcon, false, true);
}
}