Package org.springframework.faces.webflow

Source Code of org.springframework.faces.webflow.FlowFacesContextTests

package org.springframework.faces.webflow;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;

import junit.framework.TestCase;

import org.easymock.EasyMock;
import org.springframework.binding.message.DefaultMessageContext;
import org.springframework.binding.message.Message;
import org.springframework.binding.message.MessageBuilder;
import org.springframework.binding.message.MessageContext;
import org.springframework.faces.webflow.FlowFacesContext.FacesMessageSource;
import org.springframework.webflow.execution.RequestContext;

public class FlowFacesContextTests extends TestCase {

  JSFMockHelper jsf = new JSFMockHelper();

  FacesContext facesContext;

  RequestContext requestContext;

  MessageContext messageContext;

  MessageContext prepopulatedMessageContext;

  @SuppressWarnings("cast")
  protected void setUp() throws Exception {
    this.jsf.setUp();
    this.requestContext = (RequestContext) EasyMock.createMock(RequestContext.class);
    this.facesContext = new FlowFacesContext(this.requestContext, this.jsf.facesContext());
    setupMessageContext();
  }

  protected void tearDown() throws Exception {
    super.tearDown();
    this.jsf.tearDown();
  }

  public final void testCurrentInstance() {
    assertSame(FacesContext.getCurrentInstance(), this.facesContext);
  }

  public final void testAddMessage() {
    this.messageContext = new DefaultMessageContext();
    EasyMock.expect(this.requestContext.getMessageContext()).andStubReturn(this.messageContext);
    EasyMock.replay(new Object[] { this.requestContext });

    this.facesContext.addMessage("foo", new FacesMessage(FacesMessage.SEVERITY_INFO, "foo", "bar"));

    assertEquals("Message count is incorrect", 1, this.messageContext.getAllMessages().length);
    Message message = this.messageContext.getMessagesBySource(new FacesMessageSource("foo"))[0];
    assertEquals("foo : bar", message.getText());
  }

  public final void testGetGlobalMessagesOnly() {
    this.messageContext = new DefaultMessageContext();
    EasyMock.expect(this.requestContext.getMessageContext()).andStubReturn(this.messageContext);
    EasyMock.replay(new Object[] { this.requestContext });

    this.facesContext.addMessage("foo", new FacesMessage(FacesMessage.SEVERITY_INFO, "foo", "bar"));
    this.facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "FOO", "BAR"));

    int iterationCount = 0;
    Iterator<FacesMessage> i = this.facesContext.getMessages(null);
    while (i.hasNext()) {
      FacesMessage message = i.next();
      assertNotNull(message);
      iterationCount++;
    }
    assertEquals(1, iterationCount);
  }

  public final void testGetAllMessages() {
    this.messageContext = new DefaultMessageContext();
    EasyMock.expect(this.requestContext.getMessageContext()).andStubReturn(this.messageContext);
    EasyMock.replay(new Object[] { this.requestContext });

    this.facesContext.addMessage("foo", new FacesMessage(FacesMessage.SEVERITY_INFO, "foo", "bar"));
    this.facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "FOO", "BAR"));

    int iterationCount = 0;
    Iterator<FacesMessage> i = this.facesContext.getMessages();
    while (i.hasNext()) {
      FacesMessage message = i.next();
      assertNotNull(message);
      iterationCount++;
    }
    assertEquals(2, iterationCount);
  }

  public final void testAddMessages_MultipleNullIds() {
    this.messageContext = new DefaultMessageContext();
    EasyMock.expect(this.requestContext.getMessageContext()).andStubReturn(this.messageContext);
    EasyMock.replay(new Object[] { this.requestContext });

    this.facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "foo", "bar"));
    this.facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "zoo", "zar"));

    assertEquals("Message count is incorrect", 2, this.messageContext.getAllMessages().length);
    Message[] messages = this.messageContext.getMessagesBySource(new FacesMessageSource(null));
    assertEquals("foo : bar", messages[0].getText());
    assertEquals("zoo : zar", messages[1].getText());
  }

  public final void testGetMessages() {
    this.messageContext = this.prepopulatedMessageContext;
    EasyMock.expect(this.requestContext.getMessageContext()).andStubReturn(this.messageContext);
    EasyMock.replay(new Object[] { this.requestContext });

    int iterationCount = 0;
    Iterator<FacesMessage> i = this.facesContext.getMessages();
    while (i.hasNext()) {
      assertNotNull(i.next());
      iterationCount++;
    }
    assertEquals("There should be 6 messages to iterate", 6, iterationCount);
  }

  public final void testMutableGetMessages() {
    this.messageContext = this.prepopulatedMessageContext;
    EasyMock.expect(this.requestContext.getMessageContext()).andStubReturn(this.messageContext);
    EasyMock.replay(new Object[] { this.requestContext });

    this.facesContext.addMessage("TESTID", new FacesMessage("summary1"));
    FacesMessage soruceMessage = this.facesContext.getMessages("TESTID").next();
    soruceMessage.setSummary("summary2");

    // check that message sticks around even when the facesContext has been torn down and re-created during the
    // processing of the current request
    FacesContext newFacesContext = new FlowFacesContext(this.requestContext, this.jsf.facesContext());
    assertSame(FacesContext.getCurrentInstance(), newFacesContext);

    FacesMessage gotMessage = newFacesContext.getMessages("TESTID").next();
    assertEquals("summary2", gotMessage.getSummary());
  }

  public final void testGetMessagesByClientId_ForComponent() {
    this.messageContext = this.prepopulatedMessageContext;
    EasyMock.expect(this.requestContext.getMessageContext()).andStubReturn(this.messageContext);
    EasyMock.replay(new Object[] { this.requestContext });

    int iterationCount = 0;
    Iterator<FacesMessage> i = this.facesContext.getMessages("componentId");
    while (i.hasNext()) {
      FacesMessage message = i.next();
      assertNotNull(message);
      assertEquals("componentId_summary" + (iterationCount + 1), message.getSummary());
      assertEquals("componentId_detail" + (iterationCount + 1), message.getDetail());
      iterationCount++;
    }
    assertEquals(2, iterationCount);
  }

  public final void testGetMessagesByClientId_ForUserMessage() {
    this.messageContext = this.prepopulatedMessageContext;
    EasyMock.expect(this.requestContext.getMessageContext()).andStubReturn(this.messageContext);
    EasyMock.replay(new Object[] { this.requestContext });

    int iterationCount = 0;
    Iterator<FacesMessage> i = this.facesContext.getMessages("userMessage");
    while (i.hasNext()) {
      FacesMessage message = i.next();
      assertNotNull(message);
      assertEquals("userMessage", message.getSummary());
      assertEquals("userMessage", message.getDetail());
      iterationCount++;
    }
    assertEquals(1, iterationCount);
  }

  public final void testgetMessagesByClientId_InvalidId() {
    this.messageContext = this.prepopulatedMessageContext;
    EasyMock.expect(this.requestContext.getMessageContext()).andStubReturn(this.messageContext);
    EasyMock.replay(new Object[] { this.requestContext });

    Iterator<FacesMessage> i = this.facesContext.getMessages("unknown");
    assertFalse(i.hasNext());
  }

  public final void testGetClientIdsWithMessages() {
    this.messageContext = this.prepopulatedMessageContext;
    EasyMock.expect(this.requestContext.getMessageContext()).andStubReturn(this.messageContext);
    EasyMock.replay(new Object[] { this.requestContext });

    List<String> expectedOrderedIds = new ArrayList<String>();
    expectedOrderedIds.add(null);
    expectedOrderedIds.add("componentId");
    expectedOrderedIds.add("userMessage");

    int iterationCount = 0;
    Iterator<String> i = this.facesContext.getClientIdsWithMessages();
    while (i.hasNext()) {
      String clientId = i.next();
      assertEquals("Client id not expected", expectedOrderedIds.get(iterationCount), clientId);
      iterationCount++;
    }
    assertEquals(3, iterationCount);
  }

  public final void testMessagesAreSerializable() throws Exception {
    DefaultMessageContext messageContext = new DefaultMessageContext();
    EasyMock.expect(this.requestContext.getMessageContext()).andStubReturn(messageContext);
    EasyMock.replay(new Object[] { this.requestContext });

    this.facesContext.addMessage("TESTID", new FacesMessage("summary1"));
    FacesMessage sourceMessage = this.facesContext.getMessages("TESTID").next();
    sourceMessage.setSummary("summary2");
    sourceMessage.setSeverity(FacesMessage.SEVERITY_FATAL);

    Serializable mementoWrite = messageContext.createMessagesMemento();
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    ObjectOutputStream oos = new ObjectOutputStream(bos);
    oos.writeObject(mementoWrite);
    oos.flush();
    byte[] byteArray = bos.toByteArray();
    oos.close();

    ByteArrayInputStream bis = new ByteArrayInputStream(byteArray);
    ObjectInputStream ois = new ObjectInputStream(bis);
    Serializable mementoRead = (Serializable) ois.readObject();
    ois.close();

    messageContext.restoreMessages(mementoRead);
    EasyMock.reset(new Object[] { this.requestContext });
    EasyMock.expect(this.requestContext.getMessageContext()).andStubReturn(messageContext);
    EasyMock.replay(new Object[] { this.requestContext });

    FacesContext newFacesContext = new FlowFacesContext(this.requestContext, this.jsf.facesContext());
    assertSame(FacesContext.getCurrentInstance(), newFacesContext);
    FacesMessage gotMessage = newFacesContext.getMessages("TESTID").next();
    assertEquals("summary2", gotMessage.getSummary());
    assertEquals(FacesMessage.SEVERITY_FATAL, gotMessage.getSeverity());
  }

  public final void testGetMaximumSeverity() {
    this.messageContext = this.prepopulatedMessageContext;
    EasyMock.expect(this.requestContext.getMessageContext()).andStubReturn(this.messageContext);
    EasyMock.replay(new Object[] { this.requestContext });

    assertEquals(FacesMessage.SEVERITY_FATAL, this.facesContext.getMaximumSeverity());
  }

  public final void testGetELContext() {

    assertNotNull(this.facesContext.getELContext());
    assertSame(this.facesContext, this.facesContext.getELContext().getContext(FacesContext.class));
  }

  public final void testValidationFailed() {
    this.messageContext = new DefaultMessageContext();
    EasyMock.expect(this.requestContext.getMessageContext()).andStubReturn(this.messageContext);
    EasyMock.replay(new Object[] { this.requestContext });

    this.facesContext.addMessage("foo", new FacesMessage(FacesMessage.SEVERITY_ERROR, "foo", "bar"));

    assertEquals(true, this.facesContext.isValidationFailed());
  }

  private void setupMessageContext() {
    this.prepopulatedMessageContext = new DefaultMessageContext();
    this.prepopulatedMessageContext.addMessage(new FlowFacesContext.FlowFacesMessage(new FacesMessageSource(null),
        new FacesMessage("foo")));
    this.prepopulatedMessageContext.addMessage(new FlowFacesContext.FlowFacesMessage(new FacesMessageSource(
        "componentId"), new FacesMessage("componentId_summary1", "componentId_detail1")));
    this.prepopulatedMessageContext.addMessage(new FlowFacesContext.FlowFacesMessage(new FacesMessageSource(
        "componentId"), new FacesMessage("componentId_summary2", "componentId_detail2")));
    this.prepopulatedMessageContext.addMessage(new FlowFacesContext.FlowFacesMessage(new FacesMessageSource(null),
        new FacesMessage("baz")));
    this.prepopulatedMessageContext.addMessage(new MessageBuilder().source("userMessage").defaultText("userMessage")
        .info().build());
    this.prepopulatedMessageContext.addMessage(new MessageBuilder().defaultText("Subzero Wins - Fatality").fatal()
        .build());
  }
}
TOP

Related Classes of org.springframework.faces.webflow.FlowFacesContextTests

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.