/*
* 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.richNotify;
import java.util.concurrent.TimeUnit;
import org.jboss.arquillian.graphene.Graphene;
import org.openqa.selenium.TimeoutException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.richfaces.fragment.common.Event;
import org.richfaces.fragment.common.Utils;
import org.richfaces.fragment.notify.NotifyMessage.NotifyMessagePosition;
import org.richfaces.fragment.notify.RichFacesNotifyMessage;
import org.richfaces.tests.metamer.bean.rich.RichNotifyBean;
import org.richfaces.tests.metamer.ftest.AbstractWebDriverTest;
import org.richfaces.tests.metamer.ftest.annotations.IssueTracking;
import org.richfaces.tests.metamer.ftest.extension.attributes.coverage.annotations.CoversAttributes;
import org.richfaces.tests.metamer.ftest.extension.configurator.skip.annotation.Skip;
import org.richfaces.tests.metamer.ftest.extension.configurator.templates.annotation.Templates;
import org.richfaces.tests.metamer.ftest.webdriver.Attributes;
import org.testng.Assert;
import org.testng.annotations.Test;
/**
* @author <a href="mailto:jstefek@redhat.com">Jiri Stefek</a>
*/
public class TestNotifyAttributes extends AbstractWebDriverTest {
private final Attributes<NotifyAttributes> notifyAttributes = getAttributes();
@FindBy(className = "rf-ntf")
private RichFacesNotifyMessage message;
@FindBy(id = "newSpan")
private WebElement newSpan;
public static void waitForOpacityChange(final double opacity, final WebElement element) {
Graphene.waitGui().withTimeout(3, TimeUnit.SECONDS).until(new ExpectedCondition<Boolean>() {
@Override
public Boolean apply(WebDriver from) {
return element.getCssValue("opacity").equals((opacity == 0 ? "0" : (opacity == 1 ? "1" : String.valueOf(opacity))));
}
@Override
public String toString() {
return "opacity change to value '" + opacity + "'. Actual value '" + element.getCssValue("opacity") + "'";
}
});
}
@Override
public String getComponentTestPagePath() {
return "richNotify/simple.xhtml";
}
@Test(groups = "smoke")
@CoversAttributes("detail")
public void testDetail() {
String detail = "Some detail";
notifyAttributes.set(NotifyAttributes.detail, detail);
Assert.assertEquals(message.getDetail(), detail);
Assert.assertEquals(message.getSummary(), RichNotifyBean.DEFAULT_SUMMARY);
}
@Test(groups = "smoke")
@CoversAttributes("escape")
public void testEscape() {
String newSpanString = "<span id='newSpan'>new span</span>";
notifyAttributes.set(NotifyAttributes.detail, newSpanString);
notifyAttributes.set(NotifyAttributes.escape, Boolean.FALSE);
assertVisible(newSpan, "New created span should be visible");
notifyAttributes.set(NotifyAttributes.escape, Boolean.TRUE);
assertNotVisible(newSpan, "New created span should not be visible");
}
@Test
public void testInit() {
Assert.assertTrue(message.advanced().isVisible());
Assert.assertEquals(message.getDetail(), RichNotifyBean.DEFAULT_DETAIL);
Assert.assertEquals(message.getSummary(), RichNotifyBean.DEFAULT_SUMMARY);
}
@IssueTracking("https://issues.jboss.org/browse/RF-12925")
@Test
@Skip
@CoversAttributes({ "detail", "summary" })
public void testNoDetailNoSummary() {
attsSetter()
.setAttribute(NotifyAttributes.detail).toValue("")
.setAttribute(NotifyAttributes.summary).toValue("")
.asSingleAction().perform();
Assert.assertFalse(message.advanced().isVisible());
}
@Test
@CoversAttributes("nonblocking")
public void testNonblocking() {
attsSetter()
.setAttribute(NotifyAttributes.nonblocking).toValue(true)
.setAttribute(NotifyAttributes.nonblockingOpacity).toValue(0)
.asSingleAction().perform();
Utils.triggerJQ(executor, "mouseover", message.advanced().getRootElement());
TestNotifyAttributes.waitForOpacityChange(0, message.advanced().getRootElement());
Utils.triggerJQ(executor, "mouseout", message.advanced().getRootElement());
TestNotifyAttributes.waitForOpacityChange(1, message.advanced().getRootElement());
}
@Test
@CoversAttributes("nonblockingOpacity")
public void testNonblockingOpacity() {
attsSetter()
.setAttribute(NotifyAttributes.nonblocking).toValue(true)
.setAttribute(NotifyAttributes.nonblockingOpacity).toValue(0.5)
.asSingleAction().perform();
Utils.triggerJQ(executor, "mouseover", message.advanced().getRootElement());
TestNotifyAttributes.waitForOpacityChange(0.5, message.advanced().getRootElement());
Utils.triggerJQ(executor, "mouseout", message.advanced().getRootElement());
TestNotifyAttributes.waitForOpacityChange(1, message.advanced().getRootElement());
}
@Test
@CoversAttributes("onclick")
@Templates(value = "plain")
public void testOnclick() {
testFireEvent(Event.CLICK, message.advanced().getRootElement());
}
@Test
@CoversAttributes("ondblclick")
@Templates(value = "plain")
public void testOndblclick() {
testFireEvent(Event.DBLCLICK, message.advanced().getRootElement());
}
@Test
@CoversAttributes("onkeydown")
@Templates(value = "plain")
public void testOnkeydown() {
testFireEvent(Event.KEYDOWN, message.advanced().getRootElement());
}
@Test
@CoversAttributes("onkeypress")
@Templates(value = "plain")
public void testOnkeypress() {
testFireEvent(Event.KEYPRESS, message.advanced().getRootElement());
}
@Test
@CoversAttributes("onkeyup")
@Templates(value = "plain")
public void testOnkeyup() {
testFireEvent(Event.KEYUP, message.advanced().getRootElement());
}
@Test
@CoversAttributes("onmousedown")
@Templates(value = "plain")
public void testOnmousedown() {
testFireEvent(Event.MOUSEDOWN, message.advanced().getRootElement());
}
@Test
@CoversAttributes("onmousemove")
@Templates(value = "plain")
public void testOnmousemove() {
testFireEvent(Event.MOUSEMOVE, message.advanced().getRootElement());
}
@Test
@CoversAttributes("onmouseout")
@Templates(value = "plain")
public void testOnmouseout() {
testFireEvent(Event.MOUSEOUT, message.advanced().getRootElement());
}
@Test
@CoversAttributes("onmouseover")
@Templates(value = "plain")
public void testOnmouseover() {
testFireEvent(Event.MOUSEOVER, message.advanced().getRootElement());
}
@Test
@CoversAttributes("onmouseup")
@Templates(value = "plain")
public void testOnmouseup() {
testFireEvent(Event.MOUSEUP, message.advanced().getRootElement());
}
@Test
@CoversAttributes("rendered")
@Templates(value = "plain")
public void testRendered() {
notifyAttributes.set(NotifyAttributes.rendered, Boolean.TRUE);
assertVisible(message.advanced().getRootElement(), "Message should be visible.");
notifyAttributes.set(NotifyAttributes.rendered, Boolean.FALSE);
assertNotVisible(message.advanced().getRootElement(), "Message should not be visible.");
}
@Test
@CoversAttributes("showCloseButton")
public void testShowCloseButton() {
notifyAttributes.set(NotifyAttributes.showCloseButton, Boolean.TRUE);
message.close();
assertNotVisible(message.advanced().getRootElement(), "Message should not be visible after close.");
notifyAttributes.set(NotifyAttributes.showCloseButton, Boolean.FALSE);
try {
message.close();
} catch (TimeoutException ok) {
return;
}
Assert.fail("The notify message should not be closeable if there is no close button.");
}
@Test
@CoversAttributes("showShadow")
@IssueTracking("https://issues.jboss.org/browse/RF-13792")
public void testShowShadow() {
notifyAttributes.set(NotifyAttributes.showShadow, Boolean.TRUE);
assertVisible(message.advanced().getShadowElement(), "Shadow should be visible");
notifyAttributes.set(NotifyAttributes.showShadow, Boolean.FALSE);
assertNotVisible(message.advanced().getShadowElement(), "Shadow should not be visible");
}
@Test
@CoversAttributes("stack")
public void testStack() {
String[] stacks = { "topLeftStack", "bottomRightStack" };
//default position is top right
notifyAttributes.set(NotifyAttributes.stack, "");
Assert.assertEquals(message.advanced().getPosition(), NotifyMessagePosition.TOP_RIGHT);
notifyAttributes.set(NotifyAttributes.stack, stacks[0]);
Assert.assertEquals(message.advanced().getPosition(), NotifyMessagePosition.TOP_LEFT);
notifyAttributes.set(NotifyAttributes.stack, stacks[1]);
Assert.assertEquals(message.advanced().getPosition(), NotifyMessagePosition.BOTTOM_RIGHT);
}
@Test
@CoversAttributes("stayTime")
public void testStaytime() {
attsSetter()
.setAttribute(NotifyAttributes.stayTime).toValue(1000)
.setAttribute(NotifyAttributes.sticky).toValue(false)
.asSingleAction().perform();
waiting(3000);
assertNotVisible(message.advanced().getRootElement(), "Message should not be visible now.");
}
@Test
@CoversAttributes("sticky")
@IssueTracking("https://issues.jboss.org/browse/RF-11558")
public void testSticky() {
attsSetter()
.setAttribute(NotifyAttributes.stayTime).toValue(1000)
.setAttribute(NotifyAttributes.sticky).toValue(true)
.setAttribute(NotifyAttributes.showCloseButton).toValue(true)
.asSingleAction().perform();
waiting(3000);
assertVisible(message.advanced().getRootElement(), "Message should be visible until closed.");
message.close();
assertNotVisible(message.advanced().getRootElement(), "Message should not be visible after closed.");
// when sticky, the close button should be always visible ( https://issues.jboss.org/browse/RF-11558 )
notifyAttributes.set(NotifyAttributes.showCloseButton, false);// this should reload the page and show the notify message again
waiting(3000);
assertVisible(message.advanced().getRootElement(), "Message should be visible until closed.");
message.close();
assertNotVisible(message.advanced().getRootElement(), "Message should not be visible after closed.");
}
@Test
@CoversAttributes("styleClass")
@Templates(value = "plain")
public void testStyleClass() {
testStyleClass(message.advanced().getRootElement());
}
@Test
@CoversAttributes("summary")
public void testSummary() {
String summary = "Some summary";
notifyAttributes.set(NotifyAttributes.summary, summary);
Assert.assertEquals(message.getDetail(), RichNotifyBean.DEFAULT_DETAIL);
Assert.assertEquals(message.getSummary(), summary);
}
}