package org.jboss.weld.tests.contexts.conversation.weld1262; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import java.net.URL; import java.util.HashSet; import java.util.Set; import org.jboss.arquillian.container.test.api.Deployment; import org.jboss.arquillian.junit.Arquillian; import org.jboss.arquillian.test.api.ArquillianResource; import org.jboss.shrinkwrap.api.ShrinkWrap; import org.jboss.shrinkwrap.api.asset.EmptyAsset; import org.jboss.shrinkwrap.api.spec.WebArchive; import org.jboss.weld.test.util.Utils; import org.jboss.weld.tests.category.Integration; import org.junit.Test; import org.junit.experimental.categories.Category; import org.junit.runner.RunWith; import com.gargoylesoftware.htmlunit.WebClient; import com.gargoylesoftware.htmlunit.html.HtmlElement; import com.gargoylesoftware.htmlunit.html.HtmlPage; import com.gargoylesoftware.htmlunit.html.HtmlSpan; import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput; /** * * @author tremes * */ @Category(Integration.class) @RunWith(Arquillian.class) public class Weld1262Test { @ArquillianResource URL url; @Deployment(testable = false) public static WebArchive createDeployment() { return ShrinkWrap .create(WebArchive.class, Utils.getDeploymentNameAsHash(Weld1262Test.class, Utils.ARCHIVE_TYPE.WAR)) .addClasses(Crossroad.class,Guide.class) .addAsWebResource(Weld1262Test.class.getPackage(), "crossroad.xhtml", "crossroad.xhtml") .addAsWebResource(Weld1262Test.class.getPackage(), "road.xhtml", "road.xhtml") .addAsWebInfResource(Weld1262Test.class.getPackage(), "web.xml", "web.xml") .addAsWebInfResource(Weld1262Test.class.getPackage(), "faces-config.xml", "faces-config.xml") .addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml"); } @Test public void testConversationPropagatedByNavigationHandler() throws Exception { HtmlPage main = startConversation(); HtmlPage road = getFirstMatchingElement(main, HtmlSubmitInput.class, "guide").click(); assertEquals("Guide is active",getFirstMatchingElement(road,HtmlSpan.class, "guideMessage").getTextContent()); } @Test public void testConversationNotPropagatedByFacesRedirect() throws Exception { HtmlPage main = startConversation(); HtmlPage road = getFirstMatchingElement(main, HtmlSubmitInput.class, "redirect").click(); assertEquals("Guide is not active",getFirstMatchingElement(road,HtmlSpan.class, "guideMessage").getTextContent()); } public HtmlPage startConversation() throws Exception{ WebClient client = new WebClient(); HtmlPage main = client.getPage(url.toString().concat("crossroad.jsf")); main = getFirstMatchingElement(main, HtmlSubmitInput.class, "begin").click(); String cid = getFirstMatchingElement(main, HtmlSpan.class, "cid").getTextContent(); assertTrue(Integer.valueOf(cid) > 0); return main; } protected <T extends HtmlElement> T getFirstMatchingElement(HtmlPage page, Class<T> elementClass, String id) { Set<T> inputs = getElements(page.getBody(), elementClass); for (T input : inputs) { if (input.getId().contains(id)) { return input; } } return null; } protected <T> Set<T> getElements(HtmlElement rootElement, Class<T> elementClass) { Set<T> result = new HashSet<T>(); for (HtmlElement element : rootElement.getChildElements()) { result.addAll(getElements(element, elementClass)); } if (elementClass.isInstance(rootElement)) { result.add(elementClass.cast(rootElement)); } return result; } }