package org.jboss.seam.test.integration.faces; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import java.io.Serializable; import java.net.URL; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.faces.component.UIInput; import org.jboss.arquillian.container.test.api.Deployment; import org.jboss.arquillian.container.test.api.OverProtocol; import org.jboss.arquillian.container.test.api.RunAsClient; import org.jboss.arquillian.junit.Arquillian; import org.jboss.arquillian.test.api.ArquillianResource; import org.jboss.seam.ScopeType; import org.jboss.seam.annotations.Begin; import org.jboss.seam.annotations.Create; import org.jboss.seam.annotations.Name; import org.jboss.seam.annotations.Scope; import org.jboss.seam.test.integration.Deployments; import org.jboss.shrinkwrap.api.Archive; import org.jboss.shrinkwrap.api.asset.StringAsset; import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import com.gargoylesoftware.htmlunit.WebClient; import com.gargoylesoftware.htmlunit.html.HtmlPage; // JBSEAM-5020 @RunWith(Arquillian.class) @RunAsClient public class BoundComponentConversationTest { private final WebClient client = new WebClient(); @ArquillianResource URL contextPath; @Deployment(name="BoundComponentConversationTest") @OverProtocol("Servlet 3.0") public static Archive<?> createDeployment() { // This is a client test, use a real (non-mocked) Seam deployment return Deployments.realSeamDeployment() .addClasses(MyComponent.class, MyBackingBean.class) .addAsWebResource(new StringAsset( "<html xmlns=\"http://www.w3.org/1999/xhtml\"" + " xmlns:h=\"http://java.sun.com/jsf/html\"" + " xmlns:f=\"http://java.sun.com/jsf/core\"" + " xmlns:ui=\"http://java.sun.com/jsf/facelets\">" + "<h:head></h:head>" + "<h:body>" + "<h:form id='form'>" + "<h:outputText value='Conversation id: #{conversation.id}.'/>" + "<h:inputText value='#{myComponent.value}' binding='#{myBackingBean.input}'/>" + "<h:commandButton id='test' action='test' value='Test' />" + "</h:form>" + "</h:body>" + "</html>"), "test.xhtml"); } @Ignore // JBSEAM-5020 @Test public void testConversationRestoration() throws Exception { Pattern conversationIdPattern = Pattern.compile("Conversation id: (\\d+)\\."); HtmlPage page = client.getPage(contextPath + "test.seam"); Matcher conversationIdMatcher = conversationIdPattern.matcher(page.getBody().getTextContent()); assertTrue(conversationIdMatcher.find()); String firstConversationId = conversationIdMatcher.group(1); page = page.getElementById("form:test").click(); conversationIdMatcher = conversationIdPattern.matcher(page.getBody().getTextContent()); assertTrue(conversationIdMatcher.find()); String secondConversationId = conversationIdMatcher.group(1); assertEquals(firstConversationId, secondConversationId); } @Scope(ScopeType.CONVERSATION) @Name("myComponent") public static class MyComponent implements Serializable { private static final long serialVersionUID = 1L; public String value; @Create @Begin public void begin() { } public String getValue() { return value; } public void setValue(String value) { this.value = value; } } @Scope(ScopeType.EVENT) @Name("myBackingBean") public static class MyBackingBean { private UIInput input; public UIInput getInput() { return input; } public void setInput(UIInput input) { this.input = input; } } }