package org.richfaces.component.tabPanel; import static org.jboss.arquillian.graphene.Graphene.guardAjax; import java.net.URL; import org.jboss.arquillian.container.test.api.Deployment; import org.jboss.arquillian.container.test.api.RunAsClient; import org.jboss.arquillian.drone.api.annotation.Drone; import org.jboss.arquillian.graphene.findby.FindByJQuery; import org.jboss.arquillian.junit.Arquillian; import org.jboss.arquillian.test.api.ArquillianResource; import org.jboss.shrinkwrap.api.spec.WebArchive; import org.junit.Assert; import org.junit.Test; import org.junit.experimental.categories.Category; import org.junit.runner.RunWith; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.support.FindBy; import org.richfaces.component.tabPanel.model.SimpleBean; import org.richfaces.fragment.tabPanel.RichFacesTabPanel; import org.richfaces.integration.RichDeployment; import org.richfaces.shrinkwrap.descriptor.FaceletAsset; import category.Smoke; @RunAsClient @RunWith(Arquillian.class) public class ITStaticTab { @FindByJQuery("[id$='tabPanel']") private RichFacesTabPanel tabPanel; @Drone private WebDriver browser; @ArquillianResource private URL contextPath; @FindBy(tagName = "body") private WebElement body; @FindBy(id = "out") private WebElement out; @FindBy(id = "myForm:button") private WebElement button; @FindBy(id = "myForm:inputText") private WebElement inputText; @FindBy(id = "myForm:outputText") private WebElement outputText; @Deployment(testable = false) public static WebArchive createDeployment() { RichDeployment deployment = new RichDeployment(ITStaticTab.class); deployment.archive().addClass(SimpleBean.class); addIndexPage(deployment); addHeaderPage(deployment); addHeaderButtonPage(deployment); WebArchive archive = deployment.getFinalArchive(); return archive; } /** * {@link https://issues.jboss.org/browse/RF-12839} */ @Test @Category(Smoke.class) public void check_tab_switch() { browser.get(contextPath.toExternalForm() + "index.jsf"); guardAjax(tabPanel.advanced().getTabHeaders().get(1)).click(); Assert.assertTrue(out.getText().contains("begin")); // Assert.assertTrue(out.getText().contains("tabpanel_complete")); // Assert.assertTrue(out.getText().contains("beforedomupdate")); // Assert the oncomplete on the tab does work Assert.assertTrue(out.getText().contains("tab1_complete")); } /** * {@link https://issues.jboss.org/browse/RF-12969} */ @Test public void check_click_active_tab() { browser.get(contextPath.toExternalForm() + "index.jsf"); WebElement activeTab = tabPanel.advanced().getActiveHeaderElement(); guardAjax(activeTab).click(); Assert.assertEquals(null, body.getAttribute("JSError")); } @Test public void check_tab_execute() { browser.get(contextPath.toExternalForm() + "index.jsf"); inputText.sendKeys("abcd"); guardAjax(tabPanel.advanced().getTabHeaders().get(1)).click(); Assert.assertEquals("abcd", outputText.getText()); } /** * {@link https://issues.jboss.org/browse/RF-13278} * {@link https://issues.jboss.org/browse/RF-13687} */ @Test public void check_header_render() { browser.get(contextPath.toExternalForm() + "header.jsf"); Assert.assertEquals("0 clicks", tabPanel.advanced().getTabHeaders().get(1).findElement(By.className("rf-tab-lbl")).getText()); guardAjax(tabPanel.advanced().getTabHeaders().get(1)).click(); guardAjax(tabPanel.advanced().getTabHeaders().get(0)).click(); Assert.assertEquals("1 clicks", tabPanel.advanced().getTabHeaders().get(1).findElement(By.className("rf-tab-lbl")).getText()); guardAjax(tabPanel.advanced().getTabHeaders().get(1)).click(); Assert.assertEquals("1 clicks", tabPanel.advanced().getTabHeaders().get(1).findElement(By.className("rf-tab-lbl")).getText()); guardAjax(tabPanel.advanced().getTabHeaders().get(0)).click(); Assert.assertEquals("2 clicks", tabPanel.advanced().getTabHeaders().get(1).findElement(By.className("rf-tab-lbl")).getText()); } /** * {@link https://issues.jboss.org/browse/RF-13278} */ @Test public void check_header_button_render() { browser.get(contextPath.toExternalForm() + "headerButton.jsf"); Assert.assertEquals("0 clicks", tabPanel.advanced().getTabHeaders().get(1).findElement(By.className("rf-tab-lbl")).getText()); guardAjax(tabPanel.advanced().getTabHeaders().get(0).findElement(By.className("button"))).click(); Assert.assertEquals("1 clicks", tabPanel.advanced().getTabHeaders().get(1).findElement(By.className("rf-tab-lbl")).getText()); guardAjax(tabPanel.advanced().getTabHeaders().get(1)).click(); guardAjax(tabPanel.advanced().getTabHeaders().get(0).findElement(By.className("myText"))).click(); Assert.assertEquals("1 clicks", tabPanel.advanced().getTabHeaders().get(1).findElement(By.className("rf-tab-lbl")).getText()); guardAjax(tabPanel.advanced().getTabHeaders().get(0).findElement(By.className("button"))).click(); Assert.assertEquals("2 clicks", tabPanel.advanced().getTabHeaders().get(1).findElement(By.className("rf-tab-lbl")).getText()); } private static void addIndexPage(RichDeployment deployment) { FaceletAsset p = new FaceletAsset(); p.head("<script type='text/javascript'>"); p.head(" window.onerror=function(msg) { "); p.head(" $('body').attr('JSError',msg);"); p.head(" }"); p.head("</script>"); p.body("<h:form id='myForm'>"); p.body("<rich:tabPanel id='tabPanel' "); p.body(" onbegin='$(\"#out\").append(\"begin \\n\")'"); p.body(" oncomplete='$(\"#out\").append(\"tabpanel_complete \\n\")'"); p.body(" onbeforedomupdate='$(\"#out\").append(\"beforedomupdate \\n\")'>"); p.body(" <rich:tab id='tab0' name='tab0' header='tab0 header' "); p.body(" oncomplete='$(\"#out\").append(\"tab0_complete \\n\")'>"); p.body(" content of tab 0"); p.body(" </rich:tab>"); p.body(" <rich:tab id='tab1' name='tab1' header='tab1 header' "); p.body(" execute='inputText'"); p.body(" oncomplete='$(\"#out\").append(\"tab1_complete \\n\")'>"); p.body(" content of tab 1"); p.body(" <h:outputText id = 'outputText' value='#{simpleBean.string}' />"); p.body(" </rich:tab>"); p.body("</rich:tabPanel> "); p.body("<h:inputText id = 'inputText' value='#{simpleBean.string}' />"); p.body("<div id='out'></div>"); p.body("</h:form>"); deployment.archive().addAsWebResource(p, "index.xhtml"); } private static void addHeaderPage(RichDeployment deployment) { FaceletAsset p = new FaceletAsset(); p.body("<h:form id='myForm'>"); p.body("<rich:tabPanel id='tabPanel'>"); p.body(" <rich:tab id='tab0' name='tab0' "); // header='tab0 header' "); p.body(" action='#{simpleBean.incrementCount()}' "); p.body(" render='tabPanel@header'> "); p.body(" <f:facet name='header'> "); p.body(" Click Me "); p.body(" </f:facet> "); p.body(" content of tab 0"); p.body(" </rich:tab>"); p.body(" <rich:tab id='tab1'>"); p.body(" <f:facet name='header'> "); p.body(" <h:outputText id='label' value='#{simpleBean.count} clicks' /> "); p.body(" </f:facet> "); p.body(" content of tab 1"); p.body(" <h:outputText id='outputText' value='#{simpleBean.string}' />"); p.body(" </rich:tab>"); p.body("</rich:tabPanel> "); p.body("</h:form>"); deployment.archive().addAsWebResource(p, "header.xhtml"); } private static void addHeaderButtonPage(RichDeployment deployment) { FaceletAsset p = new FaceletAsset(); p.body("<h:form id='myForm'>"); p.body("<rich:tabPanel id='tabPanel' >"); p.body(" <rich:tab id='tab0' name='tab0'> "); // header='tab0 header' "); p.body(" <f:facet name='header'>"); p.body(" <span class='myText'>Tab 0</span> "); p.body(" <a4j:commandLink value='click me' "); p.body(" styleClass='button' "); p.body(" action='#{simpleBean.incrementCount()}' "); p.body(" render='label' "); p.body(" oncomplete='return false;' "); p.body(" execute='@this' /> "); p.body(" </f:facet> "); p.body(" content of tab 0"); p.body(" </rich:tab>"); p.body(" <rich:tab id='tab1'>"); p.body(" <f:facet name='header'> "); p.body(" <h:outputText id='label' value='#{simpleBean.count} clicks' /> "); p.body(" </f:facet> "); p.body(" content of tab 1"); p.body(" <h:outputText id = 'outputText' value='#{simpleBean.string}' />"); p.body(" </rich:tab>"); p.body("</rich:tabPanel> "); p.body("</h:form>"); deployment.archive().addAsWebResource(p, "headerButton.xhtml"); } }